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.