Saltar al contenido principal
En esta página

Esta página proporciona una guía detallada para integrar la funcionalidad Enlace de pago en su aplicación a través de API.

El Enlace de Pago DEUNA te permite crear enlaces de pago para compras.

El Enlace de Pago facilita y agiliza el proceso de pago a través de la plataforma DEUNA y reduce drásticamente la necesidad de cualquier desarrollo.

Requisitos#

  • Conocimientos básicos de JavaScript y Typecript.
  • URL de API:
    • Caja de arena: https://api.sandbox.deuna.io
    • Producción: https://api.deuna.io
  • DEUNA merchant ID:
    • Sandbox: prueba de credenciales para la implementación inicial
    • Producción: Credenciales de producción para pruebas y lanzamiento controlados.
  • Credenciales de administrador DEUNA
  • Claves API públicas y privadas de DEUNA

Realizar una solicitud al Crear orden punto final con el order_type establecer como PAYMENT LINK.

Esto crea un token de pedido asociado con el enlace de pago.

Solicitud de ejemplo

JSON
{
    "order_type": "PAYMENT_LINK",
    "payer_info": {
        "email": "mramos@deuna.com" // email of the user
    },
    "order": {
        "order_id": "{{identificador orden del comercio}}",
        "currency": "MXN",
        "items_total_amount": 150000, //Monto con 2 decimales sin punto
        "sub_total": 150000,
        "total_amount": 150000,
        "store_code": "all",
        // URL to redirect back after payment is attempted
        "redirect_urls": {
            "success": "https://www.google.com?q=success", // redirect on successful payment
            "error": "https://www.google.com?q=failure",  // redirect on failure payment
            "close": "https://www.google.com?q=close" // redirect on user closing the payment link
        },
        "payer_info":{
            "email": "mramos@deuna.com" // email of the user
        },
        "billing_address": {
            "country": "MX",
            "country_code": "MX",
            "email": "mramos@deuna.com" // email of the user
        },
        "items": [ // items the user is purchasing
            {
                "id": "79", // required
                "name": "Pago de impuesto", // required
                "description": "Pago de servicio de agua", // required
                "type": "virtual", // required to send "virtual"
                "total_amount": { // required
                    "amount": 150000,
                    "currency": "MXN"
                },
                "unit_price": { // required
                    "amount": 150000,
                    "currency": "MXN"
                },
                "quantity": 1, // required
                "category": "Pago de servicios", // required
                "image_url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSj5Ywbfmq1apVaZL9YeODf1J22DzGDI9THkA&s" // required
            }
        ]
    }
}

Ejemplo de respuesta

