Questa guida spiega come utilizzare i callback con l'API Google Wallet. Quando viene creato o eliminato un pass, Google può eseguire un callback a un endpoint HTTPS a tua scelta. Questo callback è specifico per la classe e include dati sull'evento, come la classe, l'oggetto e il tipo di evento. Può essere utilizzato per tenere traccia del numero di aggiunte ed eliminazioni di utenti. Ad esempio, i callback possono essere configurati per inviare eventi a un'applicazione di analisi per monitorare il coinvolgimento dei clienti durante gli eventi promozionali.
Prerequisiti
Prima di iniziare, rivedi i seguenti prerequisiti:
- Configura un endpoint HTTPS che gestisca le richieste POST. Questo endpoint deve essere disponibile pubblicamente.
-
Aggiorna in modo programmatico l'endpoint di callback per ogni classe. Consulta la proprietà
callbackOptionsper classe nell'API REST. - Consigliato: utilizza la libreria Tink per verificare le firme.
Implementare i callback
Per ogni aggiunta o eliminazione eseguita dall'utente su un oggetto , Google esegue callback ai commercianti con i dettagli dell'aggiunta o dell'eliminazione su un URL per classe. I commercianti devono prima utilizzare le chiavi pubbliche per verificare l'autenticità del messaggio. Dopo che i callback verificano il messaggio, possono essere utilizzati per le operazioni downstream.
Verificare 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 in caso di
verifica riuscita.
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 formato seguente: <issuer_id.class_id> |
objectId |
ID oggetto completo. Utilizza il formato seguente: <issuer_id.object_id> |
expTimeMillis |
Tempo di scadenza in millisecondi dall'epoca. Dopo il periodo di scadenza, il messaggio deve essere considerato non valido. |
eventType |
Può essere del o save per
DELETE e SAVE.
|
nonce |
Nonce per monitorare eventuali consegne duplicate. |
Gestire la richiesta da un server Google
Di seguito è riportato un elenco dei campi chiave nell'intestazione della richiesta inviata all'endpoint di callback:
- User-agent:
Googlebot - Content-Type:
application/json
Configura il 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 eseguiti secondo il criterio del "best effort". Google utilizzerà strategie di ripetizione comuni per garantire la resilienza nei casi in cui l'endpoint di callback non risponde o ha un'interruzione intermittente e ritenterà gradualmente.
Consegne duplicate
In alcuni casi, potrebbero essere presenti consegne duplicate. Ti consigliamo di utilizzare
nonce per rimuovere i duplicati.