Neste guia, explicamos como usar callbacks com a API Google Wallet. Quando um item valioso é criado ou excluído, o Google pode realizar um callback para o endpoint HTTPS que você escolher. Esse callback é específico da classe e inclui dados sobre o evento, como classe, objeto e tipo de evento. Isso pode ser usado para manter a sincronização com o número de adições e exclusões de usuários que ocorrerem. Por exemplo, os callbacks podem ser configurados para enviar eventos a um aplicativo de análise para rastrear 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. Ele precisa estar disponível publicamente.
-
Atualize programaticamente o endpoint do callback de cada classe. Consulte a
propriedade
callbackOptions
na API REST. - Recomendado: use a biblioteca do Tink para verificar as assinaturas.
Implementar callbacks
Para cada adição ou exclusão realizada pelo usuário em um objeto, o Google faz callbacks para os comerciantes com detalhes sobre a atividade em um URL por classe. Os comerciantes precisam usar as chaves públicas para verificar a autenticidade da mensagem. Depois da verificação, será 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 implementar o endpoint HTTPS. A
biblioteca do Tink
fornece o PaymentMethodTokenRecipient
, um utilitário que verifica
automaticamente a assinatura e retorna a mensagem real
após a verificação.
O exemplo a seguir mostra como usar a biblioteca do Tink para implementar o
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 totalmente qualificado. Usa o seguinte formato: <issuer_id.object_id> expTimeMillis
Prazo de validade em milissegundos desde EPOCH. Depois do tempo de expiração, a mensagem precisa ser considerada inválida.
eventType
Ela 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 GoogleEsta é uma lista dos campos-chave no cabeçalho da solicitação enviada para o endpoint de callback:
Configure o servidor para não rejeitar a solicitação. Para isso,
defina o seguinte em User-agent: Google-Valuables Disallow: Novas tentativasOs callbacks são feitos na medida do possível. O Google tenta entregar a mensagem por três dias em caso de falhas temporárias. Depois de três dias, o Google exclui a mensagem e não tenta fazer outros envios. Entregas duplicadas
Pode haver entregas duplicadas em alguns casos. Use Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas. Última atualização 2023-09-26 UTC.
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"Não contém as informações de que eu preciso"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"Muito complicado / etapas demais"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"Desatualizado"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"Problema na tradução"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"Problema com as amostras / o código"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"Outro"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"Fácil de entender"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"Meu problema foi resolvido"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"Outro"
}]
|