Ao pedir projetos de ponta a ponta, você pode configurar o Modo de pagamento do sandbox quando: usando o ambiente de teste rápido ou sandbox. Enquanto você testa seus dados é possível alternar entre os modos de pagamento de sandbox e de produção. Para testar pagamentos para seu projeto de pedido de ponta a ponta sem carregar os cartões, use Sandbox como Modo de pagamento. O ambiente de produção não oferecer suporte ao modo de pagamento do sandbox.
Configuração
Para ativar o modo de pagamento de sandbox no ambiente de sandbox, siga estas etapas:
- Na Central de ações, acesse Configuração > Recursos.
- No card Recursos da conta, encontre o botão de opção Modo de pagamento.
- Selecione a opção Sandbox e clique em Salvar alterações.
Para ativar o modo de pagamento de sandbox no ambiente de teste rápido, siga estas etapas: etapas:
- Na Central de ações, navegue até Feeds > Teste rápido.
- Selecione o botão de opção Usar sandbox para GPay.
Quando o modo de pagamento Sandbox é selecionado:
- O pedido de ponta a ponta configura o Google Pay para retornar tokens de instrumento que conter dados do cartão de teste em vez dos detalhes reais do cartão.
- O campo
isInSandbox
está definido comotrue
no CheckoutRequestMessage e SubmitOrderRequestMessage.
As diferentes combinações de ambiente, forma de pagamento e isInSandbox são os seguintes:
Ambiente | Forma de pagamento | isInSandbox |
---|---|---|
Teste rápido | Sandbox | verdadeiro |
Teste rápido | Produção | falso |
Sandbox | Sandbox | verdadeiro |
Sandbox | Produção | falso |
Produção | Produção | falso |
Mensagem de resposta à finalização da compra
O CheckoutResponseMessage
enviado pelo seu serviço da Web de pedidos de comida contém
PaymentOptions
. Quando você
configurar a finalização da compra,
você fornecer uma opção de pagamento marcador usando um exemplo de gateway de pagamento.
- Atualize o
CheckoutResponseMessage
enviado pela Web com a configuração de tokenização apropriada.
Exemplos de opções de pagamento
Veja a seguir exemplos de objetos PaymentOptions
JSON de uma
CheckoutResponseMessage
para vários gateways de pagamento que usam chaves de sandbox:
JSON
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gatewayMerchantId\":\"YOUR_MERCHANT_ID\",\"gateway\":\"cybersource\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
JSON
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"braintree\",\"braintree:apiVersion\":\"v1\",\"braintree:sdkVersion\":\"1.4.0\",\"braintree:merchantId\":\"YOUR_MERCHANT_ID\",\"braintree:clientKey\":\"YOUR_BRAINTREE_SANDVOX_OR_PRODUCTION_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
JSON
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"stripe\",\"stripe:version\":\"2018-10-31\",\"stripe:publishableKey\":\"YOUR_PRODUCTION_OR_SANDBOX_STRIPE_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
JSON
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"stripev2\",\"gatewayMerchantId\":\"YOUR_PRODUCTION_OR_SANDBOX_STRIPE_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
Sinalizar transações de sandbox
Quando o Modo de pagamento do sandbox está ativado, o campo isInSandbox
é
incluído na solicitação e definido como true
para solicitações recebidas na sua Web
endpoint de serviço (CheckoutRequestMessage
e SubmitOrderRequestMessage
).
Faça o seguinte quando o campo isInSandbox
estiver definido como true
:
- Usar chaves de sandbox em vez de chaves de produção na tokenização do gateway de pagamento. A maioria dos processadores de pagamento oferecem APIs chaves para sandbox e produção.
- Não acionam nenhuma comunicação com o provedor de serviços da Web, geralmente um restaurante, pois eles não precisam ser informados sobre quaisquer transações de sandbox.
Cartões de crédito de teste não são suportados, mesmo quando o sandbox de transação é ativado. Você precisa usar um cartão de crédito real ao fazer uma transação. No entanto, Os tokens de instrumento de sandbox contêm detalhes de cartão de teste que não são cobráveis.
Processar pagamentos
Quando um cliente envia seu pedido, o pedido de ponta a ponta envia o
SubmitOrderRequestMessage
ao endpoint do serviço da Web. Google Pay
token
é incluído como uma string codificada em base64 no SubmitOrderRequestMessage
instrumentToken
. Para processar o pagamento do cliente, siga um destes procedimentos, dependendo do
seu gateway de pagamento:
Gateway de pagamento | |
---|---|
Stripe ou Braintree | Decodifique a string de token codificada em base64 e envie os dados apropriados contidos na carga útil do token decodificado para o gateway de pagamento para processar o pagamento. |
Todos os outros gateways de pagamento (incluindo Stripev2) | Envie a string completa de token codificada em base64 para a API do gateway de pagamento para processar o pagamento. A estrutura de token da forma de pagamento do Google Pay contém campos criptografados que podem ser descriptografados pelo gateway de pagamento para processar o pagamento. |
Exemplo de payload decodificado
Os exemplos a seguir mostram payloads decodificados retornados no instrumentToken
para vários gateways de pagamento:
JSON
Este exemplo de JSON representa um token de pagamento decodificado ao usar
Braintree. Extraia o valor do campo nonce
.
e enviar o valor à Braintree para processar o pagamento.
{ "androidPayCards": [{ "type": "AndroidPayCard", "nonce": "aeeb8297-4242...", "description": "AndroidPay", "consumed": false, "details": { "cardType": "Visa", "lastTwo": "29" } }] }
Se o Google Pay não estiver ativado no painel de controle do Braintree, o
O campo instrumentToken
é decodificado como este erro:
{ "error": { "message": "Record not found" }, "fieldErrors": [] }
JSON
Este exemplo de JSON representa um token de pagamento decodificado ao usar o Stripe.
Extraia o valor do campo id
e envie-o à Stripe para
processar o pagamento.
{ "id": "tok_abcdefg1234...", "object": "token", "card": { "id": "card_abcde...", "object": "card", "address_city": null, "address_country": null, "address_line1": null, "address_line1_check": null, "address_line2": null, "address_state": null, "address_zip": null, "address_zip_check": null, "brand": "Visa", "country": "US", "cvc_check": null, "dynamic_last4": "1234", "exp_month": 1, "exp_year": 2019, "funding": "credit", "last4": "1234", "metadata": {}, "name": null, "tokenization_method": "android_pay" }, "client_ip": "74.125.177.36", "created": 1500483670, "livemode": false, "type": "card", "used": false }
JSON
Este exemplo de JSON representa um token de pagamento decodificado ao usar stripev2.
{ "protocolVersion":"ECv2", "signature":"MEQCIH6Q4OwQ0jAceFEkGF0JID6sJNXxOEi4r+mA7biRxqBQAiAondqoUpU/bdsrAOpZIsrHQS9nwiiNwOrr24RyPeHA0Q\u003d\u003d", "intermediateSigningKey":{ "signedKey": "{\"keyExpiration\":\"1542323393147\",\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM43yRydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw\\u003d\\u003d\"}", "signatures": ["MEYCIQCO2EIi48s8VTH+ilMEpoXLFfkxAwHjfPSCVED/QDSHmQIhALLJmrUlNAY8hDQRV/y1iKZGsWpeNmIP+z+tCQHQxP0v"] }, "signedMessage":"{\"tag\":\"jpGz1F1Bcoi/fCNxI9n7Qrsw7i7KHrGtTf3NrRclt+U\\u003d\",\"ephemeralPublicKey\":\"BJatyFvFPPD21l8/uLP46Ta1hsKHndf8Z+tAgk+DEPQgYTkhHy19cF3h/bXs0tWTmZtnNm+vlVrKbRU9K8+7cZs\\u003d\",\"encryptedMessage\":\"mKOoXwi8OavZ\"}" }
JSON
Este exemplo de JSON representa um token de pagamento decodificado ao usar o Square.
{ "signature": "MEYCIQCMAsWCrY2GfHM/gMAKiK3QCKJJOIkjZeTQGzcdWgvrhwIhAJ3mXwe+wmU9z+Apv1rTDsCVQBzayvWzT4ywxytrSPla", "protocolVersion": "ECv1", "signedMessage": "{\"encryptedMessage\":\"WkYz21EYxojwTqWh6A3oYXtmctu1PlqF+tNYPA4cq017nqj16Ge7kaVR7MI1XG1OrCmcMwP20u5Zb5E28XYan8UI8M4L120orvE9XU1ivZuO4Myq2O3ue8v0lY1MDx8Mnk+5mkAv1kLmzJc91gEQ2leIwrPuMDYqsQUHzTR3Jikh5/v+iWRkyQPKKxgj5c6Erdu/pkg1xV6fQJcHNdq9Jw11zl95x6eQurxw2Uy8v811azGr+noKJbw0uye72MkhmzMS5QKOzwGT9nBfO+zPLYSEewsdOcPbNZF94zk/KU9nxom/gQ+eYEMIZvOj9lO4gQqDqR6DyWyStk7MjeXQTvXWZBI1JpqvOrlTHL0Ct18RpbfOio7hAtafzb0NnqEKlsun+SSpJmvI7U6n6Cnu1JUMUGfT/Jsi6RJ3N6pRw2BubeR1925Xl3jXQnlz5io6X1YRlAcnshZyf6CjBpKES32aTf1m1IHRhZ2Jj6i/g7Y\\u003d\",\"ephemeralPublicKey\":\"BDQA0Cf//BHPcnB0R/GRrWa2g7T1QF97eOhAYy7l45M+kJnsoeL9OaUQV/KIMLvcgbmKkZIm2FQeL7ftd6S4q4c\\u003d\",\"tag\":\"DHtVyXNo+PDr7Thi/EjBBbsr2k7y1SwGIn0D9mmPTJc\\u003d\"}" }
Para processar o pagamento usando o token, retorne a string do token codificada em base64 com sua solicitação para a API de pagamento do Square no campo source_id
prefixado por gpay:
{ "idempotency_key": "ID", "source_id": "gpay:GOOGLE_PAY_BASE64_ENCODED_TOKEN", "amount_money": { "amount": 50, "currency": "USD" }, "location_id": "LOCATION_ID", "billing_address": { "postal_code": "11111" } }
Confira a seguir um exemplo em Node.js que decodifica o código
instrumentToken
da Braintree:
Node.js
function decodeToken(instrumentToken) { let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii') if (decodedString.androidPayCards) { return decodedString.androidPayCards[0].nonce; } }