Suscripciones por medio de Component embebido/redireccionado
Puedes incluir planes para suscripiciones en Component embebido y redireccionado.
Creando el componente embebido con planes para suscripciones

1. Crea un plan
Crea un plan a travez del panel o desde nuestro API de planes
curl --request POST 'https://api.conekta.io/plans' \
--header 'Accept: application/vnd.conekta-v2.2.0+json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer key_xxxxxxxxxxxxxx' \
--data-raw '{
"amount": 1000000,
"currency": "MXN",
"expiry_count": 1,
"frequency": 2,
"id": "nuevo-plan",
"interval": "week",
"name": "Nuevo plan",
"trial_period_days": 0,
"max_retries": 3,
"retry_delay_hours": 50
}
'
{
"id": "nuevo-plan",
"livemode": false,
"created_at": 1743712372,
"name": "Nuevo plan",
"amount": 1000000,
"currency": "MXN",
"interval": "week",
"frequency": 2,
"expiry_count": 1,
"trial_period_days": 0,
"max_retries": 3,
"retry_delay_hours": 50,
"object": "plan"
}
En caso de ya tener un plan creado con anterioridad puedes simplemente usar el plan_id
2. Crea una orden con una lista de planes
Nota importante
Por el momento, suscripciones solo se pueden pagar con el método de pago de tarjetas, por lo que es el único método de pago que puedes enviar en la petición.
Al momento de crear la orden debes enviar el parámetro plan_ids
, el cual es una lista de id de planes que quieras habilitar a tus clientes para una suscripción. Esta lista puede contener uno o multiples ids.
También, solo debes enviar card
para el campo allowed_payment_methods
curl --request POST 'https://api.conekta.io/orders' \
--header 'Accept: application/vnd.conekta-v2.2.0+json' \
--header 'Authorization: Bearer key_xxxxxxxxxxxxxx' \
--header 'Content-type: application/json' \
--data-raw '{
"currency": "MXN",
"customer_info": {
"name": "Prueba",
"email": "[email protected]",
"phone": "+5218181818181"
},
"shipping_lines": [
{
"amount": 0
}
],
"checkout": {
"name": "Embebido Prueba",
"allowed_payment_methods": ["card"],
"plan_ids": ["nuevo-plan"],
"type": "Integration",
"expires_at": 1746015865,
"max_failed_retries": 3
}
}'
{
"livemode": false,
"amount": 30,
"currency": "MXN",
"payment_status": null,
"amount_refunded": 0,
"split_payment": null,
"customer_info": {
"email": "[email protected]",
"phone": "+5218181818181",
"name": "Prueba",
"corporate": null,
"customer_id": null,
"date_of_birth": null,
"national_id": null,
"object": "customer_info"
},
"shipping_contact": null,
"channel": {
"segment": "Checkout",
"checkout_request_id": "asdf1234-asdf-1234-asdf-asdf1234",
"checkout_request_type": "Integration",
"id": "channel_2xasdf1234adsafs"
},
"fiscal_entity": null,
"checkout": {
"id": "asdf1234-asdf-1234-asdf-asdf1234",
"name": "Embebido Prueba",
"livemode": false,
"emails_sent": 0,
"success_url": "",
"failure_url": "",
"payments_limit_count": null,
"paid_payments_count": 0,
"sms_sent": 0,
"status": "Issued",
"type": "Integration",
"recurrent": false,
"starts_at": 1745474400,
"expires_at": 1746015865,
"allowed_payment_methods": ["card"],
"exclude_card_networks": [],
"needs_shipping_contact": false,
"monthly_installments_options": [],
"monthly_installments_enabled": false,
"redirection_time": null,
"force_3ds_flow": false,
"plan_id": null,
"metadata": {},
"can_not_expire": false,
"three_ds_mode": null,
"max_failed_retries": null,
"object": "checkout",
"is_redirect_on_failure": false,
"on_demand_enabled": false
},
"object": "order",
"id": "ord_2xasdf1234adsaf",
"metadata": {},
"is_refundable": false,
"processing_mode": null,
"created_at": 1745515852,
"updated_at": 1745515852,
"line_items": {
"object": "list",
"has_more": false,
"total": 1,
"data": [
{
"name": "Suscripcion a: nuevo-plan",
"description": null,
"unit_price": 30,
"quantity": 1,
"sku": null,
"tags": null,
"brand": null,
"type": null,
"object": "line_item",
"id": "line_item_2xsgHdf1234adsaf",
"parent_id": "ord_2xasdf1234adsaf",
"metadata": {},
"antifraud_info": {}
}
]
},
"shipping_lines": {
"object": "list",
"has_more": false,
"total": 1,
"data": [
{
"amount": 0,
"carrier": null,
"method": null,
"tracking_number": null,
"object": "shipping_line",
"id": "ship_lin_2xsgdf1234adsaf",
"parent_id": "ord_2xasdf1234adsaf",
"metadata": null
}
]
},
"tax_lines": null,
"discount_lines": null,
"charges": null
}
3. Inicializa el component
De la respuesta obtenida en el paso 2, utiliza el checkout.id
obtenido para el campo checkoutRequestId
que esta en el objeto de configuración del Componente. Seguimos los pasos de la documentación del Component
<html>
<head>
<meta charset="utf-8" />
<title>Checkout</title>
<script
type="module"
crossorigin
src="https://pay.conekta.com/v1.0/js/conekta-checkout.min.js"
></script>
<!-- En este archivo esta la config del componente -->
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<p>Tienda de Prueba</p>
<div id="example"></div>
<div style="height: 200px"></div>
<script>
function initializeConekta() {
const options = {
backgroundMode: 'lightMode',
colorPrimary: '#081133',
colorText: '#585987',
colorLabel: '#585987',
inputType: 'minimalMode',
autoResize: true,
};
const config = {
locale: 'es',
publicKey: 'key_xxxxxxxxxxxxxx',
targetIFrame: '#example',
checkoutRequestId: '12345asdf-asdf-asdf-asdf-12345asdf', // <- AQUI
};
const callbacks = {
onCreateTokenSucceeded: function (token) {
console.log('token', token);
},
onCreateTokenError: function (error) {
console.log('error tokenizando tarjeta', error);
},
onGetInfoSuccess: function (loadingTime) {
console.log(
'loading time en milisegundos',
loadingTime.initLoadTime
);
},
onFinalizePayment: function (order) {
console.log('success: ', order);
},
onErrorPayment: function (error) {
console.log('error en pago: ', error);
},
};
window.ConektaCheckoutComponents.Integration({
config,
callbacks,
options,
});
}
// Verifica que el script externo de Conekta esté disponible antes de ejecutar
window.addEventListener('load', function () {
if (window.ConektaCheckoutComponents) {
initializeConekta();
} else {
console.error('El script de Conekta no está disponible.');
}
});
</script>
</body>
</html>
Con esto obtenemos el componente embebido donde tus clientes pueden elegir de una lista de planes para suscribirse:
Creando el component redireccionado con planes para suscripciones

