Adicionar e excluir callbacks

Neste guia, explicamos como usar callbacks com a API Google Wallet. Quando um cartão for criado ou excluído, o Google poderá realizar uma chamada de retorno para um endpoint de sua escolha. Esse callback é específico da classe e inclui dados sobre o evento, como a classe, o objeto e o tipo de evento. Isso pode ser usado para acompanhar o número de adições e exclusões de usuários. Para Por exemplo, callbacks podem ser configurados para enviar eventos a uma rede aplicativo para acompanhar o engajamento do cliente durante eventos promocionais.

Pré-requisitos

Antes de começar, veja os seguintes pré-requisitos:

  • Destaque um endpoint HTTPS que processe solicitações POST. Este endpoint precisa fiquem disponíveis publicamente.
  • Atualize programaticamente o endpoint do callback de cada classe. Consulte a callbackOptions propriedade por classe na API REST.
  • Recomendado: use a biblioteca Tink para verificar as assinaturas.

Implementar callbacks

Para cada adição ou exclusão realizada pelo usuário em um um objeto , o Google faz chamadas de retorno para os comerciantes com detalhes sobre a adição ou exclusão em uma por turma URL. Os comerciantes precisam usar as chaves públicas para verificar a autenticidade dos a mensagem. Depois de verificar a mensagem, é possível usar callbacks para operações downstream.

Verificar a assinatura

Recomendamos que você use a biblioteca do Tink para verificar a assinatura da mensagem quando você implementar o endpoint HTTPS. A Biblioteca do Tink oferece o PaymentMethodTokenRecipient, um utilitário que verifica automaticamente a assinatura e retorna a mensagem real após a verificação foi concluída.

O exemplo a seguir mostra como usar a 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 mensagem esperado

O formato da mensagem é JSON serializado em uma string com o seguinte propriedades:

Identificador Descrição
classId

ID de classe totalmente qualificado. Usa o seguinte formato:

<issuer_id.class_id>
objectId

ID de objeto totalmente qualificado. Usa o seguinte formato:

<issuer_id.object_id>
expTimeMillis Prazo de validade em milissegundos desde EPOCH. Depois do prazo de validade, ela precisa ser considerada inválida.
eventType Pode ser del ou save para DELETE e SAVE.
nonce Valor de uso único para rastrear entregas duplicadas.

Processar a solicitação de um servidor do Google

Segue uma lista dos principais campos no cabeçalho da solicitação que é enviados ao seu endpoint de callback:

  • User agent: Googlebot
  • Tipo de conteúdo: application/json

Configure o servidor para que ele não rejeite a solicitação. Para isso, você pode defina o seguinte em robots.txt:

User-agent: Googlebot
Disallow:

Novas tentativas

Os callbacks são feitos na medida do possível. O Google vai usar estratégias comuns de novas tentativas para ser resiliente nos casos em que o endpoint de callback não está respondendo ou tem uma interrupção temporária intermitente e recua sem motivo as tentativas.

Entregas duplicadas

Pode haver entregas duplicadas em alguns casos. Recomendamos que você use nonce para eliminar as duplicações.