JSON
{
    "token": "638f7ec0-9f1f-4898-8b42-a1ac2d555216",
    "order_type": "PAYMENT_LINK",
    "order": {
        "order_id": "4167f4a3-0081-4b3d-82ba-cf8da04e5cc4",
        "store_code": "all",
        "currency": "MXN",
        "tax_amount": 0,
        "display_tax_amount": "MXN 0.00",
        "shipping_amount": 0,
        "display_shipping_amount": "MXN 0.00",
        "items_total_amount": 150000,
        "display_items_total_amount": "MXN 1500.00",
        "sub_total": 150000,
        "display_sub_total": "MXN 1500.00",
        "total_amount": 150000,
        "display_total_amount": "MXN 1500.00",
        "items": [
            {
                "id": "79",
                "name": "Pago de impuesto",
                "description": "Pago de servicio de agua",
                "options": "",
                "total_amount": {
                    "amount": 1000,
                    "original_amount": 0,
                    "display_amount": "MXN 1500.00",
                    "display_original_amount": "MXN 0.00",
                    "currency": "MXN",
                    "currency_symbol": "",
                    "total_discount": 0,
                    "display_total_discount": "MXN 0.00"
                },
                "unit_price": {
                    "amount": 1000,
                    "display_amount": "MXN 1500.00",
                    "currency": "MXN",
                    "currency_symbol": ""
                },
                "tax_amount": {
                    "amount": 0,
                    "display_amount": " 0.00",
                    "currency": "",
                    "currency_symbol": ""
                },
                "quantity": 1,
                "uom": "",
                "upc": "",
                "sku": "",
                "isbn": "",
                "brand": "",
                "manufacturer": "",
                "category": "taxation",
                "color": "",
                "size": "",
                "weight": {
                    "weight": 0,
                    "unit": ""
                },
                "image_url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSj5Ywbfmq1apVaZL9YeODf1J22DzGDI9THkA&s",
                "details_url": "",
                "type": "virtual",
                "taxable": false,
                "discounts": [],
                "included_in_subscription": false,
                "item_details": []
            }
        ],
        "discounts": [],
        "shipping_address": {
            "id": 0,
            "user_id": "",
            "first_name": "",
            "last_name": "",
            "phone": "",
            "identity_document": "",
            "lat": 0,
            "lng": 0,
            "address1": "",
            "address2": "",
            "city": "",
            "zipcode": "",
            "state_name": "",
            "country_code": "",
            "additional_description": "",
            "address_type": "",
            "is_default": false,
            "created_at": "",
            "updated_at": "",
            "identity_document_type": "",
            "email": "",
            "state_code": "",
            "country": ""
        },
        "shipping_options": {
            "type": "",
            "details": {
                "store_name": "",
                "address": "",
                "address_coordinates": {
                    "lat": 0,
                    "lng": 0
                },
                "contact": {
                    "name": "",
                    "phone": ""
                },
                "additional_details": {
                    "pickup_time": "0001-01-01T00:00:00Z",
                    "stock_location": ""
                }
            }
        },
        "user_instructions": "",
        "metadata": {},
        "status": "pending",
        "payment": {
            "data": {
                "amount": {
                    "amount": 0,
                    "currency": ""
                },
                "metadata": {},
                "from_card": {
                    "card_brand": "",
                    "first_six": "",
                    "last_four": "",
                    "bank_name": "",
                    "country_iso": "",
                    "credential_source": "",
                    "expiry_month": "",
                    "expiry_year": ""
                },
                "updated_at": "0001-01-01 00:00:00 +0000 UTC",
                "method_type": "",
                "merchant": {
                    "store_code": "",
                    "id": "",
                    "affiliation_code": "",
                    "mcc": ""
                },
                "created_at": "0001-01-01 00:00:00 +0000 UTC",
                "id": "",
                "processor": "",
                "customer": {
                    "email": "",
                    "id": "",
                    "first_name": "",
                    "last_name": ""
                },
                "status": "",
                "reason": "",
                "external_transaction_id": "",
                "merchant_payment_processor_name": "",
                "authorization_code": "",
                "installment_interest_calculations": null,
                "three_ds_details": {},
                "merchant_payment_processor_id": ""
            }
        },
        "gift_card": [],
        "redirect_url": "",
        "webhook_urls": null,
        "total_discount": 0,
        "display_total_discount": "MXN 0.00",
        "shipping": {
            "original_amount": 0,
            "total_discount": 0,
            "discounts": []
        },
        "cash_change": 0,
        "shipping_method": {
            "code": "",
            "name": "",
            "min_delivery_date": "",
            "max_delivery_date": "",
            "cost": 0,
            "display_cost": "",
            "tax_amount": 0,
            "display_tax_amount": "",
            "scheduler": []
        },
        "shipping_methods": [],
        "timezone": "",
        "scheduled_at": "",
        "billing_address": {
            "id": 0,
            "user_id": "",
            "first_name": "",
            "last_name": "",
            "phone": "",
            "identity_document": "",
            "lat": 0,
            "lng": 0,
            "address1": "",
            "address2": "",
            "city": "",
            "zipcode": "",
            "state_name": "",
            "country_code": "MX",
            "additional_description": "",
            "address_type": "",
            "is_default": false,
            "created_at": "2025-04-30T01:45:30Z",
            "updated_at": "2025-04-30T01:45:30Z",
            "email": "jmoscoso@deuna.com",
            "identity_document_type": "",
            "country": "",
            "state_code": ""
        },
        "payment_link": "https://pay.bancoazteca.deuna.com//638f7ec0-9f1f-4898-8b42-a1ac2d555216",
        "display_shipping_tax_amount": "MXN 0.00",
        "display_total_tax_amount": "MXN 0.00",
        "shipping_tax_amount": 0,
        "total_tax_amount": 0,
        "user_id": "",
        "include_payment_options": [],
        "redirect_urls": {
            "success": "https://www.google.com?q=success",
            "pending": "",
            "error": "https://www.google.com?q=failure",
            "fallback": "",
            "close": "https://www.google.com?q=close"
        },
        "created_at": "2025-04-30 01:45:30.06298093 +0000 UTC",
        "updated_at": "",
        "payer_info": {
            "email": "mramos@deuna.com",
            "person_type": "UNKNOWN_PERSON"
        },
        "discount_amount": 0,
        "shipping_discount_amount": 0,
        "device_fingerprint": "",
        "expired_at": "",
        "version": "0",
        "fraud": null,
        "total_interest_amount": 0,
        "display_total_interest_amount": "MXN 0.00",
        "payment_method": "",
        "token": "",
        "statement_descriptor": "",
        "callback_urls": null
    },
    "custom_fields": [],
    "checkout_modules": []
}

