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 corso e include dati sull'evento, ad esempio classe, oggetto e 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.
-
Aggiornare in modo programmatico l'endpoint di callback per ogni classe. Consulta le
callbackOptionsproprietà per classe 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 un oggetto , Google richiama i commercianti con i dettagli relativi all'aggiunta o all'eliminazione in una per classe 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 |
|---|---|
classId |
ID classe completo. Utilizza il seguente formato: <issuer_id.class_id> |
objectId |
ID oggetto completo. Utilizza il seguente formato: <issuer_id.object_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.