Callbacks hinzufügen und löschen

In diesem Leitfaden wird erläutert, wie Sie Callbacks mit der Google Wallet API verwenden. Wenn eine Karte erstellt oder gelöscht wird, kann Google einen Callback zu einem HTTPS-Endpunkt Ihrer 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.

Vorbereitung

Bevor Sie beginnen, 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. Weitere Informationen finden Sie unter Attribut callbackOptions nach Klasse in der REST API.
  • Empfohlen: Verwenden Sie 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.

Überprüfen Sie die Signatur

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

Erwartetes Nachrichtenformat

Das Nachrichtenformat ist JSON, das in einen String mit den folgenden Attributen serialisiert wird:

ID Beschreibung
classId

Voll qualifizierte Klassen-ID. Verwendet das folgende 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: Googlebot
  • Content-Type: application/json

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

User-agent: Googlebot
Disallow:

Neuversuche

Callbacks werden bestmöglich umgesetzt. Google verwendet gängige Wiederholungsstrategien, um in Fällen, in denen der Callback-Endpunkt nicht reagiert oder ein vorübergehender Ausfall auftritt, eine hohe Ausfallsicherheit zu gewährleisten.

Doppelte Übermittlungen

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