Los campos necesarios para crear un enlace de pago se documentan a continuación.

order campos

Esta sección documenta los campos relacionados con el pedido.

campoTipoRequeridoDescripción
order_idstringSíID interno del pedido
store_codestringSíCódigo de tienda
monedastringSíMoneda ISO 4217
total_tax_amountnumberSíMonto total del impuesto
items_total_amountnumberSíSuma de los precios base de todos los artículos antes de impuestos.
sub_totalnumberSíartículos_total_monto + total_impuesto_monto.
total_amountnumberSíImporte total extraído del sub_total.
artículosarraySíLista de artículos
order.items[].idstringSíUnique item ID
order.items[].namestringSíNombre del artículo para el cliente.
order.items[].descriptionstringNoDescripción detallada
order.items[].quantityintegerSícantidad de artículos
order.items[].unit_priceobjectSíPrecio unitario
cantidadnumberSíCantidad unitaria
monedastringSíMoneda ISO para unidad_precio
currency_symbolstringSísímbolo de moneda
order.items[].tax_amountobjectNoImpuesto aplicado al artículo
order.items[].total_amountobjectSíImporte total final
cantidadnumberSíImporte total después de impuestos y descuentos
discount_amountnumberSíImporte descontado (si corresponde)
original_amountnumberSíPrecio original sin impuestos
order.items[].image_urlstringNoURL de la imagen del artículo
redirect_urlsobjectNoRedirigir URL a cada resultado
cerrarstringNoCierra la caja
éxitostringNoPara pagos exitosos
pendientestringNoPara pagos pendientes
errorstringNoPor fallas en el pago
respaldostringNoBotón Atrás en pantallas de error
include_payment_optionsarraySíFiltra los métodos de pago y procesadores disponibles al finalizar la compra.
include_payment_options[].payment_methodstringSíTipo de método de pago
include_payment_options[].processorsobjectSíLista de nombres de procesadores para habilitar

checkout_modules campos

Defina qué módulos desea mostrar al abrir el enlace de pago en su widget:

campotipoRequiereQué ocurre / Para qué sirve
checkout_modulesarrayNoLista de módulos de pago para mostrar
nombrestringSíNombre del módulo: UserInfoPattern, OrderDetailPattern, LoginPattern

configuration campos

Estos campos corresponden a la configuración y personalización de los Enlaces de Pago.

