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 de la clase e incluye datos sobre el evento, como la clase, el objeto y el 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.
  • Actualizar de manera programática el extremo de devolución de llamada para cada clase Consulta la callbackOptions propiedad por clase 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 objeto , Google envía devoluciones de llamada a los comercios con detalles sobre el agregado o la eliminación por clase 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
classId

ID de clase completamente calificado. Usa el siguiente formato:

<issuer_id.class_id>
objectId

ID de objeto completamente calificado. Usa el siguiente formato:

<issuer_id.object_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.