API tersebut mengikuti serangkaian standar HTTP API dan mendukung idempotency untuk memfasilitasi model integrasi.
URL yang dihosting Google
Dokumentasi untuk setiap metode yang dihosting Google menyediakan URL dasar, yang berisi nama metode dan nomor versi utama. URL lengkap dibuat dengan menambahkan ID Akun Integrator Pembayaran penelepon ke berakhir. Misalnya, dokumentasi untuk metode echo yang dihosting Google menentukan URL:
https://vgw.googleapis.com/secure-serving/gsp/v1/echo
Jika ID Akun Integrator Pembayaran penelepon adalah INTEGRATOR_1
, penelepon akan menambahkan
di akhir URL untuk membentuk:
https://vgw.googleapis.com/secure-serving/gsp/v1/echo/INTEGRATOR_1
URL yang dihosting partner
Dokumentasi untuk setiap metode API yang dihosting partner menyediakan URL dasar, yang
berisi nama metode dan nomor versi utama. Anda tidak boleh menyertakan
ID Akun Integrator Pembayaran (PIAID
)
di URL yang Anda host.
Sandbox dan lingkungan produksi
Google menghosting API Pembayaran Standar di kedua sandbox (untuk pengembangan dan pengujian) dan produksi. Permintaan di lingkungan sandbox Google tidak menghasilkan kewajiban keuangan dunia nyata. Kotak pasir dan lingkungan produksi benar-benar terpisah dan tidak berbagi kunci atau informasi transaksi.
Google mengharapkan bahwa sandbox Anda tersedia secara konsisten karena kami akan menggunakan {i>sandbox<i} untuk menguji perubahan dan fitur baru terlebih dahulu.
Jalur dasar sandbox Google
https://vgw.sandbox.google.com/secure-serving/gsp/
Jalur dasar Produksi Google
https://vgw.googleapis.com/secure-serving/gsp/
Panduan ini akan menggunakan endpoint produksi.
Jenis konten dan encoding
Payload pesan yang menggunakan enkripsi PGP harus menggunakan jenis kontenapplication/octet-stream; charset=utf-8
. Badan permintaan PGP harus
dikirim menggunakan pengkodean base64url, sebagaimana didefinisikan dalam
rfc4648 §5.
Payload pesan yang menggunakan enkripsi JWE harus menggunakan jenis konten
application/jose; charset=utf-8
. Opsi Serialisasi Ringkas
yang didukung oleh JWE/JWS menangani encoding untuk isi permintaan akhir.
Kode status HTTP
Standard Payments API dirancang untuk menampilkan kode status HTTP 200
untuk semua permintaan yang dapat diproses oleh server. Hal ini mencakup
permintaan yang berhasil dan ditolak dari perspektif bisnis atau
logika aplikasi. Permintaan yang tidak dapat diproses seharusnya tidak menghasilkan
Kode status HTTP 200
karena status tersebut mewakili error antara Google dan
partner Anda. Sebagai gantinya, respons API harus menggunakan status HTTP yang sesuai
kode di bawah ini dengan objek ErrorResponse
opsional.
Error HTTP dan Alasannya | |
---|---|
400 |
BAD REQUEST
Klien menentukan argumen yang tidak valid. Ini juga dapat dikembalikan jika operasi ditolak karena sistem tidak dalam status yang dibutuhkan untuk menjalankan operasi. Gunakan metode ini jika percobaan ulang permintaan tidak berhasil hingga status sistem telah diperbaiki secara eksplisit. Misalnya, jika permintaan pengembalian dana gagal karena itu merujuk ke tangkapan yang tidak ada, percobaan ulang tidak akan berhasil sampai penangkapan itu ada dalam sistem integrator.
|
401 |
UNAUTHORIZED
Permintaan tidak memiliki kredensial otentikasi yang valid untuk operasi. Misalnya, tanda tangan yang tidak valid atau tanda tangan tidak dikenal menampilkan 401. |
403 |
FORBIDDEN / PERMISSION DENIED
Pemanggil tidak memiliki izin untuk menjalankan operasi yang ditentukan. |
404 |
NOT FOUND
Beberapa entitas yang diminta seperti pembayaran atau pengguna tidak ditemukan. |
409 |
CONFLICT / ABORTED
Operasi dibatalkan, biasanya karena masalah konkurensi seperti kegagalan pemeriksaan sequencer, pembatalan transaksi, dll. |
412 |
PRECONDITION FAILED
Kode ini harus digunakan dalam situasi saat kunci idempotency digunakan kembali dengan parameter yang berbeda. |
429 |
RESOURCE EXHAUSTED / TOO MANY REQUESTS
Beberapa resource sistem telah habis. |
499 |
CANCELLED
Operasi dibatalkan (biasanya oleh pemanggil). |
500 |
INTERNAL ERROR
Error internal. Ini berarti beberapa invarian diharapkan oleh sistem dasar rusak. |
501 |
UNIMPLEMENTED
Operasi tidak diterapkan, didukung, atau diaktifkan dalam layanan ini. |
503 |
UNAVAILABLE
Saat ini layanan tidak tersedia. Kemungkinan besar ini adalah kondisi Anda dan dapat diperbaiki dengan mencoba lagi. |
504 |
GATEWAY TIMEOUT / DEADLINE EXCEEDED
Batas waktu berakhir sebelum operasi selesai. Untuk operasi yang mengubah keadaan sistem, {i>error<i} ini dapat muncul bahkan jika berhasil diselesaikan. Misalnya, respons yang berhasil dari server bisa tertunda cukup lama untuk tenggat waktu berakhir. |
Meminta idempotensi
idempotency permintaan adalah strategi terpusat yang digunakan dalam Standard Payments API yang digunakan untuk memastikan bahwa interaksi sistem antara Google dan partner andal dan fault-tolerant. Permintaan idempoten adalah permintaan yang dapat berpotensi dikirim beberapa kali tetapi memiliki efek yang sama dengan satu permintaan. Strategi ini memfasilitasi konsistensi tertunda di antara sistem dengan membuat percobaan ulang yang aman, sehingga sistem kita menyatu menjadi kesepakatan pada status resource.
API kami memanfaatkan idempotency untuk:
- mengurangi masalah rekonsiliasi dengan membuat semua tindakan mudah dilacak dan dapat diaudit.
- mencegah kondisi race dengan memastikan bahwa beberapa permintaan identik dari klien yang sama tidak menghasilkan status akhir yang berbeda.
- meminimalkan status dengan mengizinkan permintaan dipahami secara terpisah, memungkinkan untuk peningkatan performa dan throughput dengan menghapus beban server yang disebabkan oleh retensi data.
- agar tidak diperlukan kolom tambahan untuk menunjukkan apakah permintaan merupakan percobaan ulang
Contoh
Contoh 1: Konektivitas hilang sebelum respons diterima
Skenario:
- Google mengirimkan permintaan kepada integrator.
- Server integrator menerima permintaan ini dan berhasil memprosesnya.
- Server Google kehilangan daya sebelum menerima respons pada langkah #2.
- Daya server Google dipulihkan dan permintaan yang sama dikirim
dengan semua parameter yang sama (ID permintaan dan detail permintaan yang sama, tetapi diperbarui
requestTimestamp
) ke server integrator.
Hasil:
Dalam hal ini server integrator harus membalas
dengan balasan yang sama seperti yang diberikan di
langkah #2 karena semua parameter, kecuali responseTimestamp
, sama.
Efek samping hanya terjadi sekali, yaitu di langkah 2. Langkah 4 tidak memiliki efek samping.
Contoh 2: Permintaan dikirim ke server yang sedang menjalani pemeliharaan
Skenario:
- Database server integrator sedang dalam pemeliharaan.
- Google mengirimkan permintaan kepada integrator.
- Integrator menampilkan kode status
UNAVAILABLE
dengan benar. - Server Google akan menerima respons dan menjadwalkan percobaan ulang.
- Database server integrator kembali online.
- Google mengirim ulang permintaan dari langkah #2 (ID permintaan dan detail permintaan yang sama
tetapi memperbarui
requestTimestamp
). Perhatikan bahwa ID permintaan untuk kedua permintaan seharusnya sama. - Server integrator menerima permintaan dan mengembalikan kode status OK dengan respons lengkap.
Hasil:
Dalam hal ini, server integrator harus memproses permintaan di langkah #7 dan tidak
tampilkan HTTP 503
(UNAVAILABLE
). Sebaliknya, server integrator
harus sepenuhnya
memproses permintaan dan memunculkan OK
dengan pesan yang sesuai. Perhatikan bahwa meskipun
sistem UNAVAILABLE
Google dapat membuat permintaan berulang yang mirip dengan
langkah #2. Setiap permintaan akan menghasilkan pesan yang mirip dengan langkah #3.
Terakhir, langkah #6 dan langkah #7 akan terjadi.
Contoh 3: Pesan yang dicoba lagi tidak cocok dengan pesan awal karena error pemulihan
Skenario:
- Google mengirimkan permintaan kepada integrator.
- Server integrator menerima permintaan ini dan berhasil memprosesnya.
- Server Google kehilangan daya sebelum menerima respons di langkah #2.
- Daya server Google dipulihkan dan mencoba mengirim permintaan yang sama tetapi sayangnya beberapa parameternya berbeda.
Hasil:
Dalam hal ini server integrator harus membalas dengan 412
HTTP
(PRECONDITION FAILED
) kode kesalahan yang menunjukkan kepada Google bahwa ada
error dalam sistem ini.