Panduan ini menjelaskan cara menggunakan callback dengan Google Wallet API. Saat item berharga dibuat atau dihapus, Google dapat melakukan callback ke endpoint HTTPS yang Anda pilih. Callback ini khusus untuk class, dan menyertakan data tentang peristiwa seperti class, objek, dan jenis peristiwa. Ini dapat digunakan untuk tetap sinkron dengan jumlah penambahan dan penghapusan pengguna yang terjadi. Sebagai contoh, callback dapat dikonfigurasi untuk mengirim peristiwa ke aplikasi analisis untuk melacak customer engagement selama acara promosi.
Prasyarat
Sebelum memulai, tinjau prasyarat berikut:
- Siapkan endpoint HTTPS yang menangani permintaan POST. Endpoint ini harus tersedia untuk publik.
-
Mengupdate endpoint callback secara terprogram untuk setiap class. Lihat properti
callbackOptions
berdasarkan class di REST API. - Direkomendasikan: Gunakan library Tink untuk memverifikasi tanda tangan.
Mengimplementasikan callback
Untuk setiap penambahan atau penghapusan yang dilakukan oleh pengguna pada suatu objek, Google membuat callback ke penjual dengan detail tentang penambahan atau penghapusan pada URL per class. Penjual harus menggunakan Kunci Publik terlebih dahulu untuk memverifikasi keaslian pesan. Setelah callback memverifikasi pesan, callback dapat digunakan untuk operasi downstream.
Memverifikasi tanda tangan
Sebaiknya gunakan library Tink untuk memverifikasi tanda tangan pesan
saat Anda mengimplementasikan endpoint HTTPS.
Library Tink
menyediakan PaymentMethodTokenRecipient
, utilitas yang
secara otomatis memverifikasi tanda tangan dan menampilkan pesan sebenarnya setelah
verifikasi berhasil.
Contoh berikut menunjukkan cara menggunakan library Tink untuk mengimplementasikan
PaymentMethodTokenRecipient
:
import java.io.IOException; import javax.servlet.http.*; import com.google.common.io.CharStreams; import com.google.crypto.tink.apps.paymentmethodtoken.*; // Replace ISSUER_ID with your issuer id private static final String RECIPIENT_ID = "ISSUER_ID"; private static final String PUBLIC_KEY_URL = "https://pay.google.com/gp/m/issuer/keys"; private static final String SENDER_ID = "GooglePayPasses"; private static final String PROTOCOL = "ECv2SigningOnly"; private static final GooglePaymentsPublicKeysManager keysManager = new GooglePaymentsPublicKeysManager.Builder() .setKeysUrl(PUBLIC_KEY_URL) .build(); public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { try { // Extract signed message with signature from POST request body. String signedMessage = CharStreams.toString(request.getReader()); PaymentMethodTokenRecipient recipient = new PaymentMethodTokenRecipient.Builder() .protocolVersion(PROTOCOL) .fetchSenderVerifyingKeysWith(keysManager) .senderId(SENDER_ID) .recipientId(RECIPIENT_ID) .build(); String serializedJsonMessage = recipient.unseal(signedMessage); // Use serializedJsonMessage to extract the details } catch (Exception e) { // Handle the error } }
Expected message format
The message format is JSON that's serialized into a string with the following properties:
Identifier | Description |
---|---|
classId |
Fully qualified class ID. Uses the following format: <issuer_id.class_id> objectId
ID objek yang sepenuhnya memenuhi syarat. Menggunakan format berikut: <issuer_id.object_id> expTimeMillis
Waktu habis masa berlaku dalam milidetik sejak EPOCH. Setelah masa berlaku habis,
pesan harus dianggap tidak valid.
eventType
Dapat berupa del atau save untuk
DELETE dan SAVE .
nonce
Nonce untuk melacak setiap pengiriman duplikat.
Menangani permintaan dari server GoogleBerikut adalah daftar kolom utama dalam header permintaan yang dikirim ke endpoint callback Anda:
Konfigurasi server Anda agar tidak menolak permintaan. Untuk melakukannya, Anda dapat
menetapkan hal berikut di User-agent: Googlebot Disallow: Upaya coba lagiCallback merupakan upaya terbaik. Google mencoba dua kali untuk memperhitungkan kegagalan sementara. Setelah mencoba dua kali, Google akan menghapus pesan dan tidak mencoba mengirimnya ulang lagi. Pengiriman duplikat
Mungkin ada pengiriman duplikat dalam beberapa kasus. Sebaiknya gunakan
Kecuali dinyatakan lain, konten di halaman ini dilisensikan berdasarkan Lisensi Creative Commons Attribution 4.0, sedangkan contoh kode dilisensikan berdasarkan Lisensi Apache 2.0. Untuk mengetahui informasi selengkapnya, lihat Kebijakan Situs Google Developers. Java adalah merek dagang terdaftar dari Oracle dan/atau afiliasinya. Terakhir diperbarui pada 2024-03-26 UTC.
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"Informasi yang saya butuhkan tidak ada"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"Terlalu rumit/langkahnya terlalu banyak"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"Sudah usang"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"Masalah terjemahan"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"Masalah kode / contoh"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"Lainnya"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"Mudah dipahami"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"Memecahkan masalah saya"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"Lainnya"
}]
|