Camaradas, estou introduzindo um módulo JavaScript pronto para efetuar pagamentos usando o Google Pay. O módulo envolve o uso de npm com importação e exportação em um ambiente de desenvolvimento moderno; no entanto, aqueles que desejam um ES5 limpo, eu acho, podem refazê-lo facilmente.
Link para o módulo . O código possui a documentação e os comentários necessários. Vou dar algumas explicações aqui.

Devo dizer que a documentação do Google no botão de pagamento não foi a mais fácil, a lista de erros retornados pela API do Google Pay também não é a mais completa. Portanto, diferente de trabalhar com ApplePay, com o Google Pay, tive que desenhar um pouco antes do módulo realmente funcionar.
O trabalho consiste em duas etapas: primeiro, precisamos decidir se o botão será exibido ou não (nem todos os navegadores suportam o Google Pay) e, em seguida, executar o próprio processamento de pagamento.
1. Botão de exibiçãoexport function showGooglePayButton(options, callbacks) {
Nada complicado aqui. Nas opções, passamos dois parâmetros - googleBaseCardPaymentMethod e environment.
googleBaseCardPaymentMethod é um objeto que lista tipos e parâmetros de pagamento (mais detalhes sobre a pesquisa
permitida aqui ). Se não estiver definido, chamamos o setter padrão no código, retornando um objeto típico para nós:
const setGoogleBaseCardPaymentMethod = () => { return { type: "CARD", parameters: { allowedAuthMethods: ["PAN_ONLY", "CRYPTOGRAM_3DS"], allowedCardNetworks: ["AMEX", "DISCOVER", "JCB", "MASTERCARD", "VISA"] } } };
ambiente é um ambiente, PRODUÇÃO ou TESTE
Na chamada do retorno de chamada bem-sucedido, na verdade chamamos o botão (ou mostramos o já desenhado). Esta é a sua escolha. Lembre-se de que o Google exige correspondência com
seus guias .
2. ProcessamentoPara exibir o botão Google Pay, a API do seu navegador criou o objeto
paymentClient , que agora, junto com outros parâmetros, precisa ser passado para a função de processamento. Vejamos outros parâmetros:
googleBaseCardPaymentMethod - veja acima
googlePayPublicKey, merc_id, merc_name - para funcionar com sucesso com o Google Pay, você deve ter um comerciante registrado. Seus parâmetros temos apoio.
Além disso, transferimos retornos com êxito e com falha, assim como dados para efetuar um pagamento (veja abaixo).
Portanto, para efetuar um pagamento, precisamos pegar o objeto
paymentClient criado anteriormente e chamar o método
loadPaymentData com o objeto
paymentDataRequest :
const paymentDataRequest = getGooglePaymentDataRequest () :
const getGooglePaymentDataRequest = () => { const cardPaymentMethod = Object.assign( {}, baseMethod, { tokenizationSpecification: token } ); const paymentDataRequest = { apiVersion: 2, apiVersionMinor: 0, allowedPaymentMethods : [cardPaymentMethod], merchantInfo : { merchantId: options.merc_id, merchantName: options.merc_name }, transactionInfo : { currencyCode: options.currency, totalPriceStatus: 'FINAL', totalPrice: "" + options.sum } }; return paymentDataRequest; };
Para um ambiente de teste, o Google oferece seu próprio objeto merchantInfo. Ele precisa ser usado com o
merchantId escrito no exemplo,
merchantName não
é significativo.
Além disso, precisamos de um objeto
token :
const token = { type: 'DIRECT', parameters: { "protocolVersion": "ECv1", "publicKey": options.googlePayPublicKey } };
→ Leia mais sobre os parâmetros
aquiAlém disso, quando o objeto é formado, usando o método
loadPaymentData , uma
solicitação é enviada ao servidor do Google, o quadro com os cartões salvos é aberto e, após a conclusão da operação, o quadro é fechado:
paymentsClient.loadPaymentData(paymentDataRequest) .then(function(paymentData) { const googleToken = JSON.parse(paymentData.paymentMethodData.tokenizationData.token);
Após a execução bem-sucedida do método (ou seja, ligar para os cartões salvos e passar na verificação), podemos fazer uma solicitação AJAX para nosso próprio back-end para efetuar um pagamento usando o Google Pay. Nesta solicitação, precisaremos transferir o
googleToken , que veio do Google, bem como a chave pública.
É isso, nosso pagamento do Google Pay ocorreu após o processamento na parte traseira!