En esta guía, se explica cómo usar devoluciones de llamada con la API de Google Wallet. Cuando se crea o borra un pase, Google puede realizar una devolución de llamada a un extremo HTTPS de tu elección. Esta devolución de llamada es específica de la clase y contiene datos sobre el evento, como la clase, el objeto y el tipo de evento. Se puede usar para hacer un seguimiento de la cantidad de usuarios que se agregan y eliminan. Por ejemplo, las devoluciones de llamada se pueden configurar para enviar eventos a una aplicación de estadísticas y hacer un seguimiento de la participación del cliente durante los eventos promocionales.
Requisitos previos
Antes de comenzar, revisa los siguientes requisitos previos:
- Configura un extremo HTTPS que controle las solicitudes POST. Este extremo debe estar disponible públicamente.
-
Actualiza de forma programática el extremo de devolución de llamada para cada clase. Consulta la propiedad
callbackOptionspor clase en la API de REST. - Recomendación: Usa la biblioteca de Tink para verificar las firmas.
Implementa devoluciones de llamada
Por cada acción de agregar o borrar que realice el usuario en un objeto , Google realiza devoluciones de llamada a los comercios con detalles sobre la acción de agregar o borrar en una URL por clase. Primero, los comercios deben usar las claves públicas para verificar la autenticidad del mensaje. Después de que las devoluciones de llamada verifican el mensaje, se pueden usar para operaciones posteriores.
Verifica la firma
Te recomendamos que uses la biblioteca de Tink para verificar la firma del mensaje cuando implementes tu extremo HTTPS. La biblioteca de Tink proporciona PaymentMethodTokenRecipient, una utilidad que verifica automáticamente la firma y devuelve el mensaje real tras una verificación exitosa.
En el siguiente ejemplo, se muestra cómo usar la biblioteca de Tink para implementar 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 } }
Formato de mensaje esperado
El formato del mensaje es JSON serializado en una cadena con las siguientes propiedades:
| Identificador | Descripción |
|---|---|
classId |
Es el ID de clase completamente calificado. Usa el siguiente formato: <issuer_id.class_id> |
objectId |
Es el ID de objeto completamente calificado. Usa el siguiente formato: <issuer_id.object_id> |
expTimeMillis |
Hora de vencimiento en milisegundos desde la ÉPOCA. Después de la hora de vencimiento, el mensaje debe considerarse no válido. |
eventType |
Puede ser del o save para DELETE y SAVE.
|
nonce |
Es un nonce para hacer un seguimiento de las entregas duplicadas. |
Cómo controlar la solicitud de un servidor de Google
A continuación, se muestra una lista de los campos clave en el encabezado de la solicitud que se envía a tu extremo de devolución de llamada:
- User-Agent:
Googlebot - Content-Type:
application/json
Configura tu servidor para que no rechace la solicitud. Para ello, puedes configurar lo siguiente en robots.txt:
User-agent: Googlebot Disallow:
Reintentos
Las devoluciones de llamada se realizan según el criterio del mejor esfuerzo. Google usará estrategias de reintento comunes para garantizar la resiliencia en los casos en que el extremo de devolución de llamada no responda o tenga una interrupción intermitente, y realizará intentos de retirada de forma gradual.
Entregas duplicadas
En algunos casos, es posible que haya entregas duplicadas. Te recomendamos que uses nonce para quitar los duplicados.