Method: capture

Memulai perpindahan uang antara akun pelanggan yang ada di Google dan pemroses pembayaran. Kombinasi requestId dalam header dan paymentIntegratorAccountId adalah kunci idempotensi dan mengidentifikasi transaksi ini secara unik. Semua mutasi pada transaksi ini (pengembalian dana) mengisi nilai requestId di kolom captureRequestId.

Jika endpoint mengalami error saat memproses permintaan, isi respons dari endpoint ini harus berjenis ErrorResponse.

Contoh permintaan terlihat seperti ini:


{
  "requestHeader": {
    "protocolVersion": {
      "major": 1,
      "minor": 0,
      "revision": 0
    },
    "requestId": "bWVyY2hhbnQgdHJhbnNhY3Rpb24gaWQ",
    "requestTimestamp": "1502220196077"
  },
  "paymentIntegratorAccountId": "InvisiCashUSA_USD",
  "googlePaymentToken": "ZXhhbXBsZSB1bmlxdWUgcGF5bWVudCB0b2tlbiB2YWx1ZQ",
  "transactionDescription": "Google - Music",
  "currencyCode": "INR",
  "amount": "728000000",
  "captureContext": {}
}

Contoh respons terlihat seperti ini:


{
  "responseHeader": {
    "responseTimestamp": "1481900013178"
  },
  "result": "SUCCESS",
  "paymentIntegratorTransactionId": "aW50ZWdyYXRvciB0cmFuc2FjdGlvbiBpZA"
}

Permintaan HTTP

POST https://www.integratorhost.example.com/v1/capture

Isi permintaan

Isi permintaan memuat data dengan struktur berikut:

Representasi JSON
{
  "requestHeader": {
    object (RequestHeader)
  },
  "paymentIntegratorAccountId": string,
  "transactionDescription": string,
  "currencyCode": string,
  "amount": string,
  "captureContext": {
    object (CaptureContext)
  },

  // Union field fopDetails can be only one of the following:
  "googlePaymentToken": string,
  "mandateDetails": {
    object (MandateDetails)
  },
  "mandateWithNotificationDetails": {
    object (MandateWithNotificationDetails)
  }
  // End of list of possible types for union field fopDetails.

  // Union field account_verification can be only one of the following:
  "authenticationRequestId": string,
  "otpVerification": {
    object (OtpVerification)
  }
  // End of list of possible types for union field account_verification.
}
Kolom
requestHeader

object (RequestHeader)

WAJIB: Header umum untuk semua permintaan.

paymentIntegratorAccountId

string

WAJIB: Ini adalah ID akun integrator pembayaran yang mengidentifikasi batasan kontraktual terkait transaksi ini.

transactionDescription

string

WAJIB: Ini adalah deskripsi transaksi yang dapat ditampilkan di laporan mutasi pelanggan. Dilokalkan ke userLocale yang ditemukan di requestHeader. Format ini dapat diubah tanpa pemberitahuan dan tidak boleh diurai.

currencyCode

string

WAJIB: Kode mata uang 3 huruf ISO 4217

amount

string (Int64Value format)

WAJIB: Jumlah pembelian, dalam micros satuan mata uang.

captureContext

object (CaptureContext)

WAJIB: Konteks tentang rekaman ini.

Kolom union fopDetails. WAJIB: Detail FOP untuk transaksi Capture ini. fopDetails hanya dapat berupa salah satu dari berikut:
googlePaymentToken

string

Token yang akan digunakan kedua perusahaan untuk mengidentifikasi akun untuk pembelian satu sama lain.

mandateDetails

object (MandateDetails)

Detail pembayaran khusus untuk mandat.

mandateWithNotificationDetails

object (MandateWithNotificationDetails)

Detail pembayaran khusus untuk mandat, yang memerlukan upcomingTransactionNotification.

Kolom union account_verification.

account_verification hanya dapat berupa salah satu dari berikut:

authenticationRequestId

string

OPSIONAL: requestId dari permintaan autentikasi yang terkait. Jika ini tidak ada, maka tidak ada autentikasi yang dapat dikaitkan ke tangkapan ini.

Jika hal ini ada, berarti pengguna telah diautentikasi segera sebelum panggilan ini, atau diautentikasi saat jadwal pembayaran otomatis disiapkan.

otpVerification

object (OtpVerification)

OPSIONAL: Data yang diperlukan untuk memverifikasi OTP yang dihasilkan dari sendOtp. Kolom ini hanya ada jika pengguna melalui jalur sendOtp.

