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
callbackOptionsnach 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.