Aggiungere ed eliminare callback

Questa guida spiega come utilizzare i callback con l'API Google Wallet. Quando pass viene creato o eliminato, Google può eseguire un callback a un endpoint di tua scelta. Questo callback è specifico per il pass e include dati sull'evento, ad esempio externalPassId e il tipo di evento. Può essere utilizzato per tenere traccia del numero di aggiunte ed eliminazioni di utenti. Per Ad esempio, i callback possono essere configurati per inviare eventi a un per monitorare il coinvolgimento dei clienti durante gli eventi promozionali.

Prerequisiti

Prima di iniziare, rivedi i seguenti prerequisiti:

  • Creare un endpoint HTTPS che gestisce le richieste POST. Questo endpoint richiede sia disponibile pubblicamente.
  • Aggiorna il callback in modo programmatico URL dell'endpoint per l'emittente. Consulta le callbackOptions per l'emittente nell'API REST.
  • Opzione consigliata: utilizza la libreria Tink per verificare le firme.

Implementa i callback

Per ogni aggiunta o eliminazione eseguita dall'utente su una tessera , Google richiama i commercianti con i dettagli relativi all'aggiunta o all'eliminazione in una callback dell'emittente URL. I commercianti devono prima utilizzare le chiavi pubbliche per verificare l'autenticità delle il messaggio. Dopo che i callback hanno verificato il messaggio, puoi utilizzare i callback per le operazioni downstream.

Verifica la firma

Ti consigliamo di utilizzare la libreria Tink per verificare la firma del messaggio quando implementi l'endpoint HTTPS. La Libreria Tink fornisce PaymentMethodTokenRecipient, un'utilità che verifica automaticamente la firma e restituisce il messaggio effettivo verifica completata.

L'esempio seguente mostra come utilizzare la libreria Tink per implementare 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
  }
}

Formato del messaggio previsto

Il formato del messaggio è JSON, serializzato in una stringa con le seguenti proprietà:

Identificatore Descrizione
externalPassId

ID documento esterno completo. Utilizza il seguente formato:

<issuer_id.external_pass_id>
expTimeMillis Tempo di scadenza in millisecondi dall'EPOCH. Dopo la scadenza, il messaggio deve essere considerato non valido.
eventType Può essere del o save per DELETE e SAVE.
nonce Nonce per tracciare le pubblicazioni duplicate.

Gestisci la richiesta da un server Google

Di seguito è riportato un elenco dei campi chiave nell'intestazione della richiesta inviati all'endpoint di callback:

  • User agent: Googlebot
  • Tipo di contenuti: application/json

Configura il tuo server in modo che non rifiuti la richiesta. Per farlo, puoi imposta quanto segue in robots.txt:

User-agent: Googlebot
Disallow:

Nuovi tentativi

Le richiamate vengono eseguite secondo il criterio del "best effort". Google utilizzerà strategie comuni per i nuovi tentativi in modo che sia resiliente nei casi in cui l'endpoint di callback non risponde o ha un un'interruzione intermittente del servizio ed eviterà agevolmente i tentativi.

Consegne duplicate

In alcuni casi potrebbero verificarsi caricamenti duplicati. Ti consigliamo di utilizzare nonce per deduplicarle.