API Openpay
Consideraciones para el API Openpay
Siempre que se quiera utilizar el API Openpay se deberá contar con la llave privada la cual debe estar vigente y viajar en el Header de la solicitud, este valor sirve para realizar Basic Authentication y así poder consumir el API.
Las llaves se pueden consultar desde Dashboard al ingresar en la parte superior derecha dando clic en el icono de engranaje,entrando a la opción “Mi cuenta” misma en la que encontrarás la sección Llaves de acceso o bien en la opción Credenciales de acceso para el API.

Endpoints API Openpay
Endpoints disponibles para la generación de cargos con 3Ds desde la API para los diferentes ambientes para comercio y cliente:
Método: POST
Sandbox
https://sandbox-api.openpay.co/v1/{MERCHANT_ID}/charges
https://sandbox-api.openpay.co/v1/{MERCHANT_ID}/ customers/{CUSTOMER_ID}/charges
Producción
https://api.openpay.co/v1/{MERCHANT_ID}/charges
https://api.openpay.co/v1/{MERCHANT_ID}/ customers/{CUSTOMER_ID}/charges
Códigos de respuesta API
Código HTTP | Descripción |
200 | Ok |
400 | Bad Request |
401 | Unauthorized |
422 | Unprocessable Entity |
500 | Internal Server Error |
503 | Service Unavailable |
Crear transacción 3D Secure con Token
Para utilizar este servicio se debe tener un Token, el cual puede ser obtenido de las siguientes maneras:
Token de cargo previo. – Si previamente se realizó un intento de cobro a la tarjeta siguiendo la guía de Pagos con tarjeta y el resultado fue un código de error 3005 (Rechazo por riesgo), se puede usar el mismo token creado para 3D Secure.
Creación de nuevo Token. – Si no se cuenta con un token previo, se debe utilizar el servicio de creación de token para crear uno.
Una vez que tengas un token este deberá ser usado la propiedad source_id, descrito en la siguiente tabla que especifica los campos que se pueden enviar en la petición del API:
Propiedad | Descripción |
method | string(requerido) Debe contener el valor card para indicar que el cargo se hará de una tarjeta. |
source_id | string (requerido, longitud = 45) ID de la tarjeta guardada o el id del token creado de donde se retirarán los fondos. |
amount | numeric (requerido) Cantidad del cargo. Debe ser una cantidad mayor a cero, con hasta dos dígitos decimales. |
currency | string (opcional) Tipo de moneda del cargo. Se soportan los siguientes tipos de monedas: Pesos Colombianos (COP) y Dólares Americanos (USD)
|
description | string (requerido, longitud = 250) Una descripción asociada al cargo. |
order_id | string (opcional, longitud = 100) Identificador único del cargo. Debe ser único entre todas las transacciones. |
device_session_id | string (requerido, longitud = 32) Identificador del dispositivo generado con la herramienta antifraudes |
capture | boolean (opcional, default = true) Indica si el cargo se hace o no inmediatamente, cuando el valor es false el cargo se maneja como una autorización (o preautorización) y solo se reserva el monto para ser confirmado o cancelado en una segunda llamada. |
Objeto (Opcional) Información del cliente al que se le realiza el cargo. Ver objeto Customer. Se puede ocupar los mismos parámetros usados en la creación de un cliente pero no se creará una cuenta al cliente. Nota: Este parámetro solo se puede utilizar creando el cargo a nivel comercio Si desea crear un cliente y llevar un historial de sus cargos consulte cómo crear un cliente y realice el cargo a nivel cliente. | |
payment_plan | objeto (opcional) Datos del plan de meses sin intereses que se desea utilizar en el cargo. Ver Objeto PaymentPlan. |
metadata | list(key, value) (opcional) Listado de campos personalizados de antifraude, estos campos deben de apegarse a las reglas para creación de campos personalizados de antifraude |
send_email | boolean (opcional) Usado para cargos de tipo redirect. Indica si se desea enviar un email que direccione al formulario de pago de Openpay. |
redirect_url | string (requerido) Usado para cargos de tipo redirect. Indica la url a la que redireccionar despues de una transaccion exitosa en el fomulario de pago de openpay. Nota: Este parámetro solo se puede utilizar si se especifica el manejo de 3D Secure. |
use_3d_secure | string (opcional) Se debe especificar este parámetro en true para manejar 3D Secure. |
iva | numeric (opcional) Monto de iva . Debe ser una cantidad igual o mayor a cero. |
Ejemplo de petición:
Header: Basic {llave privada vigente}
{
“method”: “card”,
“amount”: 832,
“currency”: “COP”,
“description”: “Prueba con 3DS”,
“order_id”: “orden123456789”,
“redirect_url”: “https://www.openpay.mx/index.html”,
“device_session_id”: “device12234567s8”,
“use_3d_secure”: “true”,
“confirm”:“true”,
“source_id”: “k81aoifelkna2efguzle”,
“customer”: {
“name”: “Alonso”,
“last_name”: “Test”,
“phone_number”: “8884444444”,
“email”: “test2@openpay.mx”
}
Envío de URL de autenticación
La respuesta a la petición de creación de cargo será un JSON con la información de la transacción a pagar por el usuario. Se debe poner especial atención en los siguientes parámetros:
id – ID único de la transacción creada, debe ser almacenado ya que será por medio de este ID que se envíe la respuesta una vez que el usuario realice la autenticación 3D Secure.
payment_method.url – URL a donde se debe redirigir al usuario para iniciar el proceso.
Ejemplo de la respuesta:
{
“id”: “trjd5i68lurpekpg15hb”,
“authorization”: “000000”,
“operation_type”: “in”,
“transaction_type”: “charge”,
“status”: “charge_pending”,
“conciliated”: true,
“iva”: “0”,
“creation_date”: “2024-04-01T17:50:32-06:00”,
“operation_date”: “2024-04-01T17:50:32-06:00”,
“description”: “Prueba con 3DS”,
“error_message”: null,
“order_id”: “orden123456789”,
“card”: {
“type”: “credit”,
“brand”: “visa”,
“address”: {
“line1”: “Av 5 de Febrero”,
“line2”: “Roble 207”,
“line3”: “Col Carrillo”,
“state”: “Colombia”,
“city”: “Colombia”,
“postal_code”: “76900”,
“country_code”: “CO”
},
“card_number”: “400558XXXXXX1886”,
“holder_name”: “Hectorito Alonso Test”,
“expiration_year”: “27”,
“expiration_month”: “01”,
“allows_charges”: true,
“allows_payouts”: false,
“bank_name”: “BANXICO”,
“bank_code”: “001”
},
“gateway_card_present”: “CREDIBANCO”,
“payment_method”: {
“type”: “redirect”,
“url”: “https://dev-api.openpay.co/v1/m1c3xff4vje0ratdi93g/charges/trjd5i68lurpekpg15hb/redirect/”
},
“amount”: 832.00,
“currency”: “COP”,
“customer”: {
“name”: “Alonso”,
“last_name”: “Test”,
“email”: “test2@openpay.mx”,
“phone_number”: “8884444444”,
“address”: null,
“creation_date”: “2024-04-01T17:50:31-06:00”,
“external_id”: null,
“clabe”: null
},
“method”: “card”
}
La URL contenida en la propiedad payment_method.url inicia el proceso, cuando el servicio de autenticación no logra autenticar al cliente se realiza el flujo Challenge y le solicita ingresar un código en la siguiente pantalla.
Cuando el cliente es autenticado exitosamente se realiza el flujo Frictionless, es decir que este paso no se realiza.
Redireccionamiento a URL de respuesta
Una vez completa la autenticación del usuario en el sistema 3D Secure y recibida la respuesta en Openpay, se re-direccionará al usuario a la URL definida en el paso 2 (redirect_url) usando el ID de la transacción que se envió en el paso 5. Ejemplo: http://www.openpay.co/index.html?id=treqwygvw0hrjuvwbsf5
Notas:
Puedes simular diferentes resultados usando las tarjetas de Pruebas
Implementa las Notificaciones para conocer el estado de los pagos en tiempo real