Isi respons

Objek respons untuk metode pengambilan.

Jika berhasil, isi respons memuat data dengan struktur berikut:

Representasi JSON
{
  "responseHeader": {
    object (ResponseHeader)
  },
  "paymentIntegratorTransactionId": string,
  "userMessage": string,
  "result": enum (CaptureResultCode),
  "rawResult": {
    object (RawResult)
  },
  "transactionLimit": string,
  "currentBalance": string
}
Kolom
responseHeader

object (ResponseHeader)

WAJIB: Header umum untuk semua respons.

paymentIntegratorTransactionId

string

OPSIONAL: ID ini khusus untuk integrator dan dihasilkan oleh integrator. Ini adalah ID yang digunakan integrator untuk mengetahui transaksi ini.

Untuk memudahkan, ID ini disertakan dalam detail pembayaran

userMessage
(deprecated)

string

TIDAK DIGUNAKAN LAGI: Deskripsi hasil yang akan ditampilkan kepada pengguna jika hasilnya bukan SUCCESS.

result

enum (CaptureResultCode)

REQUIRED: Hasil pengambilan ini.

rawResult

object (RawResult)

OPSIONAL: Hasil mentah dari pengambilan ini. Digunakan untuk membantu menginformasikan mesin risiko dan analisis Google. Dalam situasi pemetaan kode penolakan, terkadang data hilang. Integrator dapat memilih untuk memberi Google kode mentah. Misalnya, gateway kartu kredit (integrator) dapat menggunakan kolom ini untuk memberitahukan kode penolakan persis yang diterima dari jaringan VISA kepada Google. Dalam hal ini, scope akan menjadi "visa" dan rawCode akan berupa berapa pun jaringan VISA yang ditampilkan.

Nilai ini wajib jika result bukan SUCCESS.

transactionLimit

string (Int64Value format)

OPSIONAL: Jika Hasilnya adalah CHARGE_EXCEEDS_TRANSACTION_LIMIT, ini adalah jumlah maksimum yang dapat dibelanjakan pengguna pada sebuah transaksi (dalam micros). Hal ini digunakan untuk pesan terstruktur yang ditampilkan kepada pengguna dan analisis tarif penolakan.

Jumlah ini harus menjadi batas yang sesuai dengan currencyCode pada permintaan.

currentBalance

string (Int64Value format)

OPSIONAL: Jika Hasilnya adalah INSUFFICIENT_FUNDS, berarti ini adalah saldo yang tersedia saat ini di akun pengguna (dalam micros). Ini digunakan untuk pesan terstruktur yang ditampilkan kepada pengguna.

Nilai ini harus dalam mata uang yang sama dengan currencyCode di permintaan.

MandateDetails

Detail tentang mandat yang harus diambil.

Representasi JSON
{
  "mandateId": string
}
Kolom
mandateId

string

WAJIB: ID mandat buatan Google yang dikirim selama panggilan createMandate.

MandateWithNotificationDetails

Detail tentang mandat yang harus diambil, beserta detail notifikasi yang diperlukan.

Representasi JSON
{
  "mandateId": string,
  "upcomingTransactionNotificationId": string
}
Kolom
mandateId

string

WAJIB: ID mandat buatan Google yang dikirim selama panggilan createMandate.

upcomingTransactionNotificationId

string

WAJIB: requestId dari panggilan upcomingTransactionNotification, yang dibuat untuk memberi tahu sebelumnya tentang transaksi ini.

CaptureContext

Objek ini memberikan konteks tentang bagaimana pengambilan gambar diminta.

Representasi JSON
{
  "userIpAddress": string
}
Kolom
userIpAddress

string

OPSIONAL: Ini adalah alamat IP perangkat pengguna jika pembelian dilakukan oleh pengguna dalam sesi. Jika pengguna tidak ada dalam sesi, ini akan kosong. Jika kontrak tertentu tidak menyebutkan kebutuhan untuk kolom ini, kolom tersebut akan selalu kosong.

CaptureResultCode

Kode hasil untuk pengambilan.

