Questa guida spiega come utilizzare i callback con l'API Google Wallet. Quando viene creata o eliminata una tessera, Google può eseguire un callback a un endpoint HTTPS di tua scelta. Questo callback è specifico della classe e include dati sull'evento come classe, oggetto e tipo di evento. Questa funzionalità può essere utilizzata per tenere traccia del numero di aggiunte ed eliminazioni degli utenti che si verificano. Ad esempio, i callback possono essere configurati per inviare eventi a un'applicazione di analisi al fine di 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 deve essere disponibile pubblicamente.
-
Aggiorna in modo programmatico l'endpoint di callback per ogni classe. Visualizza la proprietà
callbackOptions
per classe nell'API REST. - Consigliato: usa la raccolta Tink per verificare le firme.
Implementare i callback
Per ogni aggiunta o eliminazione effettuata dall'utente su un oggetto , Google effettua callback ai commercianti con dettagli sull'aggiunta o sull'eliminazione in un URL per ogni classe. I commercianti devono prima utilizzare le chiavi pubbliche per verificare l'autenticità del messaggio. Dopo che i callback verificano il messaggio, i callback possono essere utilizzati per le operazioni downstream.
Verifica la firma
Ti consigliamo di utilizzare la libreria Tink per verificare la firma dei messaggi quando implementi l'endpoint HTTPS. La libreria Tink fornisce PaymentMethodTokenRecipient
, un'utilità che verifica automaticamente la firma e restituisce il messaggio effettivo dopo l'esito positivo della verifica.
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 del corso 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 |
Non tenere traccia di eventuali pubblicazioni duplicate. |
Gestire la richiesta da un server di Google
Di seguito è riportato un elenco dei campi chiave nell'intestazione della richiesta inviata all'endpoint di callback:
- User agent:
Googlebot
- Tipo di contenuto:
application/json
Configura il tuo server in modo che non rifiuti la richiesta. Per farlo, puoi impostare quanto segue in robots.txt
:
User-agent: Googlebot Disallow:
Nuovi tentativi
I callback vengono selezionati secondo il criterio del "best effort". Google tenta due volte di tenere conto degli errori temporanei. Dopo un doppio tentativo, Google elimina il messaggio e non riprova a inviarlo.
Consegne duplicate
In alcuni casi potrebbero essere presenti consegne duplicate. Ti consigliamo di utilizzare nonce
per deduplicarli.