Questa guida spiega come utilizzare i callback con l'API Google Wallet. Quando viene creato o eliminato un elemento importante, 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. Può essere utilizzato per rimanere sincronizzato con il numero di aggiunte ed eliminazioni utente 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 libreria Tink per verificare le firme.
Implementare i callback
Per ogni aggiunta o eliminazione eseguita dall'utente su un oggetto, Google effettua 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, 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 } }
Expected message format
The message format is JSON that's serialized into a string with the following properties:
Identifier | Description |
---|---|
classId |
Fully qualified class ID. Uses the following format: <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 consentire il monitoraggio di eventuali pubblicazioni duplicate.
Gestire la richiesta da un server di GoogleDi seguito è riportato un elenco dei campi chiave nell'intestazione della richiesta inviata all'endpoint di callback:
Configura il tuo server in modo che non rifiuti la richiesta. Per farlo, puoi impostare quanto segue in User-agent: Googlebot Disallow: Nuovi tentativiI 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 Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate. Ultimo aggiornamento 2024-03-26 UTC.
[]
[]
|