Configura pagos de zona de pruebas

Los proyectos de pedidos de extremo a extremo permiten configurar el modo de pago de la zona de pruebas cuando se usa la prueba rápida o el entorno de la zona de pruebas. Mientras pruebas tu feed de datos, puedes alternar entre los modos de pago de la zona de pruebas y de producción. Para probar los pagos de tu proyecto de pedidos de extremo a extremo sin cobrar a las tarjetas, usa Zona de pruebas como Modo de pago. El entorno de producción no admite el modo de pago de la zona de pruebas.

Configuración

Para habilitar el modo de pago de Sandbox en el entorno de Sandbox, sigue estos pasos:

  1. En el Centro de acciones, navega a Configuración > Funciones.
  2. En la tarjeta Funciones de la cuenta, busca el botón de selección Modo de pago.
  3. Selecciona la opción Zona de pruebas y haz clic en Guardar cambios.

Tarjeta de funciones de la cuenta con el modo Sandbox seleccionado

Para habilitar el modo de pago de la zona de pruebas en el entorno de prueba rápida, sigue estos pasos:

  1. En el Centro de acciones, navega a Feeds > Prueba rápida.
  2. Selecciona el botón de selección Usar zona de pruebas para GPay.

Prueba rápida con el modo de zona de pruebas seleccionado

Cuando se selecciona la forma de pago Sandbox, ocurre lo siguiente:

  • El pedido de extremo a extremo configura Google Pay para que devuelva tokens de instrumentos que contengan datos de tarjetas de prueba en lugar de los detalles reales de la tarjeta.
  • El campo isInSandbox se establece en true en CheckoutRequestMessage y SubmitOrderRequestMessage.

Las diferentes combinaciones de entorno, modo de pago y isInSandbox son las siguientes:

Entorno Modo de pago isInSandbox
Prueba rápida Zona de pruebas verdadero
Prueba rápida Producción falso
Zona de pruebas Zona de pruebas verdadero
Zona de pruebas Producción falso
Producción Producción falso

Mensaje de respuesta de confirmación de la compra

El CheckoutResponseMessage que envía tu servicio web de pedidos de comida contiene PaymentOptions. Cuando configuras la confirmación de la compra, proporcionas opciones de pago de marcador de posición con una puerta de enlace de pago de ejemplo.

  • Asegúrate de actualizar el CheckoutResponseMessage que envía tu servicio web con la configuración de tokenización adecuada.

Ejemplos de opciones de pago

Los siguientes son ejemplos de objetos JSON PaymentOptions de un CheckoutResponseMessage para varias pasarelas de pago que usan claves de zona de pruebas:

"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\"}} "
    }
}

Cómo marcar transacciones de la zona de pruebas

Cuando el modo de pago de la zona de pruebas está habilitado, el campo isInSandbox se incluye en la solicitud y se establece en true para las solicitudes entrantes a tu extremo de servicio web (CheckoutRequestMessage y SubmitOrderRequestMessage). Haz lo siguiente cuando el campo isInSandbox esté configurado como true:

  • Usa claves de zona de pruebas en lugar de claves de producción en la configuración de la tokenización para tu puerta de enlace de pagos. La mayoría de los procesadores de pagos proporcionan claves de API para la zona de pruebas y la producción.
  • No actives ninguna comunicación con el proveedor de servicios web, por lo general, un restaurante, ya que no se le debe informar sobre las transacciones de la zona de pruebas.

No se admiten tarjetas de crédito de prueba, incluso cuando la zona de pruebas de transacciones está habilitada. Debes usar una tarjeta de crédito real cuando realices una transacción. Sin embargo, los tokens de instrumentos de la zona de pruebas contienen detalles de tarjetas de prueba que no se pueden cobrar.

Procesa pagos

Cuando un cliente envía su pedido, el proceso de pedidos de extremo a extremo envía el SubmitOrderRequestMessage a tu extremo de servicio web. El token de Google Pay se incluye como una cadena codificada en base64 en el campo SubmitOrderRequestMessage instrumentToken. Para procesar el pago del cliente, realiza una de las siguientes acciones según la puerta de enlace de pago:

Puerta de enlace de pagos
Stripe o Braintree Decodifica la cadena de token codificada en base64 y envía los datos adecuados contenidos en la carga útil del token decodificado a tu puerta de enlace de pagos para procesar el pago.
Todas las demás puertas de enlace de pagos (incluida stripev2) Envía la cadena de token completa codificada en base 64 a la API de tu puerta de enlace de pagos para procesar el pago. La estructura del token de forma de pago de Google Pay contiene campos encriptados que tu puerta de enlace de pagos puede desencriptar para procesar el pago.

Ejemplo de carga útil decodificada

En los siguientes ejemplos, se muestran las cargas útiles decodificadas que se devuelven en el campo instrumentToken para varias pasarelas de pago:

Este ejemplo de JSON representa un token de pago decodificado cuando se usa Braintree. Extrae el valor del campo nonce y envíalo a Braintree para procesar el pago.

{
  "androidPayCards": [{
    "type": "AndroidPayCard",
    "nonce": "aeeb8297-4242...",
    "description": "AndroidPay",
    "consumed": false,
    "details": {
      "cardType": "Visa",
      "lastTwo": "29"
    }
  }]
}

Si Google Pay no está habilitado en el panel de control de Braintree, el campo instrumentToken decodifica el siguiente error:

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

Este ejemplo de JSON representa un token de pago decodificado cuando se usa Stripe. Extrae el valor del campo id y envíalo a Stripe para procesar el pago.

{
  "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 ejemplo de JSON representa un token de pago decodificado cuando se usa 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 ejemplo de JSON representa un token de pago decodificado cuando se usa 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 procesar el pago con el token, muestra la cadena de token codificada en base 64 con tu solicitud a la API de pagos de Square en el campo source_id con el prefijo 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"
    }
  }

El siguiente es un ejemplo de Node.js que decodifica el instrumentToken codificado en Base64 de Braintree:

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