Method: capture

Memulai perpindahan uang antara akun pelanggan yang disimpan dengan Google dan pemroses pembayaran. Kombinasi requestId dalam header dan paymentIntegratorAccountId adalah kunci idempotency 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:


{
  "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 akan 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 kontrak terkait transaksi ini.

transactionDescription

string

WAJIB: Deskripsi transaksi yang dapat dimasukkan dalam laporan mutasi pelanggan. Dilokalkan ke userLocale yang ditemukan di requestHeader. Format ini dapat diubah tanpa pemberitahuan dan tidak boleh diuraikan.

currencyCode

string

WAJIB: Kode mata uang 3 huruf ISO 4217

amount

string (Int64Value format)

WAJIB: Jumlah pembelian, dalam mikro unit mata uang.

captureContext

object (CaptureContext)

WAJIB: Konteks tentang gambar ini.

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

string

Token yang akan digunakan kedua perusahaan untuk mengidentifikasi akun untuk pembelian di antara 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 yang berikut:

authenticationRequestId

string

OPSIONAL: requestId dari permintaan autentikasi terkait. Jika tidak ada autentikasi, tidak ada autentikasi yang dapat dikaitkan dengan rekaman ini.

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

otpVerification

object (OtpVerification)

OPSIONAL: Data yang diperlukan untuk memverifikasi OTP yang dihasilkan dari sendOtp. 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.

Demi kemudahan, ID ini disertakan dalam detail transfer dana

userMessage
(deprecated)

string

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

result

enum (CaptureResultCode)

WAJIB: Hasil dari pengambilan ini.

rawResult

object (RawResult)

OPSIONAL: Hasil mentah dari rekaman ini. Digunakan untuk membantu memberi tahu mesin risiko dan analisis Google. Dalam situasi pemetaan kode penolakan, data terkadang hilang. Integrator dapat memilih untuk memberikan kode mentah kepada Google. Misalnya, gateway kartu kredit (integrator) dapat menggunakan kolom ini untuk menyampaikan kode penolakan persisnya yang diterima dari jaringan VISA kepada Google. Dalam hal ini, scope akan menjadi "visa" dan rawCode akan menjadi apa pun yang ditampilkan oleh jaringan VISA.

Nilai ini wajib jika result bukan SUCCESS.

transactionLimit

string (Int64Value format)

OPSIONAL: Jika Hasil adalah CHARGE_EXCEEDS_TRANSACTION_LIMIT, berarti ini adalah jumlah maksimum yang dapat dibelanjakan pengguna pada transaksi (dalam mikro). Hal ini digunakan untuk analisis rasio penolakan dan pesan terstruktur yang ditampilkan kepada pengguna.

Nilai ini harus berupa batas sesuai dengan currencyCode yang diminta.

currentBalance

string (Int64Value format)

OPSIONAL: Jika Hasil adalah INSUFFICIENT_FUNDS, berarti ini adalah saldo yang tersedia saat ini di akun pengguna (dalam mikro). Hal ini digunakan untuk pengiriman pesan terstruktur yang ditampilkan kepada pengguna.

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

MandateDetails

Detail tentang mandat untuk mengambil data.

Representasi JSON
{
  "mandateId": string
}
Kolom
mandateId

string

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

MandateWithNotificationDetails

Detail tentang mandat untuk mengambil data, bersama dengan detail notifikasi yang diperlukan.

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

string

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

upcomingTransactionNotificationId

string

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

CaptureContext

Objek ini memberikan konteks tentang cara 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, kolom ini akan kosong. Jika kontrak tertentu tidak menetapkan kebutuhan untuk kolom ini, kolom ini akan selalu kosong.

CaptureResultCode

Kode hasil untuk pengambilan.

Enum
UNKNOWN_RESULT Jangan pernah menetapkan nilai default ini!
SUCCESS Berhasil menangkap, mengirimkan barang.
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 saat ini karena telah melebihi batas hariannya.
CHARGE_EXCEEDS_MONTHLY_LIMIT Saat ini, akun ini tidak dapat digunakan untuk pembelian karena telah melebihi batas bulanannya.
CHARGE_UNDER_LIMIT amount permintaan pengambilan 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 disimpan dengan integrator telah ditutup.

Menampilkan nilai ini akan menyebabkan instrumen pengguna 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.

Menampilkan nilai ini akan menyebabkan instrumen pengguna 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 disimpan dengan integrator telah ditutup karena penipuan.

Menampilkan nilai ini akan menyebabkan instrumen pengguna 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.

Menampilkan nilai ini akan menyebabkan instrumen pengguna ditutup dengan Google. Pengguna akan dipaksa untuk menambahkan instrumen baru dengan melalui alur pengaitan lagi.

TOKEN_REFRESH_REQUIRED Jika ditampilkan, pengguna harus melalui alur refresh.
OTP_NOT_MATCHED OTP tidak cocok dengan yang dikirim integrator.
OTP_ALREADY_USED OTP sudah digunakan.
RISK_DECLINED

Transaksi ditolak karena pemeriksaan risiko di pihak integrator.

Kegagalan ini bersifat permanen untuk pembayaran ini, tetapi tidak menyebabkan instrumen pengguna ditutup di Google.

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

Penerbit atau sumber dana yang mendasarinya tidak tersedia dan percobaan ulang pembayaran yang ada ini tidak akan berhasil jika dicoba lagi.

Google akan mencoba kembali pembayaran jika kode respons 4xx atau 5xx dikirimkan oleh partner. Oleh karena itu, partner biasanya harus mengembalikan salah satu kode respons tersebut jika percobaan ulang untuk pembayaran yang sama ini dapat berhasil saat sumber dana yang mendasarinya kembali tersedia. Namun, jika ada alasan teknis yang membuat Google gagal mencoba kembali pembayaran, partner dapat mengembalikan "FUNDING_SOURCE_UNAVAILABLE" sebagai cara untuk memberi tahu Google bahwa pembayaran yang sama tidak boleh dilakukan kembali.

Catatan: Google masih dapat mencoba kembali pembayaran ini, tetapi hanya dengan requestId lain, tetapi permintaan pembayaran ini akan ditandai sebagai Ditolak.

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