- Pautas de integración
- Características soportadas (métodos de pago)
- Pagos con dispositivo
- Pagos con Google Pay
Google Pay
Google Pay es un servicio de pago móvil y billetera digital de Google, que permite a los pagadores disfrutar de una experiencia de pago en línea sin problemas en aplicaciones Android y en la web móvil, utilizando métodos de pago guardados en una cuenta de Google o en un dispositivo Android. Google Pay es un pago con dispositivo compatible en el QNB ALAHLI.
En esta página se describe el procesamiento específico de los pagos con dispositivos Google Pay. Se recomienda que lea las pautas de integración para los pagos con dispositivo, antes de crear su integración de Google Pay.
El QNB ALAHLI ofrece Google Pay desde <<webServicesIntegration>> v47 en adelante.
Prerrequisitos
Para aceptar pagos con Google Pay:
- Debe registrarse en Google y crear su ID de negocio (obligatorio para Direct Payment).
- your payment service provider debe habilitar su perfil del negocio para pagos con dispositivo en el motor de pagos.
- Si desea que el motor de pagos realice el descifrado del token de pago, su perfil del negocio en el motor de pagos debe tener el permiso "Habilitar descifrado de pagos con dispositivos Google Pay" (obligatorio para las integraciones de Hosted Checkout, opcional para Direct Payment).
- Si está utilizando un dominio de marca blanca, comuníquese con su proveedor de servicios de pago para asegurarse de que esté habilitado para Google Pay.
Integración de Google Pay
La integración de <<checkout>> le permite recopilar detalles de pago del pagador a través de una interacción que el motor de pagos hospeda y muestra.
Desde la API versión 72 en adelante, Google Pay está disponible automáticamente como método de pago una vez que your payment service provider lo habilita y configura para este método de pago.
La integración de <<directPayment>> le permite ofrecer el método de pago de Google Pay en su propia página de pago.
Agregar soporte para Google Pay a su integración
Puede integrar Google Pay en su aplicación móvil o en la página de pago de su sitio web mediante <<directPayment>>.
- En la confirmación del pago, complete los siguientes parámetros en el objeto
tokenizationSpecification
de la API de Google Pay:
- tipo de tokenización (
type
): configure esto enPAYMENT_GATEWAY
- identificador de motor de pagos (
gateway
): configure esto enmpgs
- identificador de motor de pagos del negocio (
gatewayMerchantId
): un identificador de negocio único que el motor de pagos puede utilizar para verificar e identificar al negocio al descifrar el token de pago. Este identificador de negocio debe ser el mismo que sumerchantId
enviado en la solicitud API de su motor de pagos.
Al finalizar la interacción del pagador con la interfaz de usuario de Google Pay, recibirá una carga que contiene un token de pago cifrado firmado por Google. El token de pago se emitirá para un pago con dispositivo o con tarjeta.
Puede especificar si desea que la API de Google Pay devuelva los FPAN o DPAN. Esto puede resultar útil si el adquirente no admite pagos con dispositivos, en cuyo caso puede limitar el soporte a FPAN al configurarallowedAuthMethods
enPAN_ONLY
en el objetoallowedPaymentMethods
de la API de Google Pay. - tipo de tokenización (
- (Opcional) Authenticate Payer: complete los siguientes campos en la solicitud de 3DS
Check Enrollment
.
order.walletProvider
=GOOGLE_PAY
sourceOfFunds.provided.card.devicePayment.paymentToken
: el token de pago cifrado obtenido del SDK de Google Pay.
El motor de pagos descifrará el token de pago y, si incluye un FPAN, entonces se procederá con la solicitud
Check Enrollment
de 3DS. Si el token de pago contiene un DPAN, la solicitud se rechazará (la autenticación 3DS no es compatible con los DPAN). Para obtener más información sobre cómo realizar la integración con el motor de pagos mediante 3DS, consulte Autenticación 3D Secure.QNB ALAHLI ofrece autenticación de pagador 3DS en Google Pay a partir de <<webServicesIntegration>> v53 en adelante. - Complete los siguientes campos en la solicitud de
Authorize
/Pay
oUpdate Session
.
order.walletProvider
=GOOGLE_PAY
order.amount
: el valor que proporcione debe ser el monto final del pedido (incluidos el envío y otros montos adicionales).order.currency
sourceOfFunds.provided.card.devicePayment.paymentToken
: el token de pago cifrado obtenido del SDK de Google Pay.
sourceOfFunds.provided.card.devicePayment.paymentToken [REST][NVP]
- El motor de pagos verificará la firma en el token de pago para asegurarse de que ha sido firmado por Google. Después de la verificación, el motor de pagos descifra el token de pago por usted, valida el identificador del motor de pagos, el identificador del motor de pagos del negocio en el token de pago y procesa la transacción utilizando los datos descifrados.
Además de los campos estándar, se devuelven los siguientes campos de respuesta para una autorización correcta con el token de pago.
Si la carga contenía un DPAN (para pagos con dispositivos):
sourceOfFunds.provided.card.encryption
=DEVICE
sourceOfFunds.provided.card.deviceSpecificNumber
: el DPAN en formato enmascarado.sourceOfFunds.provided.card.deviceSpecificExpiry.month
sourceOfFunds.provided.card.deviceSpecificExpiry.year
sourceOfFunds.provided.card.number
: el FPAN en formato enmascarado.sourceOfFunds.provided.card.expiry.month
sourceOfFunds.provided.card.expiry.year
sourceOfFunds.provided.card.devicePayment.cryptogramFormat
Si la carga útil contenía un FPAN (para pagos con billetera digital Google Pay):
sourceOfFunds.provided.card.encryption
=DIGITAL_WALLET
sourceOfFunds.provided.card.number
: el FPAN en formato enmascarado.sourceOfFunds.provided.card.expiry.month
sourceOfFunds.provided.card.expiry.year
Si quiere encargarse de descifrar el token de pago en su servidor, consulte Descifrar el token de pago.
Aquí hay una solicitud de autorización de muestra en REST, donde el motor de pagos descifra el token de pago.
URL | 'https://qnbalahli.test.gateway.mastercard.com/api/rest/version/71/merchant/MADA_DMS_AU/order/810663616/transaction/911988788' |
Método HTTP | PUT |
Encabezado | 'Authorization: Basic bWVyY2hhbnQuTUFEQV9ETVNfQVU6M2RjYTQ2YTU1ODYwNDlmMjhhM2FmZGJmZDEwMGNmNWQ=' |
'{ "apiOperation": "AUTHORIZE", "order": { "amount": "30.10", "currency": "USD", "walletProvider": "GOOGLE_PAY" }, "sourceOfFunds": { "provided": { "card": { "devicePayment": { "paymentToken"{\n \"protocolVersion\" : \"ECv1\",\n \"signature\" : \"MEYCIQCiSE4dCSwpXwJLo1lKYOZNmFyL...\",\n \"signedMessage\" : \"{\\\"encryptedMessage\\\":\\\"gTVbbw8Nsv4kTulngmSVsZijvS5x7sAM9UZiqyaKfjkqxxJ1pkqRvhWBFc4FnEiMm2rjUPlX55e0dUqI00iQwAfePuhrna...\\\",\\\"ephemeralPublicKey\\\":\\\"BKoBQYjYIEYgw9nzA+0Q06FD77ZhrOXQh9yNUX0LasjL2W9eMvWZ0pCGGRzPKZLCtk...\\\",\\\"tag\\\":\\\"fnZGEbpCkXzKU3xhS5u1E3c6OoB6RzkHbhHx58...\\\"}\"\n}" //This is only a sample token and will not pass validation. You should substitute this with an actual payment token returned from Google Pay. //The gateway considers this value to be a string, NOT JSON itself. The parenthesis are a part of the string. } } }, "type": "CARD" }, "device": { "ani": "12341234" }, "transaction": { "source": "INTERNET" } }'
{ "authorizationResponse": { "commercialCard": "123", "commercialCardIndicator": "1", "date": "0314", "financialNetworkCode": "MCC", "posData": "1025104006600", "posEntryMode": "812", "processingCode": "003000", "responseCode": "00", "stan": "45467", "time": "105002", "transactionIdentifier": "906660122", "transactionIntegrityClass": "A1" }, "device": { "ani": "12341234" }, "gatewayEntryPoint": "WEB_SERVICES_API", "merchant": "MADA_DMS_AU", "order": { "amount": 30.10, "authenticationStatus": "AUTHENTICATION_NOT_IN_EFFECT", "certainty": "FINAL", "chargeback": { "amount": 0, "currency": "USD" }, "creationTime": "2023-03-14T10:50:01.524Z", "currency": "USD", "id": "810663616", "lastUpdatedTime": "2023-03-14T10:50:02.092Z", "merchantAmount": 30.10, "merchantCategoryCode": "1234", "merchantCurrency": "USD", "status": "AUTHORIZED", "totalAuthorizedAmount": 30.10, "totalCapturedAmount": 0.00, "totalDisbursedAmount": 0.00, "totalRefundedAmount": 0.00, "walletProvider": "GOOGLE_PAY" }, "response": { "acquirerCode": "00", "acquirerMessage": "Approved", "gatewayCode": "APPROVED", "gatewayRecommendation": "NO_ACTION" }, "result": "SUCCESS", "sourceOfFunds": { "provided": { "card": { "brand": "MASTERCARD", "devicePayment": { "cryptogramFormat": "3DSECURE" }, "deviceSpecificExpiry": { "month": "1", "year": "39" }, "deviceSpecificNumber": "512345xxxxxx0008", "fundingMethod": "UNKNOWN", "number": "xxxxxxxxxxxxxxxx", "scheme": "MASTERCARD", "storedOnFile": "NOT_STORED" } }, "type": "CARD" }, "timeOfLastUpdate": "2023-03-14T10:50:02.092Z", "timeOfRecord": "2023-03-14T10:50:01.625Z", "transaction": { "acquirer": { "batch": 20230314, "date": "0314", "id": "SYSTEST_ACQ_S2I", "merchantId": "12345678", "transactionId": "906660122" }, "amount": 30.10, "authenticationStatus": "AUTHENTICATION_NOT_IN_EFFECT", "authorizationCode": "112233", "currency": "USD", "id": "911988788", "receipt": "307310045467", "source": "INTERNET", "stan": "45467", "terminal": "1111", "type": "AUTHORIZATION" }, "version": "71" }
Descifrar el token de pago
Puede descifrar el token de pago en su servidor, en lugar de proporcionar el token de pago para el descifrado al motor de pagos. En este caso, tendrá que asumir la responsabilidad de almacenar las credenciales de cifrado y ejecutar el descifrado.
- En la confirmación de pago, envíe el token de pago cifrado devuelto por Google Pay a su servidor.
- Descifre el token de pago en su servidor con su clave privada. Consulte los pasos de descifrado aquí.
- Proporcione las claves de datos de pago del token descifrado en los campos de transacción correspondientes, en la solicitud Authorize/Pay o Update Session.
- Si el token de pago descifrado contiene un DPAN, complete estos campos:
No intente la autenticación del pagador 3DS si el token de pago contiene un DPAN. El motor de pagos rechazará la solicitud, ya que los DPAN no son compatibles con la autenticación 3DS.Clave JSON de Google PayCampo de solicitud de API correspondienteDescripciónpan sourceOfFunds.provided.card.number El número de cuenta principal específico del dispositivo (DPAN) de la tarjeta que financió esta transacción. expirationMonth sourceOfFunds.provided.card.expiry.month El mes de vencimiento del pan. expirationYear sourceOfFunds.provided.card.expiry.year El año de vencimiento del pan. authMethod sourceOfFunds.provided.card.
devicePayment.cryptogramFormatEl formato del criptograma. Configure esto en 3DSECURE. cryptogram sourceOfFunds.provided.card.devicePayment.
onlinePaymentCryptogramCriptograma en formato 3DSecure. eciIndicator sourceOfFunds.provided.card.devicePayment.
eciIndicatorProporcione el indicador de comercio electrónico (ECI), si está disponible. sourceOfFunds.provided.card.nameOnCard (Opcional) El nombre del titular de la tarjeta. order.currency El código de moneda ISO 4217 para la transacción. order.amount El monto del pedido. - Si el token de pago descifrado contiene un FPAN, puede optar por autenticar al pagador antes de realizar la transacción. Para autenticar al pagador, proporcione los siguientes campos en la solicitud 3DS
Check Enrollment
.
order.walletProvider
=GOOGLE_PAY
sourceOfFunds.provided.card.number
: vea la tabla a continuación.
Para obtener más información sobre cómo realizar la integración con el motor de pagos mediante 3DS, consulte Autenticación 3D Secure.
Clave JSON de Google PayCampo de solicitud de API correspondienteDescripciónpan sourceOfFunds.provided.card.number El número de tarjeta (FPAN) de la tarjeta que financió esta transacción. La carga útil contiene un FPAN cuando el pagador elige pagar utilizando una tarjeta guardada en su cuenta de Google Play.
Tenga en cuenta que, en el caso de los pagos con tarjeta, la captura de CSC no es compatible con la API de Google Pay.expirationMonth sourceOfFunds.provided.card.expiry.month El mes de vencimiento del pan. expirationYear sourceOfFunds.provided.card.expiry.year El año de vencimiento del pan. sourceOfFunds.provided.card.nameOnCard (Opcional) El nombre del titular de la tarjeta. order.currency El código de moneda ISO 4217 para la transacción. order.amount El monto del pedido.
- Si el token de pago descifrado contiene un DPAN, complete estos campos:
- Además de los campos anteriores, incluya estos en la solicitud Authorize/Pay o Update Session y envíelos al motor de pagos.
- transaction.source=INTERNET
- order.walletProvider=GOOGLE_PAY
- device.mobilePhoneModel: (Opcional) el identificador del dispositivo móvil utilizado para iniciar el pago.
- posTerminal.location: puede especificar
PAYER_TERMINAL_OFF_PREMISES
oPAYER_TERMINAL_ON_PREMISES
. Si no proporciona un valor, se utilizaPAYER_TERMINAL_OFF_PREMISES
:
Aquí hay una solicitud Authorization de muestra en REST, donde los valores del token de pago descifrado se proporcionan al motor de pagos.
{ "apiOperation": "AUTHORIZE", "order": { "amount": "30.10", "currency": "INR", "walletProvider": "GOOGLE_PAY" }, "sourceOfFunds": { "provided": { "card": { "expiry": { "month": "01", "year": "39" }, "number": "5123450000000008", "devicePayment": { "cryptogramFormat": "3DSECURE", : { "onlinePaymentCryptogram": "IA/8pdiWftSsxpFT6wABoDABhgA=", "eciIndicator": "20" } } } }, "type": "CARD" }, "device": { "ani": "12341234" }, "transaction": { "source": "INTERNET" } }
{ "authorizationResponse": { "commercialCard": "123", "commercialCardIndicator": "1", "date": "0330", "financialNetworkCode": "MCC", "posData": "1025104006600", "posEntryMode": "812", "processingCode": "003000", "responseCode": "00", "stan": "290026", "time": "220509", "transactionIdentifier": "865442937", "transactionIntegrityClass": "A1" }, "device": { "ani": "12341234" }, "gatewayEntryPoint": "WEB_SERVICES_API", "merchant": "LOVECRAFTS2I", "order": { "amount": 30.10, "authenticationStatus": "AUTHENTICATION_NOT_IN_EFFECT", "certainty": "ESTIMATED", "chargeback": { "amount": 0, "currency": "INR" }, "creationTime": "2022-03-30T22:05:09.395Z", "currency": "INR", "id": "09765d59-cdd8-432c-96c9-d6ae91588251", "lastUpdatedTime": "2022-03-30T22:05:09.857Z", "merchantAmount": 30.10, "merchantCategoryCode": "1234", "merchantCurrency": "INR", "status": "AUTHORIZED", "totalAuthorizedAmount": 30.10, "totalCapturedAmount": 0.00, "totalDisbursedAmount": 0.00, "totalRefundedAmount": 0.00, "walletProvider": "GOOGLE_PAY" }, "response": { "acquirerCode": "00", "acquirerMessage": "Approved", "gatewayCode": "APPROVED" }, "result": "SUCCESS", "sourceOfFunds": { "provided": { "card": { "brand": "MASTERCARD", "devicePayment": { "cryptogramFormat": "3DSECURE" }, "deviceSpecificExpiry": { "month": "1", "year": "39" }, "deviceSpecificNumber": "512345xxxxxx0008", "fundingMethod": "UNKNOWN", "number": "xxxxxxxxxxxxxxxx", "scheme": "MASTERCARD", "storedOnFile": "NOT_STORED" } }, "type": "CARD" }, "timeOfLastUpdate": "2022-03-30T22:05:09.857Z", "timeOfRecord": "2022-03-30T22:05:09.410Z", "transaction": { "acquirer": { "batch": 20220330, "date": "0330", "id": "SYSTEST_ACQ_S2I", "merchantId": "123463", "transactionId": "865442937" }, "amount": 30.10, "authenticationStatus": "AUTHENTICATION_NOT_IN_EFFECT", "authorizationCode": "112233", "currency": "INR", "id": "1", "receipt": "208922290026", "source": "INTERNET", "stan": "290026", "terminal": "CBAS2I02", "type": "AUTHORIZATION" }, "version": "71" }
Prueba de integración de Google Pay
Si va a descifrar el token de pago, Google debe aprobar su integración. Siga las instrucciones de prueba que proporciona Google aquí: Android/Web.
Sin embargo, antes de enviar la integración para su aprobación a Google, debe realizar algunas transacciones de prueba. Puede probar su integración con el motor de pagos en producción usando su perfil de pruebas del negocio y DPAN o FPAN admitidos. Para obtener más información, consulte Prueba con tokens de muestra.
Si realiza una prueba para un pago mediante dispositivo (tarjeta guardada en su dispositivo Android), utilice un DPAN compatible de la tabla siguiente.
Esquema |
DPAN |
Fecha de vencimiento |
---|---|---|
Visa | 4895370012003478 | 12/2027 |
American Express | 370295136149943 | 12/2027 |
Si realiza una prueba para un pago mediante tarjeta (tarjeta guardada en su cuenta de Google Play), utilice el FPAN compatible de la tabla siguiente.
Esquema |
FPAN |
Fecha de vencimiento |
---|---|---|
Visa | 4111111111111111 | 12/2027 |
Una vez que Google haya aprobado su integración, debe realizar las pruebas finales de verificación de la producción antes de iniciar las transacciones en producción.
Si el motor de pagos descifra el token de pago, su aplicación deberá especificar el motor de pagos ("mpgs") como your payment service provider. Esta información es necesaria para permitir que el token de pago que Google genera se cifre mediante la clave pública del motor de pagos.
Para realizar transacciones de prueba, debe utilizar el ID de negocio de producción de su motor de pagos en la producción: el ID de negocio del motor de pagos de prueba no puede descifrar los tokens de pago.
Si las transacciones tienen el estado APPROVED o DECLINED, entonces el motor de pagos fue capaz de procesar sus transacciones de prueba con éxito.
Google Pay a través de Mobile SDK
El Mobile SDK le ayuda a desarrollar una aplicación móvil que aceptará pagos digitales mediante el QNB ALAHLI. El motor de pagos ofrece soporte para Google Pay mediante el Mobile SDK. Haga clic aquí para ver las pautas de integración de Mobile SDK para la plataforma Android.