1. Introdução
Este codelab é uma continuação de API Google Pay para Web 101: noções básicas e depende do código escrito nesse codelab. Para concluir este codelab, primeiro conclua o outro.
O que você vai aprender
- Como personalizar o botão do Google Pay
- Como iniciar o processo de pagamento
- Como confirmar o status de autorização de pagamento
- Como lidar com mudanças no endereço de entrega
- Como lidar com códigos de resgate
O que é necessário
- Um editor de texto de sua escolha para editar arquivos HTML e JavaScript.
- O navegador da Web Google Chrome ou outra maneira de testar um site local.
- Para a produção, você vai precisar de uma
merchantId
do Google Pay. O registro no Console do Google Pay e da Carteira leva apenas um minuto.
Acompanhe o processo usando o Project IDX
2. Personalização de botões
Esta é uma breve descrição do ButtonOptions
. Consulte a documentação para uma explicação mais detalhada
Opção | Necessidade | Valores |
onClick | Obrigatório | Nome do manipulador de eventos JavaScript |
allowedPaymentMethods | Opcional | |
buttonColor | Opcional | padrão, preto, branco |
buttonLocale | Opcional | Código ISO 639-1 de duas letras. |
buttonRadius | Opcional | 0 a 100 |
buttonRootNode | Opcional | HTMLDocument ou ShadowRoot |
buttonSizeMode | Opcional | estática, preencher |
buttonType | Opcional | reservar, comprar, finalizar a compra, doar, encomendar, pagar, simples, assinar |
Procure o método renderGooglePayButton()
no arquivo main.js
e substitua-o pelo código listado aqui.
function renderGooglePayButton() {
const button = getGooglePaymentsClient().createButton({
buttonColor: 'default',
buttonType: 'buy',
buttonRadius: 4,
buttonLocale: 'en',
onClick: onGooglePaymentButtonClicked,
allowedPaymentMethods: baseGooglePayRequest.allowedPaymentMethods,
});
document.getElementById(GPAY_BUTTON_CONTAINER_ID).appendChild(button);
}
Explicação do código
- O método da biblioteca
createButton()
usa um argumento de configuraçãoButtonOptions
que permite definir a aparência e o comportamento do botão.
3. Callbacks de dados de pagamento
O cliente de pagamentos oferece um mecanismo para você registrar funções que serão usadas quando determinados eventos ocorrerem. A primeira é a autorização de pagamento, e a segunda é a alteração dos dados de pagamento.
- Encontre o comentário
// todo: paymentDataCallbacks
emmain.js
e substitua-o por este código.paymentDataCallbacks: { onPaymentAuthorized: onPaymentAuthorized, onPaymentDataChanged: onPaymentDataChanged },
- Em seguida, encontre a seção
Event Handlers
demain.js
e anexe o código abaixo ao final da seção.function onPaymentAuthorized(paymentData) { // We'll fill this in later } function onPaymentDataChanged(intermediatePaymentData) { // We'll fill this in later }
- Por fim, encontre o comentário
// todo: callbackIntents
emmain.js
e substitua o comentário por este código. Neste codelab, vamos implementar as quatro intents.callbackIntents: [ 'PAYMENT_AUTHORIZATION', 'SHIPPING_ADDRESS', 'SHIPPING_OPTION', 'OFFER', ], shippingAddressRequired: true, shippingOptionRequired: true, shippingOptionParameters: { defaultSelectedOptionId: 'shipping-001', shippingOptions: [ { id: 'shipping-001', label: '$0.00: Free shipping', description: 'Free Shipping delivered in 5 business days.' }, { id: 'shipping-002', label: '$1.99: Standard shipping', description: 'Standard shipping delivered in 3 business days.' }, { id: 'shipping-003', label: '$1000: Express shipping', description: 'Express shipping delivered in 1 business day.' }, ], },
Explicação do código
- A propriedade
PaymentDataCallbacks
tem duas subpropriedades: uma para um callback de autorização de pagamento e a segunda para um callback de alteração de dados de pagamento. - Se você implementar callbacks,
onPaymentAuthorized
será obrigatório. Esse callback é invocado quando a listacallbackIntents
contémPAYMENT_AUTHORIZATION
noPaymentDataRequest
. onPaymentDataChanged
é opcional. Esse callback é invocado quando a listacallbackIntents
contémOFFER
,SHIPPING_ADDRESS
ouSHIPPING_OPTION
noPaymentDataRequest
.- Defina o
callbackIntents
noPaymentDataRequest
para acionar os dois callbacks deste codelab.
4. Autorização de pagamento
A opção "Autorizar pagamentos" é usada para iniciar o processo de pagamento e confirmar o status de autorização de pagamento.
Encontre a função onPaymentAuthorized()
em main.js
que você adicionou na última etapa e substitua-a pelo código abaixo.
function onPaymentAuthorized(paymentData) {
return new Promise(function(resolve, reject) {
// Write the data to console for debugging
console.log("onPaymentAuthorized", paymentData);
// Do something here to pass token to your gateway
// To simulate the payment processing, there is a 70% chance of success
const paymentAuthorizationResult = (Math.random() > 0.3)
? {transactionState: 'SUCCESS'}
: {
transactionState: 'ERROR',
error: {
intent: 'PAYMENT_AUTHORIZATION',
message: 'Insufficient funds',
reason: 'PAYMENT_DATA_INVALID'
}
};
resolve(paymentAuthorizationResult);
});
}
Explicação do código
- A função de callback
onPaymentAuthorized()
é invocada com um argumentoPaymentData
e precisa retornar uma promessa. Neste exemplo, a função escolhe aleatoriamente se vai retornar sucesso ou um erro. No seu projeto, você vai usar essa oportunidade para processar a transação com seu gateway usando o token encontrado empaymentData
empaymentData.paymentMethodData.tokenizationData.token
.
5. Mudança de dados de pagamento
As atualizações dinâmicas de preços permitem que o comerciante atualize de maneira dinâmica as opções de envio e as informações da transação de acordo com o endereço de entrega escolhido. Além disso, é possível atualizar de maneira dinâmica as informações da transação de acordo com a opção de envio escolhida.
Encontre a função onPaymentDataChanged()
em main.js
que você adicionou na última etapa e substitua-a pelo código abaixo.
function onPaymentDataChanged(intermediatePaymentData) {
return new Promise(function(resolve, reject) {
let paymentDataRequestUpdate = {};
// Write the data to console for debugging
console.log("onPaymentDataChanged", intermediatePaymentData);
switch(intermediatePaymentData.callbackTrigger)
{
case "INITIALIZE":
// Handle initialize
break;
case "SHIPPING_ADDRESS":
// Read intermediatePaymentData.transactionInfo
// Read intermediatePaymentData.shippingAddress
// Update paymentDataRequestUpdate.newTransactionInfo
break;
case "SHIPPING_OPTION":
// Read intermediatePaymentData.transactionInfo
// Read intermediatePaymentData.shippingOptionData
// Update paymentDataRequestUpdate.newTransactionInfo
// Update paymentDataRequestUpdate.newShippingOptionParameters
break;
case "OFFER":
// Read intermediatePaymentData.offerData
// Read intermediatePaymentData.transactionInfo
// Update paymentDataRequestUpdate.newTransactionInfo
// Update paymentDataRequestUpdate.newOfferInfo
break;
default:
// Update paymentDataRequestUpdate.error
}
resolve(paymentDataRequestUpdate);
});
}
Explicação do código
- A função
onPaymentDataChanged()
usaIntermediatePaymentData
como argumento. Essa função é invocada quando o endereço de entrega ou as opções de envio são alteradas na página de pagamento. - A função
onPaymentDataChanged()
precisa retornar uma promessa que resolva um objetoPaymentDataRequestUpdate
que especifique novas informações de transação, opções de envio e erro para atualizar a página de pagamento. redemptionCodes
são um conjunto de códigos promocionais inseridos na página de pagamento. Inclui códigos que já foram aprovados.
6. Conclusão
Parabéns por concluir este codelab. Você aprendeu a:
Executar o projeto
Testar com o Google Chrome
Usando o navegador da Web Google Chrome, abra index.html
usando Arquivo > Abrir arquivo... no menu principal do Chrome. O Chrome vai executar main.js
quando o projeto for aberto dessa forma. Outros navegadores da Web podem não permitir a execução do JavaScript.
– ou –
Testar com um servidor da Web local
Se você tiver o Python instalado, execute python3 -m http.server
em um prompt de terminal na pasta raiz pay-web-101
.
$ cd /your/path/to/pay-web-101
$ python3 -m http.server
Serving HTTP on :: port 8000 (http://[::]:8000/) ...
Depois, acesse seu site em http://localhost:8000
.
O que fazer depois disso
Outros recursos
- Participe da conversa no canal#payments do Discord
- Siga @GooglePayDevs no X
- Assistir vídeos relacionados ao Google Pay no YouTube