Callbacks hinzufügen und löschen

In diesem Leitfaden wird erläutert, wie Callbacks mit der Google Wallet API verwendet werden. Wenn ein Karte/Ticket erstellt oder gelöscht wird, kann Google einen Callback zu einer einen Endpunkt Ihrer Wahl. Dieser Callback ist klassenspezifisch und enthält Daten zum Ereignis, z. B. Klasse, Objekt und Ereignistyp. Dies kann verwendet werden, um Die Anzahl der von Nutzern hinzugefügten und gelöschten Daten wird erfasst. Für Callbacks können beispielsweise so konfiguriert werden, dass Ereignisse an ein Analytics-Konto um Kundeninteraktionen bei Werbeaktionen zu verfolgen.

Vorbereitung

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

  • Richten Sie einen HTTPS-Endpunkt ein, der POST-Anfragen verarbeitet. Dieser Endpunkt benötigt öffentlich zugänglich sind.
  • Aktualisieren Sie den Callback-Endpunkt für jede Klasse programmatisch. Weitere Informationen finden Sie in der callbackOptions Property nach Klasse in der REST API.
  • Empfohlen: Verwenden Sie die Tink-Bibliothek, um die Signaturen zu überprüfen.

Callbacks implementieren

Bei jedem Hinzufügen oder Löschen, das der Nutzer auf einer Objekt , sendet Google Callbacks an die Händler, die Details zum Hinzufügen oder Löschen pro Klasse URL Händler müssen zuerst anhand der öffentlichen Schlüssel die Authentizität in der Nachricht. Nachdem die Callbacks die Nachricht verifiziert haben, können sie für nachgelagerte Vorgänge.

Überprüfen Sie die Signatur

Wir empfehlen, die Tink-Bibliothek zur Überprüfung der Nachrichtensignatur zu verwenden wenn Sie den HTTPS-Endpunkt implementieren. Die Tink-Mediathek PaymentMethodTokenRecipient, ein Dienstprogramm, das überprüft die Signatur automatisch und gibt die Nachricht nach Bestätigung erfolgreich war.

Das folgende Beispiel zeigt, wie die Tink-Bibliothek zum Implementieren 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
  }
}

Erwartetes Nachrichtenformat

Das Nachrichtenformat ist JSON, das in einen String mit folgendem Text serialisiert ist: Eigenschaften:

Kennung 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. Nach der Ablaufzeit muss die Nachricht als ungültig eingestuft werden.
eventType Kann entweder del oder save für DELETE und SAVE.
nonce Nonce zur Nachverfolgung von doppelten Übermittlungen.

Anfrage von einem Google-Server verarbeiten

Im Folgenden finden Sie eine Liste der wichtigsten Felder im Header der Anfrage. an deinen Callback-Endpunkt gesendet:

  • User-Agent: Googlebot
  • Inhaltstyp: application/json

Konfigurieren Sie Ihren Server so, dass er die Anfrage nicht ablehnt. Dazu können Sie Legen Sie in robots.txt Folgendes fest:

User-agent: Googlebot
Disallow:

Neuversuche

Callbacks werden auf Best-Effort-Basis durchgeführt. Google verwendet gängige Wiederholungsstrategien in Fällen, in denen der Callback-Endpunkt nicht reagiert oder eine vorübergehenden Ausfällen und wehrt Versuche dann ordnungsgemäß ab.

Doppelte Übermittlungen

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