campoTipoRequeridoDescripción
expires_atstringNoFecha/hora de caducidad (ISO 8601). Sin este campo, la fecha/hora no caducará.
payment_link_namestringNoNombre descriptivo de su enlace de pago (máximo 60 caracteres).
max_completed_purchasesintegerNoLímite de compras exitosas antes de desactivar el enlace.
max_payment_retriesintegerNoLímite de intentos de pago por usuario (incluye rechazos).

2. Obtenga el campo de redireccionamiento#

En la respuesta API, useorder.payment_link para redirigir al usuario a la pantalla de pago.
Integra el enlace de pago en una aplicación o compártelo a través de tu página web.

En la respuesta a la llamada, encontrarás el enlace de pago en el campo payment_link.

Integrar el Enlace de Pago en una función javascript, donde un href.location que redirige al enlace generado.

JavaScript
function openDeunaPayment() {
    const paymentLink = "https://api.deuna.io/payment-links/{payment-link-id}";
    window.location.href = paymentLink; // Opens the link in the same window
}
JavaScript
<!DOCTYPE html>
<html>
  .
  .
<body>
 <div class="container">
        <h1>Realizar Pago</h1>
        <p>Haz clic en el botón "Pagar con Deuna" para continuar con el pago.</p>
        <button id="payButton" class="pay-button" onclick="openDeunaPayment()">Pagar con Deuna</button>
    </div>
    <script src="app.ts"></script>
</body>
</html>

Tarjetas de prueba#

Utilice tarjetas de prueba para procesar pagos de prueba:

  • Montos menores a 50,000 mxn = Aprobados
  • Montos mayores a 50,000 mxn y menores a 100,000 mxn = Rechazados

3DS (MPI DEUNA)

Número de tarjeta:

  • 4000000000002503 (desafío exitoso)
  • 4000000000002370 (desafío fallido)
  • 4000000000002701 (éxito sin fricciones)
  • 4000000000002925 (fallo sin fricción)
  • Fecha de caducidad: 26/05
  • CVV: 123
  • Tarjeta más fría: Prueba por Deuna

Sin 3DS

Número de tarjeta:

  • 4111111111111111 (crédito)
  • 5474925432670366 (crédito)
  • 4152313289903408 (débito)
  • 5200828282828210 (débito)
  • 4242424242424242 (crédito)
  • 4622943127013705
  • Fecha de caducidad: 26/05
  • CVV: 123
  • Titular de la tarjeta: Prueba por Deuna

3. Obtener el estado del pago#

Realizar una solicitud al Obtener pedido punto final para verificar el estado del pago.

Utilice el token de pedido en la solicitud.

Ejemplo de respuesta

