Ajouter et supprimer des rappels

Ce guide explique comment utiliser des rappels avec l'API Google Wallet. Lorsqu'un une carte est créée ou supprimée, Google peut rappeler point de terminaison de votre choix. Ce rappel est spécifique à la carte et inclut des données sur l'événement, comme l'externalPassId et le type d'événement. Cela peut être utilisé pour suivre le nombre d'ajouts et de suppressions effectués par les utilisateurs. Pour Par exemple, les rappels peuvent être configurés pour envoyer des événements à une instance application pour suivre l'engagement client lors d'événements promotionnels.

Prérequis

Avant de commencer, vérifiez les conditions préalables suivantes:

  • Mettez en place un point de terminaison HTTPS qui gère les requêtes POST. Ce point de terminaison a besoin pour qu'elles soient accessibles au public.
  • Mettre à jour le rappel par programmation l'URL du point de terminaison pour l'émetteur. Consultez le callbackOptions de l'émetteur dans l'API REST.
  • Recommandation: utilisez la bibliothèque Tink pour vérifier les signatures.

Implémenter des rappels

Pour chaque ajout ou suppression effectué par l'utilisateur sur une carte , Google rappelle aux marchands les détails de l'ajout ou de la suppression sur une rappel de l'émetteur URL. Les marchands doivent d'abord utiliser les clés publiques pour vérifier l'authenticité le message. Une fois que les rappels ont vérifié le message, ils peuvent être utilisés pour les opérations en aval.

Vérifier la signature

Nous vous recommandons d'utiliser la bibliothèque Tink pour vérifier la signature du message lorsque vous implémentez votre point de terminaison HTTPS. La Bibliothèque Tink fournit PaymentMethodTokenRecipient, un utilitaire qui vérifie automatiquement la signature et renvoie le message validation réussie.

L'exemple suivant montre comment utiliser la bibliothèque Tink pour implémenter 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
  }
}

Format de message attendu

Le format du message est JSON, sérialisé en chaîne avec le code suivant : propriétés:

Identifiant Description
externalPassId

ID complet de la carte externe. Utilise le format suivant:

<issuer_id.external_pass_id>
expTimeMillis Délai d'expiration en millisecondes depuis EPOCH. Après le délai d'expiration, le message doit être considéré comme non valide.
eventType La valeur peut être del ou save pour DELETE et SAVE.
nonce Nonce de suivi des diffusions en double.

Gérer la requête d'un serveur Google

Voici une liste des champs clés de l'en-tête de la requête envoyé au point de terminaison de votre rappel:

  • User-agent: Googlebot
  • Type de contenu: application/json

Configurez votre serveur pour qu'il ne refuse pas la requête. Pour ce faire, vous pouvez Définissez les éléments suivants dans robots.txt:

User-agent: Googlebot
Disallow:

Tentatives

Les rappels sont exécutés de la manière la plus optimale possible. Google utilisera des stratégies de nouvelle tentative courantes être résilient dans les cas où le point de terminaison du rappel ne répond pas ou a une des pannes intermittentes et annulent les tentatives en douceur.

Distributions en double

Dans certains cas, il peut y avoir des diffusions en double. Nous vous recommandons d'utiliser nonce pour les dédupliquer.