Configurar pagos de zona de pruebas

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

Configuración

Para habilitar el modo de pago de la zona de pruebas en el entorno de la zona de pruebas, 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 de zona de pruebas seleccionado

Para habilitar el modo de pago de 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 Use sandbox for GPay.

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

Cuando se selecciona el modo de pago Zona de pruebas, ocurre lo siguiente:

  • El pedido de extremo a extremo configura Google Pay para que muestre tokens de instrumento que contengan datos de la tarjeta de prueba en lugar de los detalles reales de la tarjeta.
  • El campo isInSandbox está configurado como true en CheckoutRequestMessage y SubmitOrderRequestMessage.

Estas son las diferentes combinaciones de Environment, Payment Mode e isInSandbox:

Entorno Modo de pago isInSandbox
Prueba rápida Zona de pruebas true
Prueba rápida Producción false
Zona de pruebas Zona de pruebas true
Zona de pruebas Producción false
Producción Producción false

Mensaje de respuesta de confirmación de la compra

El CheckoutResponseMessage que envió 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 la CheckoutResponseMessage que envía tu servicio web con la configuración de asignación de token adecuada.

Ejemplos de opciones de pago

A continuación, se muestran ejemplos de objetos JSON PaymentOptions de una CheckoutResponseMessage para varias puertas de enlace de pago que usan claves de zona de pruebas:

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

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 al extremo de servicio web (CheckoutRequestMessage y SubmitOrderRequestMessage). Haz lo siguiente cuando el campo isInSandbox se establezca en true:

  • Usa claves de zona de pruebas en lugar de claves de producción en la configuración de asignación de token para tu puerta de enlace de pago. 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, que suele ser un restaurante, ya que no es necesario que se le informe de ninguna transacción 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 utilizar una tarjeta de crédito real cuando realices una transacción. Sin embargo, los tokens de instrumento de la zona de pruebas contienen detalles de tarjetas de prueba que no son cobrables.

Procesa pagos

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

Puerta de enlace de pagos
Stripe o Braintree Decodifica la string de token codificada en Base64 y envía los datos correspondientes 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 pago (incluida Stripev2) Envía la string de token completa codificada en Base64 a tu API de puerta de enlace de pagos para procesar el pago. La estructura del token de la 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 muestran en el campo instrumentToken para varias puertas de enlace de pago:

JSON

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 se decodifica en el siguiente error:

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

JSON

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
}

JSON

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

JSON

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 string de token codificada en Base64 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 base-64 de Braintree:

Node.js

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