Menambahkan dan menghapus callback

Panduan ini menjelaskan cara menggunakan callback dengan Google Wallet API. Ketika seorang dibuat atau dihapus, Google dapat melakukan callback ke HTTPS endpoint yang Anda pilih. Callback ini khusus kartu, dan menyertakan data tentang peristiwa seperti externalPassId dan jenis peristiwa. Model ini dapat digunakan untuk melacak jumlah penambahan dan penghapusan pengguna yang terjadi. Sebagai Misalnya, callback dapat dikonfigurasi untuk mengirim peristiwa ke server Analytics. untuk melacak customer engagement selama acara promosi.

Prasyarat

Sebelum memulai, tinjau prasyarat berikut:

  • Siapkan endpoint HTTPS yang menangani permintaan POST. Endpoint ini membutuhkan tersedia untuk umum.
  • Mengupdate callback secara terprogram URL endpoint untuk penerbit. Lihat callbackOptions untuk penerbit di REST API.
  • Direkomendasikan: Gunakan library Tink untuk memverifikasi tanda tangan.

Mengimplementasikan callback

Untuk setiap penambahan atau penghapusan yang dilakukan oleh pengguna pada kartu , Google akan melakukan callback ke penjual dengan detail tentang penambahan atau penghapusan konten di callback penerbit . Penjual harus menggunakan Kunci Publik terlebih dahulu untuk memverifikasi keaslian menulis 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 menerapkan endpoint HTTPS. Tujuan Library Tink menyediakan PaymentMethodTokenRecipient, utilitas yang memverifikasi tanda tangan itu secara otomatis dan mengembalikan pesan yang sebenarnya pada 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
  }
}

Format pesan yang diharapkan

Format pesannya adalah JSON yang diserialisasi ke dalam string dengan properti:

ID Deskripsi
externalPassId

ID kartu eksternal yang sepenuhnya memenuhi syarat. Menggunakan format berikut:

<issuer_id.external_pass_id>
expTimeMillis Waktu habis masa berlaku dalam milidetik sejak EPOCH. Setelah masa berlaku habis, pesan tersebut 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 kunci dalam header permintaan yang dikirim ke endpoint callback Anda:

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

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

User-agent: Googlebot
Disallow:

Upaya coba lagi

Callback atas dasar upaya terbaik. Google akan menggunakan strategi percobaan ulang umum menjadi tangguh saat endpoint callback tidak merespons atau memiliki pemadaman layanan sesekali dan akan membatalkan upaya dengan halus.

Pengiriman duplikat

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