Configurar pagamentos de sandbox

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:

  1. Na Central de ações, acesse 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 de sandbox no ambiente de teste rápido, siga estas etapas: etapas:

  1. Na Central de ações, navegue até 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 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 como true 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;
  }
}