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:
- En el Centro de acciones, navega a Configuración > Funciones.
- En la tarjeta Funciones de la cuenta, busca el botón de selección Modo de pago.
- Selecciona la opción Zona de pruebas y haz clic en Guardar cambios.
Para habilitar el modo de pago de zona de pruebas en el entorno de prueba rápida, sigue estos pasos:
- En el Centro de acciones, navega a Feeds > Prueba rápida.
- Selecciona el botón de selección Use sandbox for GPay.
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 comotrue
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; } }