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.