Aggiungere ed eliminare callback

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 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.