Configurar pagamentos no sandbox

O pedido de projetos de ponta a ponta permite configurar o modo de pagamento do sandbox ao usar o ambiente de teste rápido ou sandbox. Enquanto testa seu feed de dados, você pode alternar entre os modos de pagamento sandbox e de produção. Para testar pagamentos do seu projeto de finalização de pedidos sem cobrar dos cartões, use o Sandbox como modo de pagamento. O ambiente de produção não oferece suporte ao modo de pagamento do sandbox.

Configuração

Para ativar o modo de pagamento do sandbox no ambiente do sandbox, siga estas etapas:

  1. No Centro de ações, navegue até Configuração > Recursos.
  2. No card Recursos da conta, encontre o botão de opção Modo de pagamento.
  3. Selecione a opção Sandbox e clique em Salvar alterações.

Card de recursos da conta com o modo Sandbox selecionado

Para ativar o modo de pagamento do sandbox no ambiente de teste rápido, siga estas etapas:

  1. No Centro de ações, navegue até Feeds  > Teste rápido.
  2. Selecione o botão de opção Usar sandbox para o GPay.

Teste rápido com o modo sandbox selecionado

Quando o modo de pagamento Sandbox é selecionado:

  • A ordenação completa configura o Google Pay para retornar tokens de instrumento que contêm dados de cartão de teste em vez dos detalhes reais do cartão.
  • O campo isInSandbox é definido como true na CheckoutRequestMessage e na SubmitOrderRequestMessage.

As diferentes combinações de ambiente, modo de pagamento e isInSandbox são as 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 de finalização de compra

O CheckoutResponseMessage enviado pelo seu serviço da Web de pedidos de comida contém PaymentOptions. Ao configurar a finalização da compra, você fornece um marcador de posição de opções de pagamento usando um exemplo de gateway de pagamento.

  • Atualize o CheckoutResponseMessage enviado pelo seu serviço da Web com a configuração de tokenização adequada.

Exemplos de opções de pagamento

Confira a seguir exemplos de objetos JSON PaymentOptions de um CheckoutResponseMessage para várias plataformas de pagamento que usam chaves de sandbox:

"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\"}} "
    }
}
"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\"}} "
    }
}
"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\"}} "
    }
}
"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 do 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 no endpoint do serviço da Web (CheckoutRequestMessage e SubmitOrderRequestMessage). Faça o seguinte quando o campo isInSandbox estiver definido como true:

  • Use chaves de sandbox em vez de chaves de produção na configuração de tokenização do seu gateway de pagamento. A maioria dos processadores de pagamento fornece chaves de API para sandbox e produção.
  • Não acione nenhuma comunicação com o provedor de serviços da Web, geralmente um restaurante, porque ele não precisa ser informado sobre nenhuma transação do sandbox.

Não há suporte para cartões de crédito de teste, mesmo quando o sandbox de transações está ativado. É necessário usar um cartão de crédito real ao fazer uma transação. No entanto, os tokens de instrumento do ambiente de testes contêm detalhes do cartão de teste que não podem ser cobrados.

Processar pagamentos

Quando um cliente envia o pedido, o recurso Pedido de ponta a ponta envia a SubmitOrderRequestMessage para o endpoint do serviço da Web. O token do Google Pay é incluído como uma string codificada em base64 no campo SubmitOrderRequestMessage instrumentToken. Para processar o pagamento do cliente, siga um destes procedimentos, dependendo do seu gateway de pagamento:

Gateway de pagamento
Stripe ou Braintree Decodificar a string de token codificada em base64 e enviar os dados apropriados contidos no payload do token decodificado para o gateway de pagamento para processar o pagamento.
Todas as outras plataformas de pagamento (incluindo a Stripev2) Envie a string de token codificada em base64 completa 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 campo instrumentToken para vários gateways de pagamento:

Este exemplo de JSON representa um token de pagamento decodificado ao usar a Braintree. Extraia o valor do campo nonce e envie-o à 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 da Braintree, o campo instrumentToken será decodificado para o seguinte erro:

{
  "error": {
    "message": "Record not found"
  },
  "fieldErrors": []
}

Este exemplo de JSON representa um token de pagamento decodificado ao usar a Stripe. Extraia o valor do campo id e o envie para a 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
}

Este exemplo de JSON representa um token de pagamento decodificado ao usar a 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\"}"
}
  

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 de token codificada em base64 com sua solicitação para a API de pagamento da Square no campo source_id com o prefixo 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 de Node.js que decodifica o instrumentToken codificado em base64 da Braintree:

Node.js
function decodeToken(instrumentToken) {
  let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii')
  if (decodedString.androidPayCards) {
    return decodedString.androidPayCards[0].nonce;
  }
}