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.