Callbacks hinzufügen und löschen

In diesem Leitfaden wird erläutert, wie du Callbacks mit der Google Wallet API verwendest. Wenn ein Wert erstellt oder gelöscht wird, kann Google einen Callback zu einem HTTPS-Endpunkt deiner Wahl vornehmen. Dieser Callback ist klassenspezifisch und beinhaltet Daten über das Ereignis, wie zum Beispiel Klasse, Objekt und Ereignistyp. Dies ermöglicht eine synchrone Abstimmung mit der Anzahl der von Nutzern hinzugefügten und gelöschten Daten. So können Callbacks beispielsweise dazu konfiguriert werden, Ereignisse an eine Analyseanwendung zu senden, um Kundeninteraktionen bei Werbeaktionen nachzuvollziehen.

Voraussetzungen

Bevor du beginnst, müssen die folgenden Voraussetzungen erfüllt sein:

  • Richte einen HTTPS-Endpunkt ein, der POST-Anfragen verarbeitet. Dieser Endpunkt muss öffentlich verfügbar sein.
  • Aktualisiere den Callback-Endpunkt für jede Klasse programmatisch. Siehe Attribut callbackOptions nach Klasse in der REST API.
  • Empfohlen: Verwende die Tink-Bibliothek, um die Signaturen zu überprüfen.

Callbacks implementieren

Google sendet bei jedem Hinzufügen oder Löschen, das der Nutzer für ein Objekt ausführt, Callbacks an die Händler. Diese enthalten Details zum hinzugefügten oder gelöschten Element für jede einzelne URL. Händler müssen zuerst die Authentizität der Nachricht anhand der öffentlichen Schlüssel prüfen. Nachdem die Callbacks die Nachricht verifiziert haben, können sie für nachgelagerte Vorgänge verwendet werden.

Signatur überprüfen

Wir empfehlen, beim Implementieren des HTTPS-Endpunkts die Tink-Mediathek zur Prüfung der Nachrichtensignatur zu verwenden. Die Tink-Mediathek stellt PaymentMethodTokenRecipient bereit. Dieses Dienstprogramm überprüft die Signatur automatisch und gibt die Nachricht bei erfolgreicher Bestätigung zurück.

Das folgende Beispiel zeigt, wie die Tink-Mediathek zum Implementieren von PaymentMethodTokenRecipient verwendet wird:

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

Voll qualifizierte Objekt-ID. Verwendet das folgende Format:

<issuer_id.object_id>
expTimeMillis Ablaufzeit in Millisekunden seit EPOCH. Danach muss die Nachricht als ungültig eingestuft werden. eventType Kann entweder del oder save für DELETE und SAVE sein. nonce Nonce zur Nachverfolgung von doppelten Übermittlungen.

Anfrage von einem Google-Server verarbeiten

Im Folgenden findest du eine Liste der wichtigsten Felder im Header der Anfrage, die an deinen Callback-Endpunkt gesendet wird:

  • User-Agent: Google-Valuables
  • Inhaltstyp: application/json

Konfiguriere deinen Server so, dass er die Anfrage nicht ablehnt. Dazu kannst du in robots.txt Folgendes festlegen:

User-agent: Google-Valuables
Disallow:

Wiederholungsversuche

Callbacks werden bestmöglich umgesetzt. Im Falle von vorübergehenden Fehlern versucht Google drei Tage lang, die Nachricht zu senden. Nach drei Tagen löscht Google die Nachricht. Erneute Sendeversuche werden nicht mehr unternommen.

Doppelte Übermittlungen

In einigen Fällen kann es zu doppelten Übermittlungen kommen. Wir empfehlen die Verwendung von nonce, um sie zu deduplizieren.