JSON
{
    "token": "bb0aa546-8d96-4121-8cc2-981f2e3082d1",
    "order_type": "PAYMENT_LINK",
    "order": {
        "order_id": "8000-123-293467",
        "store_code": "all",
        "currency": "MXN",
        "tax_amount": 0,
        "display_tax_amount": "MXN 0.00",
        "shipping_amount": 0,
        "display_shipping_amount": "MXN 0.00",
        "items_total_amount": 166746,
        "display_items_total_amount": "MXN 1,500.00",
        "sub_total": 166746,
        "display_sub_total": "MXN 1,500.00",
        "total_amount": 166746,
        "display_total_amount": "MXN 1,500.00",
        "items": [
            {
                "id": "8000-123-293467",
                "name": "PAGO REGULAR SERVICIO DE AGUA",
                "description": "PAGO REGULAR SERVICIO DE AGUA Contrato: 14932 Periodo Inicial:   202501 Periodo Final:   202502",
                "options": "",
                "total_amount": {
                    "amount": 166746,
                    "original_amount": 0,
                    "display_amount": "MXN 1,500.00",
                    "display_original_amount": "MXN 0.00",
                    "currency": "MXN",
                    "currency_symbol": "",
                    "total_discount": 0,
                    "display_total_discount": "MXN 0.00"
                },
                "unit_price": {
                    "amount": 166746,
                    "display_amount": "MXN 1,500.00",
                    "currency": "MXN",
                    "currency_symbol": ""
                },
                "tax_amount": {
                    "amount": 0,
                    "display_amount": " 0.00",
                    "currency": "",
                    "currency_symbol": ""
                },
                "quantity": 1,
                "uom": "",
                "upc": "",
                "sku": "",
                "isbn": "",
                "brand": "",
                "manufacturer": "",
                "category": "curso",
                "color": "",
                "size": "",
                "weight": {
                    "weight": 0,
                    "unit": ""
                },
                "image_url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSj5Ywbfmq1apVaZL9YeODf1J22DzGDI9THkA&",
                "details_url": "",
                "type": "virtual",
                "taxable": false,
                "discounts": [],
                "included_in_subscription": false,
                "item_details": []
            }
        ],
        "discounts": [],
        "shipping_address": {
            "id": 0,
            "user_id": "",
            "first_name": "ROBERTO ANTONIO",
            "last_name": "MILLAN FLORES",
            "phone": "+52 5619179755",
            "identity_document": "",
            "lat": 0,
            "lng": 0,
            "address1": "",
            "address2": "",
            "city": "",
            "zipcode": "55770",
            "state_name": "",
            "country_code": "MX",
            "additional_description": "",
            "address_type": "",
            "is_default": true,
            "created_at": "2025-04-30T00:05:19Z",
            "updated_at": "2025-04-30T00:05:19Z",
            "identity_document_type": "",
            "email": "juridicomillan@gmail.com",
            "state_code": "",
            "country": "MX"
        },
        "shipping_options": {
            "type": "",
            "details": {
                "store_name": "",
                "address": "",
                "address_coordinates": {
                    "lat": 0,
                    "lng": 0
                },
                "contact": {
                    "name": "",
                    "phone": ""
                },
                "additional_details": {
                    "pickup_time": "0001-01-01T00:00:00Z",
                    "stock_location": ""
                }
            }
        },
        "user_instructions": "",
        "metadata": {},
        "status": "succeeded",
        "payment": {
            "data": {
                "amount": {
                    "amount": 166746,
                    "currency": "MXN"
                },
                "metadata": {
                    "authorization_code": "020815"
                },
                "from_card": {
                    "card_brand": "mastercard",
                    "first_six": "520416",
                    "last_four": "8095",
                    "installment": {
                        "installments": 1,
                        "plan_id": "",
                        "plan_option_id": "",
                        "installment_type": "",
                        "installment_rate": 0,
                        "installment_amount": 0
                    },
                    "bank_name": "Banco Nacional De Mexico, S.A.",
                    "country_iso": "MX",
                    "credential_source": "",
                    "expiry_month": "04",
                    "expiry_year": "2028"
                },
                "updated_at": "2025-04-30 00:05:20.824900873 +0000 UTC",
                "method_type": "credit_card",
                "merchant": {
                    "store_code": "all",
                    "id": "ba8537e7-4f9d-4306-94f9-784c99304bde",
                    "affiliation_code": "127",
                    "mcc": "4900"
                },
                "created_at": "2025-04-30 00:05:19.747601 +0000 UTC",
                "id": "8000-123-293467",
                "processor": "baz_gateway",
                "customer": {
                    "email": "juridicomillan@gmail.com",
                    "id": "88635a0c-2bca-4f43-80a0-d6ebbd31709a",
                    "first_name": "",
                    "last_name": ""
                },
                "status": "processed",
                "reason": "",
                "external_transaction_id": "100740865324",
                "merchant_payment_processor_name": "9269029",
                "processor_error": {
                    "code": "",
                    "message": ""
                },
                "authorization_code": "020815",
                "installment_interest_calculations": null,
                "routing_strategy": "Procesamiento sin 3DS + Antifraude",
                "three_ds_details": {},
                "data_sync": {
                    "iso8583_processing_code": "",
                    "iso8583_response_code": "",
                    "iso8583_response_code_description": "",
                    "switch_name": "PROSA"
                },
                "merchant_payment_processor_id": "12235b03-e48c-4ca6-8e7c-c18676df1546"
            }
        },
        "gift_card": [],
        "redirect_url": "",
        "webhook_urls": null,
        "total_discount": 0,
        "display_total_discount": "MXN 0.00",
        "shipping": {
            "original_amount": 0,
            "total_discount": 0,
            "discounts": []
        },
        "cash_change": 0,
        "shipping_method": {
            "code": "",
            "name": "",
            "min_delivery_date": "",
            "max_delivery_date": "",
            "cost": 0,
            "display_cost": "",
            "tax_amount": 0,
            "display_tax_amount": "",
            "scheduler": []
        },
        "shipping_methods": [],
        "timezone": "",
        "scheduled_at": "",
        "billing_address": {
            "id": 0,
            "user_id": "",
            "first_name": "ROBERTO ANTONIO",
            "last_name": "MILLAN FLORES",
            "phone": "+52 5619179755",
            "identity_document": "",
            "lat": 0,
            "lng": 0,
            "address1": "M 64 L 21 GALEANA",
            "address2": "",
            "city": "Ojo de Agua",
            "zipcode": "55770",
            "state_name": "Estado de México",
            "country_code": "MX",
            "additional_description": "",
            "address_type": "",
            "is_default": false,
            "created_at": "2025-04-30T00:05:19Z",
            "updated_at": "2025-04-30T00:05:19Z",
            "email": "juridicomillan@gmail.com",
            "identity_document_type": "",
            "country": "",
            "state_code": "MEX"
        },
        "payment_link": "https://pay.bancoazteca.deuna.com//bb0aa546-8d96-4121-8cc2-981f2e3082d1",
        "display_shipping_tax_amount": "MXN 0.00",
        "display_total_tax_amount": "MXN 0.00",
        "shipping_tax_amount": 0,
        "total_tax_amount": 0,
        "user_id": "",
        "include_payment_options": [],
        "redirect_urls": {
            "success": "https://www.google.com?q=success",
            "pending": "https://www.google.com?q=pending",
            "error": "https://www.google.com?q=error",
            "fallback": "",
            "close": "https://www.google.com?q=close"
        },
        "created_at": "2025-04-30 00:00:24.145522886 +0000 UTC",
        "updated_at": "2025-04-30 00:05:20.921803615 +0000 UTC",
        "payer_info": {
            "email": "mramos@deuna.com",
            "person_type": "UNKNOWN_PERSON"
        },
        "discount_amount": 0,
        "shipping_discount_amount": 0,
        "device_fingerprint": "",
        "expired_at": "",
        "version": "0",
        "fraud": {
            "analysis": {
                "score": 0.4589535,
                "processor": "SIFT",
                "risk_level": "low",
                "status": "automatic_decision",
                "type": "",
                "fraud_decision": "low_risk",
                "details": "Everything Else",
                "processor_response": "order_looks_ok_payment_abuse"
            }
        },
        "total_interest_amount": 0,
        "display_total_interest_amount": "MXN 0.00",
        "payment_method": "",
        "token": "",
        "statement_descriptor": "",
        "browser_details": {
            "screen_height": 753,
            "screen_width": 339,
            "user_agent": "",
            "ip_address": "",
            "color_depth": 24,
            "java_enabled": false,
            "java_script_enabled": false,
            "language": "es-ES",
            "time_zone_offset": 0,
            "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"
        },
        "callback_urls": null
    },
    "custom_fields": [],
    "checkout_modules": [],
    "refunds": []
}

Uso Webhooks de DEUNA Para comprender el procesamiento asíncrono del estado del proveedor, es necesario obtener el pedido original de Payment Link en su estado final.

Establezca los reintentos de entrega en un máximo de tres intentos.