Agrega y borra devoluciones de llamada

En esta guía, se explica cómo usar devoluciones de llamada con la API de la Billetera de Google. Cuando un elemento un pase HTTP(S) o borrado, Google puede devolver una llamada del extremo que elijas. Esta devolución de llamada es específica para un pase e incluye datos sobre el evento, como externalPassId y tipo de evento. Esto se puede usar para hacer un seguimiento del número de usuarios que se agregaron y eliminaron. Para Por ejemplo, las devoluciones de llamada se pueden configurar para enviar eventos a un para hacer un seguimiento de la interacción con los clientes durante eventos promocionales.

Requisitos previos

Antes de comenzar, revisa los siguientes requisitos previos:

  • Crea un extremo HTTPS que controle solicitudes POST. Este extremo necesita esté disponible públicamente.
  • Actualiza la devolución de llamada de manera programática URL del extremo de la emisora. Consulta la callbackOptions para la entidad emisora en la API de REST.
  • Recomendado: Usa la biblioteca Tink para verificar las firmas.

Implementa devoluciones de llamada

Por cada adición o eliminación que el usuario realizó en una un pase , Google envía devoluciones de llamada a los comercios con detalles sobre el agregado o la eliminación devolución de llamada del emisor URL. Primero, los comercios deben utilizar las claves públicas para verificar la autenticidad de el mensaje. Después de que las devoluciones de llamada verifican el mensaje, se pueden usar. para las operaciones downstream.

Verifica la firma

Te recomendamos que uses la biblioteca Tink para verificar la firma del mensaje cuando implementes el extremo HTTPS. El Biblioteca Tink proporciona PaymentMethodTokenRecipient, una utilidad verifica automáticamente la firma y devuelve el mensaje real en una verificación exitosa.

En el siguiente ejemplo, se muestra cómo usar la biblioteca 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, que se serializa en una cadena con la siguiente información: propiedades:

Identificador Descripción
externalPassId

ID de pase externo completamente calificado. Usa el siguiente formato:

<issuer_id.external_pass_id>
expTimeMillis Tiempo de vencimiento en milisegundos desde EPOCH. Después de la fecha de vencimiento, el mensaje debe considerarse no válido.
eventType Puede ser del o save para DELETE y SAVE.
nonce Nonce para hacer un seguimiento de las entregas duplicadas.

Maneja la solicitud desde un servidor de Google

La siguiente es una lista de los campos clave en el encabezado de la solicitud que enviado a tu extremo de devolución de llamada:

  • Usuario-agente: Googlebot
  • Tipo de contenido: application/json

Configura el servidor para que no rechace la solicitud. Para ello, puedes establece lo siguiente en robots.txt:

User-agent: Googlebot
Disallow:

Reintentos

Las devoluciones de llamada se realizan en función del mejor esfuerzo. Google usará estrategias de reintento comunes sea resiliente en los casos en que el extremo de devolución de llamada no responda o tenga un una interrupción intermitente y, luego, retira los intentos con facilidad.

Entregas duplicadas

En algunos casos, es posible que haya entregas duplicadas. Te recomendamos que utilices nonce para anular los duplicados.