Integración vía Mercado Pago para sitios web
Este modelo permite ofrecer Apple Pay en tu sitio web sin gestionar certificados de pago ni desencriptar tokens en tu servidor. Mercado Pago se encarga de la validación con Apple y devuelve un token listo para crear el pago.
sequenceDiagram
participant C as Comprador
participant V as Sitio web (frontend)
participant MP as Mercado Pago
participant A as Apple
V->>MP: Inicializar Apple Pay
MP->>A: Validar comercio y dominio
A-->>V: Botón Apple Pay disponible
C->>V: Clic en Apple Pay
V->>A: Solicitud de pago (Touch ID/Face ID)
A-->>MP: Token de Apple Pay
MP-->>V: Token de Mercado Pago (callback)
V->>V: Enviar token al backend
V->>MP: Crear pago (token + datos)
MP-->>V: Respuesta del pago
En esta integración implementas el flujo de Apple Pay en tu backend. Tu backend valida la sesión con Apple y obtiene el token a través de las APIs de Mercado Pago para crear el pago. Sigue los pasos a continuación para integrar.
Habiendo obtenido y configurado los certificados obligatorios de Apple Developer, antes de iniciar la tokenización con Apple, tu backend debe validar la sesión de Apple Pay con el certificate_id del certificado merchant y los datos que Apple envía al frontend. Para ello, con tu Public Key de pruebasClave pública de la aplicación creada en Mercado Pago, usada en el frontend. Puedes acceder a ella a través de Tus integraciones > Detalles de aplicación > Pruebas > Credenciales de prueba. envía un POST al endpoint /applepay/v1/sessionAPI.
curl --location 'https://api.mercadopago.com/applepay/v1/session' \
--header 'X-Product-ID: {{YOUR_PRODUCT_ID}}' \
--header 'Content-Type: application/json' \
--header 'X-Public-key: {{YOUR_PUBLIC_KEY}}' \
--data '{
"id": "CERTIFICATE_ID_MERCHANT",
"merchantIdentifier": "merchant.tu-identificador",
"domainName": "tu-dominio.com",
"displayName": "Mi tienda",
"initiative": "web",
"initiativeContext": "tu-dominio.com",
"validationURL": "https://apple-pay-gateway.apple.com/paymentservices/startSession"
}'
| Parámetro | Tipo | Descripción | Obligatoriedad |
X-Product-ID | Header | Identificador del producto. | Obligatorio |
X-Public-key | Header | Header con tu Public Key de pruebasClave pública de la aplicación creada en Mercado Pago, usada en el frontend. Puedes acceder a ella a través de Tus integraciones > Detalles de aplicación > Pruebas > Credenciales de prueba.. | Obligatorio |
id | String | Certificate ID del certificado tipo merchant obtenido al obtener los certificados de Apple Developer. | Obligatorio |
merchantIdentifier | String | Merchant ID configurado en Apple. | Obligatorio |
domainName | String | Dominio de tu sitio donde se muestra el botón Apple Pay. Debe coincidir con el dominio que verificaste en el Portal Apple Developer y donde está publicado el archivo de verificación en .well-known. | Obligatorio |
displayName | String | Nombre de tu comercio o tienda que ve el usuario en el flujo de pago de Apple Pay. | Obligatorio |
initiative | String | Valor fijo web. | Obligatorio |
initiativeContext | String | Debe coincidir con domainName. | Obligatorio |
validationURL | String | URL que Apple envía a tu frontend al iniciar el flujo; envíala aquí sin modificar. | Obligatorio |
La API devuelve una respuesta con una estructura similar a la del siguiente ejemplo. Incluye merchantSessionIdentifier y otros datos que tu frontend usará para completar el flujo con Apple:
json{ "epochTimestamp": 1768253984908, "expiresAt": 1768257584908, "merchantSessionIdentifier": "SSH1920C0C97402...7B1B1A97F33C9C3", "nonce": "124074e7", "merchantIdentifier": "10DDB60D113BB4...CDF76292133", "domainName": "tu-dominio.com", "displayName": "Mi tienda", "signature": "308006092...2f5d0c8000000000000" }
Cuando el comprador autoriza el pago con Apple Pay, Apple devuelve en el frontend los datos de pago encriptados. Envía esos datos a tu backend y, desde allí, envía un POST con tu Public Key de pruebasClave pública de la aplicación creada en Mercado Pago, usada en el frontend. Puedes acceder a ella a través de Tus integraciones > Detalles de aplicación > Pruebas > Credenciales de prueba. al endpoint /platforms/pci/applepay/v1/tokenizeAPI para obtener un card token de Mercado Pago.
curl --location 'https://api.mercadopago.com/platforms/pci/applepay/v1/tokenize' \
--header 'X-Product-ID: {{YOUR_PRODUCT_ID}}' \
--header 'Content-Type: application/json' \
--header 'X-Public-key: {{YOUR_PUBLIC_KEY}}' \
--data '{
"payment_method": {
"type": "applepay",
"payment_data": "PAYMENT_DATA_FROM_APPLE_BASE64"
},
"transaction_identifier": "TRANSACTION_ID_FROM_APPLE",
"device": {
"meli": {
"session_id": "SESSION_ID_DEVICE"
}
}
}'
| Parámetro | Tipo | Descripción | Obligatoriedad |
X-Product-ID | Header | Identificador del producto. | Obligatorio |
X-Public-key | Header | Header con tu Public Key de pruebasClave pública de la aplicación creada en Mercado Pago, usada en el frontend. Puedes acceder a ella a través de Tus integraciones > Detalles de aplicación > Pruebas > Credenciales de prueba.. | Obligatorio |
payment_method.type | String | Valor fijo applepay. | Obligatorio |
payment_method.payment_data | String | Datos de pago que Apple envía al frontend, devuelto en formato Base64. Cuando el usuario autoriza el pago en un dispositivo Apple, el navegador dispara el evento onpaymentauthorized y, a partir de ese momento, dentro del evento payment.token.paymentData habrá un objeto JavaScript con los datos de la tarjeta cifrados por Apple. El objeto devuelto deberá convertirse en una cadena JSON y luego codificarse en Base64. | Obligatorio |
transaction_identifier | String | Identificador de la transacción que Apple envía al frontend. Es una string hexadecimal única, generada por Apple para cada transacción. | Obligatorio |
device.meli.session_id | String | Identificador de sesión del dispositivo. Debe inicializarse en la página antes de hacer clic en el botón de Apple Pay. El valor queda disponible en la variable global window.MP_DEVICE_SESSION_ID y proviene del SDK de device fingerprint de Mercado Pago (Armor). | Opcional |
La API devuelve una respuesta con una estructura similar a la del siguiente ejemplo:
json{ "id": "5c055ff0d...00b888c85c64e", "bin": "44...49" }
| Parámetro | Tipo | Descripción | Obligatoriedad |
id | String | Card token. Úsalo como token al crear el pago con la Orders API. | Obligatorio |
bin | String | Primeros dígitos de la tarjeta. | Obligatorio |
Crea el pago enviando un POST con tu Access Token de pruebasClave privada de la aplicación creada en Mercado Pago, utilizado en el backend. Puedes acceder a él a través de Tus integraciones > Detalles de aplicación > Pruebas > Credenciales de prueba. a /v1/ordersAPI con los valores descritos en la tabla a continuación.
curl --location 'https://api.mercadopago.com/v1/orders' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{YOUR_ACCESS_TOKEN}}' \
--header 'X-Idempotency-Key: SOME_UNIQUE_VALUE' \
--data '{
"type": "online",
"processing_mode": "automatic",
"total_amount": "100.00",
"currency_id": "ARS",
"external_reference": "ext_ref_1234",
"payer": {
"email": "comprador@email.com",
"identification": {
"type": "DNI",
"number": "12345678"
}
},
"transactions": {
"payments": [
{
"amount": "100.00",
"payment_method": {
"id": "visa",
"type": "credit_card",
"token": "ID_DEVUELTO_POR_LA_TOKENIZACION",
"installments": 1
}
}
]
}
}'
| Parámetro | Tipo | Descripción | Obligatoriedad |
Authorization | Header | Header con tu Access Token de pruebasClave privada de la aplicación creada en Mercado Pago, utilizado en el backend. Puedes acceder a él a través de Tus integraciones > Detalles de aplicación > Pruebas > Credenciales de prueba.. | Obligatorio |
X-Idempotency-Key | Header | Valor único por solicitud (UUID v4) para evitar pagos duplicados. | Obligatorio |
type | Body. String | Tipo de order. Valor fijo online. | Requerido |
processing_mode | Body. String | Modo de procesamiento de la order. Los valores posibles son: automatic, para crear y procesar la order en modo automático. manual, para crear la order y procesarla con posterioridad. Para más información, accede a Modelo de integración. | Requerido |
total_amount | Body. String | Monto total de la transacción. | Requerido |
external_reference | Body. String | Referencia para sincronizar la order con tu sistema. | Opcional |
payer.email | Body. String | E-mail del comprador. | Requerido |
payer.identification.type | Body. String | Tipo de documento de identificación del comprador. Puedes consultar los valores disponibles enviando una requisición al endpoint Obtener tipos de documento. | Requerido |
payer.identification.number | Body. String | Número de documento de identificación del comprador. | Requerido |
transactions.payments[].amount | Body. String | Monto de la transacción. | Requerido |
transactions.payments[].payment_method.id | Body. String | Identificador del método de pago. En este caso, es la bandera de cada tarjeta. Puedes consultar la lista completa de identificadores disponibles enviando una requisición al endpoint Obtener medios de pago. | Requerido |
transactions.payments[].payment_method.type | Body. String | Tipo de método de pago. Para pagos con tarjetas de crédito, debe ser credit_card, y para pagos con tarjeta de débito, debe ser debit_card. | Requerido |
transactions.payments[].payment_method.token | Body. String | Token de la tarjeta obtenido en el paso Tokenización del pago. | Requerido |
transactions.payments[].payment_method.installments | Body. Integer | Número de cuotas en las que se dividirá el pago. | Requerido |