Component redireccionado con planes para suscripciones
Para incluir planes en component redireccionado debes seguir los mismos pasos de crear un plan y una orden. Pero en al crear la orden, para el campo type
se debe enviar el valor HostedPayment
. Una vez procesado el pago (exitoso o fallido), el sistema redirigirá al cliente automáticamente, tras el tiempo configurado en redirectiontime
, a las URLs predefinidas en los campos successurl
en caso de éxito, o el campo failure_url
si el pago no se concreta.
curl --request POST 'https://api.conekta.io/orders' \
--header 'Accept: application/vnd.conekta-v2.2.0+json' \
--header 'Authorization: Bearer key_xxxxxxxxxxxxxx' \
--header 'Content-type: application/json' \
--data-raw '{
"currency": "MXN",
"customer_info": {
"customer_id": "cus_2xhsh4NXapoasdf1234"
},
"checkout": {
"allowed_payment_methods": [
"card"
],
"type": "HostedPayment",
"success_url": "https://www.mysite.com/payment/confirmation",
"failure_url": "https://www.mysite.com/payment/failure",
"plan_ids": ["nuevo-plan"]
}
}'
{
"livemode": false,
"amount": 1000000,
"currency": "MXN",
"payment_status": null,
"amount_refunded": 0,
"split_payment": null,
"customer_info": {
"email": "[email protected]",
"phone": "522929292929229",
"name": "Prueba prueba",
"corporate": false,
"customer_id": "cus_2xhsh4NXapoasdf1234",
"date_of_birth": null,
"national_id": null,
"object": "customer_info",
"customer_custom_reference": null
},
"shipping_contact": null,
"channel": {
"segment": "Checkout",
"checkout_request_id": "asdf1234-as12-sd12-df23-asdf12345",
"checkout_request_type": "HostedPayment",
"id": "channel_2xhsh4NXapoasdf1234"
},
"fiscal_entity": null,
"checkout": {
"id": "asdf1234-as12-sd12-df23-asdf12345",
"name": "ord-2xhsh4NXapoasdf1234",
"livemode": false,
"emails_sent": 0,
"success_url": "https://www.mysite.com/payment/confirmation",
"failure_url": "https://www.mysite.com/payment/failure",
"payments_limit_count": null,
"paid_payments_count": 0,
"sms_sent": 0,
"status": "Issued",
"type": "HostedPayment",
"recurrent": false,
"starts_at": 1745992800,
"expires_at": 1746251999,
"allowed_payment_methods": [
"card"
],
"exclude_card_networks": [],
"needs_shipping_contact": false,
"monthly_installments_options": [],
"monthly_installments_enabled": false,
"redirection_time": null,
"force_3ds_flow": false,
"plan_id": "nuevo-plan",
"metadata": {},
"can_not_expire": false,
"three_ds_mode": null,
"max_failed_retries": null,
"object": "checkout",
"is_redirect_on_failure": true,
"slug": "2877ba0cfb7c4f34b91bf7424easdf12345",
"url": "https://pay.conekta.io/checkout/2877ba0cfb7c4f34b91bf7424easdf12345"
},
"object": "order",
"id": "ord_2xhsh4NXapoasdf1234",
"metadata": {},
"is_refundable": false,
"processing_mode": null,
"created_at": 1746017003,
"updated_at": 1746017003,
"line_items": {
"object": "list",
"has_more": false,
"total": 1,
"data": [
{
"name": "Suscripcion a Nuevo Plan",
"description": null,
"unit_price": 1000000,
"quantity": 1,
"sku": null,
"tags": null,
"brand": null,
"type": null,
"object": "line_item",
"id": "line_item_2xhsh4NXapoasdf1234",
"parent_id": "ord_2xhsh4NXapoasdf1234",
"metadata": {},
"antifraud_info": {}
}
]
},
"shipping_lines": null,
"tax_lines": null,
"discount_lines": null,
"charges": null
}
En tu sitio tienes que hacer redirección a la url regresada en el paso anterior, donde el usuario podrá efectuar su pago en el Checkout:
{
"url": "https://pay.conekta.io/checkout/2877ba0cfb7c4f34b91bf7424easdf12345"
}
Updated 3 days ago