Callbacks hinzufügen und löschen

In diesem Leitfaden wird erläutert, wie Callbacks mit der Google Wallet API verwendet werden. Wenn eine Karte bzw. ein Ticket erstellt oder gelöscht wird, kann Google einen Callback zu einem HTTPS-Endpunkt deiner Wahl vornehmen. Dieser Callback ist Karten-/Ticketspezifisch und enthält Daten über das Ereignis, z. B. die externalPassId und den Ereignistyp. Damit lässt sich die Anzahl der von Nutzern hinzugefügten und gelöschten Daten im Blick behalten. Callbacks können beispielsweise so konfiguriert werden, dass Ereignisse an eine Analyseanwendung gesendet werden, um Kundeninteraktionen bei Werbeaktionen nachzuverfolgen.

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 die Callback-Endpunkt-URL für den Aussteller programmatisch. Siehe das Attribut callbackOptions für den Aussteller 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 auf einer Karte bzw. einem Ticket ausführt, Callbacks an die Händler mit Details zum hinzugefügten oder gelöschten Element über die Callback-URL des Ausstellers. 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-Bibliothek zum Überprüfen der Nachrichtensignatur zu verwenden. Die Tink-Bibliothek 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-Bibliothek 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 partitioniert ist:

Kennung Beschreibung
externalPassId

Voll qualifizierte externe Karten-/Ticket-ID. Verwendet das folgende Format:

<issuer_id.external_pass_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
  • Inhaltstyp: application/json

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

User-agent: Googlebot
Disallow:

Wiederholungsversuche

Callbacks werden bestmöglich umgesetzt. Google versucht zweimal, vorübergehende Ausfälle zu berücksichtigen. Nach zwei Versuchen löscht Google die Nachricht. Es wird nicht versucht, sie noch einmal zu senden.

Doppelte Übermittlungen

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