Configurar pagamentos de sandbox

A ordenação de projetos completos permite configurar o modo de pagamento do sandbox ao usar o ambiente de teste rápido ou sandbox. Enquanto testa seu feed de dados, é possível alternar entre os modos de pagamento do sandbox e de produção. Para testar os pagamentos do seu projeto completo de pedidos sem cobrar os cartões, use o Sandbox como a forma de pagamento. O ambiente de produção não é compatível com o modo de pagamento do sandbox.

Configuração

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

  1. Na Central de ações, navegue até Configuração > Recursos.
  2. No card Recursos da conta, localize 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 sandbox no ambiente de teste rápido, siga estas etapas:

  1. Na Central de ações, acesse Feeds > Teste rápido.
  2. Selecione o botão de opção Usar sandbox para GPay.

Teste rápido com o modo sandbox selecionado

Quando o modo de pagamento do Sandbox é selecionado:

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

As diferentes combinações de Environment, Payment Mode e isInSandbox são estas:

Ambiente Forma de pagamento isInSandbox
Teste rápido Sandbox verdadeiro
Teste rápido Produção false
Sandbox Sandbox verdadeiro
Sandbox Produção false
Produção Produção false

Mensagem de resposta na finalização da compra

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

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

Exemplos de opções de pagamento

Confira abaixo exemplos de objetos JSON PaymentOptions de um CheckoutResponseMessage para vários gateways de pagamento usando 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 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 gateway de pagamento. A maioria dos processadores de pagamentos 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 transações de sandbox.

Cartões de crédito de teste não são aceitos, mesmo quando o sandbox de transações está 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 do cartão de teste que não são cobrados.

Processar pagamentos

Quando um cliente envia um pedido, a execução de pedidos de ponta a ponta envia a SubmitOrderRequestMessage para o endpoint do seu serviço da Web. O token do Google Pay está incluído como uma string codificada em base64 no campo instrumentToken SubmitOrderRequestMessage. 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 no payload do token decodificado ao seu gateway de pagamento para processar o pagamento.
Todos os outros gateways de pagamento (incluindo o Stripev2) Envie a string de token completa codificada em base64 à 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 o gateway de pagamento pode descriptografar 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:

JSON

Este exemplo JSON representa um token de pagamento decodificado ao usar o Braintree. Extraia o valor do campo nonce e envie-o para a 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": []
}

JSON

Este exemplo de JSON representa um token de pagamento decodificado ao usar a 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 JSON representa um token de pagamento decodificado ao usar o 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 de token codificada em base64 com sua solicitação para a API de pagamento do 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"
    }
  }

Veja a seguir um exemplo de Node.js que decodifica o instrumentToken codificado em base64 do Braintree:

Node.js

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