Menambahkan dan menghapus callback

Panduan ini menjelaskan cara menggunakan callback dengan Google Wallet API. Saat kartu dibuat atau dihapus, Google dapat melakukan panggilan balik ke endpoint HTTPS pilihan Anda. Callback ini khusus untuk class, dan mencakup data tentang peristiwa seperti class, objek, dan jenis peristiwa. Hal ini dapat digunakan untuk melacak jumlah penambahan dan penghapusan pengguna yang terjadi. Misalnya, callback dapat dikonfigurasi untuk mengirim peristiwa ke aplikasi analisis guna melacak engagement pelanggan selama acara promosi.

Prasyarat

Sebelum memulai, tinjau prasyarat berikut:

  • Siapkan endpoint HTTPS yang menangani permintaan POST. Endpoint ini harus tersedia untuk publik.
  • Perbarui endpoint callback secara terprogram untuk setiap kelas. Lihat properti callbackOptions menurut class di REST API.
  • Direkomendasikan: Gunakan library Tink untuk memverifikasi tanda tangan.

Menerapkan callback

Untuk setiap penambahan atau penghapusan yang dilakukan oleh pengguna pada objek , Google melakukan panggilan balik ke penjual dengan detail tentang penambahan atau penghapusan pada URL per kelas. 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 pustaka Tink untuk memverifikasi tanda tangan pesan saat Anda menerapkan 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 menerapkan 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
  }
}

Format pesan yang diharapkan

Format pesan adalah JSON yang diserialisasi menjadi string dengan properti berikut:

ID Deskripsi
classId

ID class yang sepenuhnya memenuhi syarat. Menggunakan format berikut:

<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 waktu habis masa berlaku, pesan harus dianggap tidak valid.
eventType Dapat berupa del atau save untuk DELETE dan SAVE.
nonce Nonce untuk melacak pengiriman duplikat.

Menangani permintaan dari server Google

Berikut adalah daftar kolom utama di header permintaan yang dikirim ke endpoint callback Anda:

  • Agen Pengguna: Googlebot
  • Jenis-Konten: application/json

Konfigurasi server Anda agar tidak menolak permintaan. Untuk melakukannya, Anda dapat menetapkan hal berikut di robots.txt:

User-agent: Googlebot
Disallow:

Upaya coba lagi

Callback dilakukan berdasarkan upaya terbaik. Google akan menggunakan strategi percobaan ulang umum agar tetap tangguh jika endpoint callback tidak merespons atau mengalami gangguan sesekali dan akan menghentikan upaya dengan baik.

Pengiriman duplikat

Mungkin ada pengiriman duplikat dalam beberapa kasus. Sebaiknya gunakan nonce untuk menghapus duplikatnya.