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 se crea o borra un valor, Google puede realizar una devolución de llamada al extremo HTTPS que elijas. 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. Esto se puede usar para estar sincronizado con la cantidad de incorporaciones y eliminaciones de usuarios que se producen. Por ejemplo, las devoluciones de llamada se pueden configurar para enviar eventos a una aplicación de estadísticas a fin de realizar un seguimiento de la interacción con los clientes durante los eventos promocionales.

Requisitos previos

Antes de comenzar, revisa los siguientes requisitos previos:

  • Crea un extremo HTTPS que controle las solicitudes POST. Este extremo debe estar disponible de forma pública.
  • Actualiza de manera programática el extremo de devolución de llamada para cada clase. Consulta la propiedad callbackOptions 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 realiza el usuario en un objeto, Google realiza devoluciones de llamada a los comercios con detalles sobre el proceso 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 descendentes.

Verifica la firma

Te recomendamos que uses la biblioteca 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 muestra el mensaje real luego de una verificación correcta.

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
  }
}

Expected message format

The message format is JSON that's serialized into a string with the following properties:

Identifier Description
classId

Fully qualified class ID. Uses the following format:

<issuer_id.class_id>
objectId

ID de objeto completamente calificado. Usa el siguiente formato:

<issuer_id.object_id>
expTimeMillis Es el tiempo de vencimiento en milisegundos desde EPOCH. Luego de la fecha de vencimiento, el mensaje se debe considerar no válido. eventType Puede ser del o save para DELETE y SAVE. nonce Nonce para hacer un seguimiento de las entregas duplicadas

Controla la solicitud desde un servidor de Google

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

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

Configura tu servidor para que no rechace la solicitud. Para hacerlo, 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 intenta dos veces para tener en cuenta las fallas transitorias. Después de intentarlo dos veces, Google borra el mensaje y no intenta volver a enviarlo.

Entregas duplicadas

En algunos casos, es posible que haya entregas duplicadas. Te recomendamos que uses nonce para anular la duplicación.