Enum
UNKNOWN_RESULT Jangan pernah menetapkan nilai default ini.
SUCCESS Berhasil ditangkap, kirim barangnya.
CHARGE_EXCEEDS_TRANSACTION_LIMIT amount permintaan pengambilan ini melebihi batas per transaksi. Jika kode ini digunakan, isi kolom transactionLimit untuk tujuan pesan pengguna.
CHARGE_EXCEEDS_DAILY_LIMIT Akun ini tidak dapat digunakan untuk pembelian sekarang karena telah melebihi batas harian.
CHARGE_EXCEEDS_MONTHLY_LIMIT Akun ini tidak dapat digunakan untuk pembelian sekarang karena telah melebihi batas bulanannya.
CHARGE_UNDER_LIMIT amount permintaan pengambilan gambar ini tidak memenuhi jumlah transaksi minimum.
INSUFFICIENT_FUNDS Akun ini tidak memiliki cukup dana untuk menjamin penangkapan ini.
ACCOUNT_DOES_NOT_SUPPORT_CURRENCY Akun ini tidak mendukung mata uang yang diminta.
ACCOUNT_CLOSED

Akun pengguna yang dimiliki oleh integrator telah ditutup.

Jika nilai ini ditampilkan, instrumen pengguna akan ditutup dengan Google. Pengguna akan dipaksa untuk menambahkan instrumen baru dengan melalui alur pengaitan lagi.

ACCOUNT_CLOSED_ACCOUNT_TAKEN_OVER

Akun pengguna dengan integrator telah ditutup, akun yang dicurigai mengambil alih.

Jika nilai ini ditampilkan, instrumen pengguna akan ditutup dengan Google. Pengguna akan dipaksa untuk menambahkan instrumen baru dengan melalui alur pengaitan lagi.

ACCOUNT_ON_HOLD Akun ditangguhkan.
ACCOUNT_CLOSED_FRAUD

Akun pengguna yang dimiliki bersama integrator telah ditutup karena penipuan.

Jika nilai ini ditampilkan, instrumen pengguna akan ditutup dengan Google. Pengguna akan dipaksa untuk menambahkan instrumen baru dengan melalui alur pengaitan lagi.

GOOGLE_PAYMENT_TOKEN_INVALIDATED_BY_USER

Akun aktif, tetapi GPT telah dibatalkan validasinya oleh pengguna di sisi integrator.

Jika nilai ini ditampilkan, instrumen pengguna akan ditutup dengan Google. Pengguna akan dipaksa untuk menambahkan instrumen baru dengan melalui alur pengaitan lagi.

TOKEN_REFRESH_REQUIRED Untuk mengembalikan ini, pengguna harus melalui alur pemuatan ulang.
OTP_NOT_MATCHED OTP tidak sesuai dengan yang dikirim integrator.
OTP_ALREADY_USED OTP sudah digunakan.
RISK_DECLINED

Transaksi ditolak karena pemeriksaan risiko dari pihak integrator.

Ini adalah kegagalan permanen untuk pembayaran ini, tetapi tidak menyebabkan instrumen pengguna ditutup di Google.

NO_GOOD_FUNDING_SOURCE_AVAILABLE Pengguna tidak memiliki sumber pendanaan yang berfungsi yang dikonfigurasi di akunnya yang dapat membayar transaksi.
FUNDING_SOURCE_UNAVAILABLE

Penerbit atau sumber dana pokok tidak tersedia dan mencoba kembali pembayaran yang ada ini tidak akan berhasil jika dicoba lagi.

Google akan mencoba kembali pembayaran jika kode respons 4xx atau 5xx ditampilkan oleh partner. Oleh karena itu, partner biasanya akan menampilkan salah satu kode respons tersebut jika percobaan ulang pembayaran yang sama ini mungkin berhasil saat sumber dana pokok kembali tersedia. Namun, jika ada alasan teknis di mana Google mencoba kembali pembayaran akan terus gagal, partner dapat mengembalikan "FUNDING_SOURCE_UNAVAILABLE" sebagai cara untuk memberi tahu Google bahwa pihaknya tidak boleh mencoba kembali pembayaran yang sama ini.

Catatan: Google tetap dapat mencoba lagi pembayaran ini, tetapi hanya dengan requestId yang berbeda, tetapi permintaan pembayaran ini akan ditandai sebagai Ditolak.

MANDATE_NOT_ACTIVE Mandat yang digunakan untuk pengambilan ini tidak lagi aktif. Nilai hasil ini akan menyebabkan instrumen mandat pengguna ditutup dengan Google.
UPCOMING_TRANSACTION_NOTIFICATION_EXPIRED Notifikasi yang dikirimkan kepada pengguna untuk pembayaran mandat berulang sudah tidak berlaku.