Cargo recurrente
Esta modalidad de Pago Recurrente con Efectivo te permitirá crear órdenes que tus clientes podrán pagar directamente en un punto de venta autorizado por Conekta de manera física, generando referencias que podrán reutilizarse todas las veces que se desee.
Conekta cuenta con dos redes de puntos de venta que se habilitan de forma automática teniendo en cuenta el giro de tu negocio:
- Conekta efectivo con más de 10,000 puntos de venta (7 eleven, Farmacias del Ahorro, Tiendas Extra, Círculo K, Farmacia Benavides, Soriana, Waldo´s, Eleczion, Grupo RFP, Super Kiosko, Farmacias Bazar, Wolworth y del Sol, Yepas y Al super).
NOTA
Tu negocio podrá operar con nuestras redes de efectivo de acuerdo a la información que proporcionaste en el proceso de onboarding.
Características
- Es necesario registrar/almacenar un cliente en Conekta.
- La referencia nacerá sin expiración pero permitirá configurar vencimiento desde 1 día a 365 dias.
- Cada vez que un cliente quiera realizar un pago en tu negocio, podrá utilizar la misma referencia.
- Se enviarán notificaciones del pago en un máximo de 10 minutos a través de Webhooks y vía mail al usuario final.
Flujo de pago
Copia tus llaves privadas de pruebas. Si aún no las tienes, puedes obtenerlas en el siguiente enlace: panel Conekta](https://panel.conekta.com/developers).
1. Crea tu orden de pago recurrente
CUSTOM_REFERENCE_RETURNED se refiere a su referencia personalizada y barcode_url es la imagen del código de barras generada.
begin
customer = Conekta::Customer.create({
name: "Fulanito",
email: "[email protected]",
phone: "52134659439",
payment_sources: [ {
type: "cash_recurrent"
}]
})
rescue Conekta::Error => error
for error_detail in error.details do
puts error_detail.message
end
end
curl --request POST \
--url https://api.conekta.io/customers \
--header 'accept: application/vnd.conekta-v2.0.0+json' \
-u key_eYvWV7gSDkNYXsmr: \
--header 'content-type: application/json' \
--data '{
"name": "Fulanito",
"email": "[email protected]",
"phone": "+5218181818181",
"payment_sources": [{
"type": "oxxo_recurrent",
"expires_at": 1686255136
}]
}'
#Respuesta json de API
{
"livemode":false,
"name":"Oxxo recc",
"email":"[email protected]",
"phone":"52134659439",
"id":"cus_2jP5P8huCTWqcTtrn",
"object":"customer",
"created_at":1538686075,
"corporate":false,
"custom_id":"",
"payment_sources":{
"object":"list",
"has_more":false,
"total":1,
"data":[{
"id":"off_ref_2jP5P8huCTWqcTtro",
"object":"payment_source",
"type":"oxxo_recurrent",
"provider":"Oxxo",
"reference":"CUSTOM_REFERENCE_RETURNED",
"barcode":"CUSTOM_REFERENCE_RETURNED",
"barcode_url":"https://sandbox_reference.png",
"expires_at":0,
"created_at":1538686075,
"parent_id":"cus_2jP5P8huCTWqcTtrn" }]
}}try{
$customer = \Conekta\Customer::create(
array(
'name' => "fulanito",
'email' => "[email protected]",
'phone' => "+5218181818181",
'payment_sources' => array(
array(
'type' => "oxxo_recurrent"
)
)
)
);
var_dump(json_encode($customer));
} catch (\Conekta\ProcessingError $error){
echo $error->getMessage();
} catch (\Conekta\ParameterValidationError $error){
echo $error->getMessage();
} catch (\Conekta\Handler $error){
echo $error->getMessage();
}
#Respuesta json de API
{
"livemode":false,
"name":"Oxxo recc",
"email":"[email protected]",
"phone":"52134659439",
"id":"cus_2jP5P8huCTWqcTtrn",
"object":"customer",
"created_at":1538686075,
"corporate":false,
"custom_id":"",
"payment_sources":{
"object":"list",
"has_more":false,
"total":1,
"data":[{
"id":"off_ref_2jP5P8huCTWqcTtro",
"object":"payment_source",
"type":"oxxo_recurrent",
"provider":"Oxxo",
"reference":"CUSTOM_REFERENCE_RETURNED",
"barcode":"CUSTOM_REFERENCE_RETURNED",
"barcode_url":"https://sandbox_reference.png",
"expires_at":0,
"created_at":1538686075,
"parent_id":"cus_2jP5P8huCTWqcTtrn" }]
}}
use Conekta\Api\CustomersApi;
use Conekta\ApiException;
use \Conekta\Configuration;
use Conekta\Model\Customer;
protected static CustomersApi $apiInstance;
$config = Configuration::getDefaultConfiguration()->setAccessToken("key_xxxxxxxxxx");
self::$apiInstance = new CustomersApi(null, $config);
$customer = new Customer([
'name' => 'emilio lopez',
'email' => '[email protected]',
'phone' => '52134659439',
'payment_sources' => [
[
'type' => 'oxxo_recurrent'
]
]
]);
$result = self::$apiInstance->createCustomer($customer);
#Respuesta json de API
{
"livemode":false,
"name":"emilio lopez",
"email":"[email protected]",
"phone":"52134659439",
"id":"cus_2jP5P8huCTWqcTtrn",
"object":"customer",
"created_at":1538686075,
"corporate":false,
"custom_id":"",
"payment_sources":{
"object":"list",
"has_more":false,
"data":[{
"id":"off_ref_2jP5P8huCTWqcTtro",
"object":"payment_source",
"type":"oxxo_recurrent",
"provider":"Oxxo",
"reference":"CUSTOM_REFERENCE_RETURNED",
"barcode":"CUSTOM_REFERENCE_RETURNED",
"barcode_url":"https://sandbox_reference.png",
"expires_at":0,
"created_at":1538686075,
"parent_id":"cus_2jP5P8huCTWqcTtrn"}]
}}
try:
customer = conekta.Customer.create({
"name": "Fulanito",
"email": "[email protected]",
"phone": "+5218181818181",
"payment_sources":[ {
"type": "oxxo_recurrent"
}]
})
except conekta.ConektaError as e:
print e.message
#Respuesta json de API
{
"livemode":false,
"name":"Oxxo recc",
"email":"[email protected]",
"phone":"52134659439",
"id":"cus_2jP5P8huCTWqcTtrn",
"object":"customer",
"created_at":1538686075,
"corporate":false,
"custom_id":"",
"payment_sources":{
"object":"list",
"has_more":false,
"total":1,
"data":[{
"id":"off_ref_2jP5P8huCTWqcTtro",
"object":"payment_source",
"type":"oxxo_recurrent",
"provider":"Oxxo",
"reference":"CUSTOM_REFERENCE_RETURNED",
"barcode":"CUSTOM_REFERENCE_RETURNED",
"barcode_url":"https://sandbox_reference.png",
"expires_at":0,
"created_at":1538686075,
"parent_id":"cus_2jP5P8huCTWqcTtrn"}]
}}
customer = conekta.Customer.create({
"name": "Fulanito",
"email": "[email protected]",
"phone": "+5218181818181",
"payment_sources":[ {
"type": "oxxo_recurrent"
}]
}, function(err, res) {
console.log(res.toObject());
});
//Respuesta json de API
{
"livemode":false,
"name":"Oxxo recc",
"email":"[email protected]",
"phone":"52134659439",
"id":"cus_2jP5P8huCTWqcTtrn",
"object":"customer",
"created_at":1538686075,
"corporate":false,
"custom_id":"",
"payment_sources":{
"object":"list",
"has_more":false,
"total":1,
"data":[{
"id":"off_ref_2jP5P8huCTWqcTtro",
"object":"payment_source",
"type":"oxxo_recurrent",
"provider":"Oxxo",
"reference":"CUSTOM_REFERENCE_RETURNED",
"barcode":"CUSTOM_REFERENCE_RETURNED",
"barcode_url":"https://sandbox_reference.png",
"expires_at":0,
"created_at":1538686075,
"parent_id":"cus_2jP5P8huCTWqcTtrn"}]
}}
try{
Customer customer = Customer.create(
new JSONObject("{"
+ "'name': 'Fulanito',"
+ "'email': '[email protected]',"
+ "'phone': '+5218181818181',"
+ "'payment_sources':[ {"
+ "'type': 'oxxo_recurrent',"
+ "}]"
+ "}"
)
);
}catch (Conekta::Error e) {
System.out.println(e.details.get(0).message);
}
//Respuesta json de API
{
"livemode":false,
"name":"Oxxo recc",
"email":"[email protected]",
"phone":"52134659439",
"id":"cus_2jP5P8huCTWqcTtrn",
"object":"customer",
"created_at":1538686075,
"corporate":false,
"custom_id":"",
"payment_sources":{
"object":"list",
"has_more":false,
"total":1,
"data":[{
"id":"off_ref_2jP5P8huCTWqcTtro",
"object":"payment_source",
"type":"oxxo_recurrent",
"provider":"Oxxo",
"reference":"CUSTOM_REFERENCE_RETURNED",
"barcode":"CUSTOM_REFERENCE_RETURNED",
"barcode_url":"https://sandbox_reference.png",
"expires_at":0,
"created_at":1538686075,
"parent_id":"cus_2jP5P8huCTWqcTtrn"}]
}}
try{
conekta.Customer customer = new conekta.Customer ().create(@"{
""name"": ""Fulanito"",
""email"": ""[email protected]"",
""phone"": ""+5218181818181"",
""payment_sources"": [{
""type"": ""oxxo_recurrent"",
}]
}");
} catch (ConektaException e) {
foreach (JObject obj in e.details) {
System.Console.WriteLine("\n [ERROR]:\n");
System.Console.WriteLine("message:\t" + obj.GetValue("message"));
System.Console.WriteLine("debug:\t" + obj.GetValue("debug_message"));
System.Console.WriteLine("code:\t" + obj.GetValue("code"));
}
}
//Respuesta json de API
{
"livemode":false,
"name":"Oxxo recc",
"email":"[email protected]",
"phone":"52134659439",
"id":"cus_2jP5P8huCTWqcTtrn",
"object":"customer",
"created_at":1538686075,
"corporate":false,
"custom_id":"",
"payment_sources":{
"object":"list",
"has_more":false,
"total":1,
"data":[{
"id":"off_ref_2jP5P8huCTWqcTtro",
"object":"payment_source",
"type":"oxxo_recurrent",
"provider":"Oxxo",
"reference":"CUSTOM_REFERENCE_RETURNED",
"barcode":"CUSTOM_REFERENCE_RETURNED",
"barcode_url":"https://sandbox_reference.png",
"expires_at":0,
"created_at":1538686075,
"parent_id":"cus_2jP5P8huCTWqcTtrn"}]
}}
payment := &conekta.PaymentSourceCreateParams{
PaymentType: "oxxo_recurrent",
}
cus := &conekta.CustomerParams{}
cus.Name = "fulanito"
cus.Email = "[email protected]"
cus.Phone = "+5215555555555"
cus.PaymentSources = append(cus.PaymentSources, payment)
res, err := customer.Create(cus)
//Respuesta de API
{
"livemode":false,
"name":"Oxxo recc",
"email":"[email protected]",
"phone":"52134659439",
"id":"cus_2jP5P8huCTWqcTtrn",
"object":"customer",
"created_at":1538686075,
"corporate":false,
"custom_id":"",
"payment_sources":{
"object":"list",
"has_more":false,
"total":1,
"data":[{
"id":"off_ref_2jP5P8huCTWqcTtro",
"object":"payment_source",
"type":"oxxo_recurrent",
"provider":"Oxxo",
"reference":"CUSTOM_REFERENCE_RETURNED",
"barcode":"CUSTOM_REFERENCE_RETURNED",
"barcode_url":"https://sandbox_reference.png",
"expires_at":0,
"created_at":1538686075,
"parent_id":"cus_2jP5P8huCTWqcTtrn"}]
}}
Parámetros Opcionales
Parámetro | Descripción | Tipo |
---|---|---|
payment_sources.expires_at | Fecha de expiración (Es la hora medida en número de segundos en formato UNIX) | Int |
Presentar la ficha de pago
La siguiente ficha, es una forma sugerida para mostrar a tus clientes la referencia de pago en efectivo con la información más relevante, además de presentar los pasos necesarios para completar el proceso en el punto de venta elegido.
Recomendamos que la incluyas en tu Checkout o enviarla por algún medio de comunicación para mejorar la experiencia con tu cliente.
- Ficha de pago para Red Alterna
Servicio de Notificaciones
Conekta dispone de un servicio de notificaciones a usuario final que se activarán por default enviando mails a la dirección de correo del customer del cargo asociado de pago en efectivo.
*Notificaciones que se envían: **
Notificación | Descripción | Vía |
---|---|---|
Pago exitoso | Cuando el usuario final ha pagado la referencia en cualquier tienda de conveniencia del país |
Ejemplo de ficha con Pago exitoso en Efectivo
En este link puedes descargar los logos de nuestra Red de Efectivo.
3. Crea un Webhook
Recuerda que Conekta debe estar en constante comunicación con tu sitio a través de Webhooks para:
1) Validar que la referencia del usuario sea correcta y pueda hacer pagos
2) Aprobar la cantidad que el usuario quiere pagar
3) Notificar un pago
Un “Webhook” es un sistema de notificaciones, donde tu sitio debe definir una dirección o URL, para que nuestra API mande peticiones HTTP y pueda notificarte de los eventos que se van a realizar en tu sitio. Por ello, deberás crear un “Webhook” desde tu perfil de administrador con los siguientes pasos:
Abre el menú principal de tu cuenta, ubicado en la esquina superior derecha, y selecciona la sección “Webhooks”.
3.1 Crear un Webhook Sincrónico para Aprobar Pagos
En el caso de pagos recurrentes, vas a recibir eventos especiales para poder aprobar o declinar los pagos de forma dinámica. Estas peticiones te van a llegar en tiempo real y tienes un máximo de dos segundos para contestarlas o se va declinar el pago. En el Perfil de Administrador abre el menú principal de tu cuenta, ubicado en la esquina superior derecha, y selecciona Webhooks
Selecciona la opción “Crear Webhook” al presionarlo se abrirá una ventana con un formulario en donde deberás colocar la dirección o URL del “Webhook” donde deseas recibir las notificaciones de los pagos recurrentes en efectivo con Conekta, selecciona la casilla de "Usar para Pago en Efectivo Recurrente" y da clic en “Crear”.
Ya estás listo para recibir pagos recurrentes desde tu sitio.
3.2 Crea un Webhook asincrónico para recibir notificaciones de pagos
Adicional al primer Webhook, tendrías que armar endpoint para escuchar notificaciones asincrónicas de pago. A diferencia de las notificaciones anteriores, Conekta va reintentar las notificaciones en caso de que fallen y vas a recibir mayor carga de otras notificaciones por eso que es importante ocupar otro endpoint.
Cuando creas este Webhook, no tendrías que indicar que es para pagos recurrentes.
4. Responder a Webhooks
A diferencia de métodos de pago en línea, como tarjetas, los usuarios tienen que realizar acciones offline para hacer pagos en efectivo así que flujo es asincrónico y el procesamiento y seguridad de notificaciones es fundamental para tu flujo.
4.1 Responder a Consultas
El primer evento, es una notificación sincrónica de consulta y con el tipo de evento: inbound_payment.lookup
.
{
"data":{
"object": {
"payment_method": {
"service_name": "Cash",
"barcode_url": "https://barcode/url.png",
"object": "cash_payment",
"type": "cash",
"expires_at": 1541289600,
"reference": "8400003726321"
},
"charge_id": "5bb675388a268e0ef4a56a42",
"livemode": true,
"created_at": 0,
"object": "inbound_payment",
"amount": 0,
"currency": "MXN",
"customer_id": "cus_2jP5P8huCTWqcTtrn"
},
"previous_attributes": {}
},
"livemode": true,
"webhook_status": "not_applicable",
"webhook_logs": [],
"id": "5b438f82583eb80d50b4652c",
"object": "event",
"type": "inbound_payment.lookup",
"created_at": 1531154306
}
Para aprobar el pago tendrías que contestar en JSON, indicar que payable es true, y el rango de cantidades en centavos.
{
"payable": true,
"min_amount": 5000,
"max_amount": 1000000
}
En caso que quieras declinar un pago, puedes indicar payable: false y un código de rechazo. Puedes consultar la lista completa de códigos de rechazo al final del tutorial.
{
"payable": false,
"failure_code": "15"
}
4.2 Responder a confirmaciones de Pago
La segunda notificación a responder, es una notificación sincrónica de confirmación del monto que se está intentando pagar y con el tipo de evento: inbound_payment.payment_attempt
.
{
"data": {
"object": {
"payment_method": {
"service_name":"Cash",
"barcode_url": "https://s3.amazonaws.com/cash_payment_barcodes/84000045432316.png",
"object": "cash_payment",
"type": "cash",
"expires_at": 1541289600,
"reference": "84000045432316"
},
"charge_id": "5bb6755d8a268e0ed9a56acb", "livemode": true,
"created_at": 1538684253,
"object": "inbound_payment",
"amount": 110700,
"currency": "MXN",
"customer_id": "cus_2jHUgfTB4pYmjmHpB"
},
"previous_attributes": {}
},
"livemode": true,
"webhook_status": "not_applicable",
"webhook_logs": [],
"id": "5b439072583eb80d50b46534",
"object": "event",
"type": "inbound_payment.payment_attempt",
"created_at": 1531154546
}
Para aprobar el pago tendrías que contestar en JSON, indicando nuevamente que payable es true
{
"payable": true
}
En caso que quieras declinar un pago, puedes indicar payable: false y un código de rechazo. Puedes consultar la lista completa de códigos de rechazo al fin del tutorial.
{
"payable": false,
"failure_code": "15"
}
5. Recibir confirmaciones de pago
La última notificación a recibir es una notificación asincrónica de pago con el tipo de evento: charge.paid
. Para incrementar la seguridad es importante verificar la firma de notificaciones. El siguiente ejemplo pertenece a una notificación de pago:
{
"data": {
"object": {
"id": "5c0968098a268e02ab8aa3f7",
"livemode": true,
"created_at": 1544120329,
"currency": "MXN",
"description": null,
"reference_id": null,
"failure_code": null,
"failure_message": null,
"monthly_installments": null,
"device_fingerprint": null,
"refunds": [],
"payment_method": {
"barcode": "XXXXXXXXX",
"reference": "XXXXXXXXX",
"barcode_url": "https://s3.amazonaws.com/cash_payment_barcodes/XXXXXXXXX.png",
"object": "cash_payment",
"type": "cash",
"expires_at": 1546732800,
"store_name": "XXXX"
},
"details": {
"name": "Juan Perez",
"phone": null,
"email": "[email protected]",
"line_items": [],
"coupons": [],
"object": "details"
},
"object": "charge",
"status": "paid",
"amount": 350000,
"paid_at": 1544120362,
"fee": 10150,
"customer_id": "cus_2j35ehQaF1jZEcWH7",
"subscription_id": "",
"amount_refunded": null
},
"previous_attributes": {}
},
"livemode": true,
"webhook_status": "not_applicable",
"webhook_logs": [],
"id": "5b439072583eb80d50b46534",
"object": "event",
"type": "charge.paid",
"created_at": 1531154546
}
6. Flujos de prueba
Tienes disponibles endpoints para que para que puedas probar el flujo de pagos end-to-end antes de hacer pruebas. Recuerda que todo se puede probar apuntando al endpoint de https://api.conekta.io/payment_test
Para comenzar a probar los flujos de cash de prueba tienes que habilitar tu negocio en modo pruebas
6.1 Pruebas de Consultas
El siguiente payload va lanzar la notificación a tu endpoint de consulta.
{
"event_type": "inbound_payment.lookup",
"reference": "99000000001273"
}
Por ejemplo
curl --request POST \
--url https://api.conekta.io/payment_test \
--header 'accept: application/vnd.conekta-v2.1.0+json' \
-u YOUR_PRIVATE_SANDBOX_API_KEY: \
--header 'content-type: application/json' \
--data '{ "event_type": "inbound_payment.lookup", "reference": "99000000001273" }'
Ejemplo de payload enviado de conekta hacia tu webhook
{
"payment_method": {
"service_name": "Cash",
"barcode_url": "https://pt-common-s3-stg.s3.amazonaws.com/sandbox_reference.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIA3UN6375MIKAOP76P%2F20230117%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230117T183958Z&X-Amz-Expires=604800&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEOH%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJGMEQCICVeQsIp9oYvDauuFkY8azy0bMpxsdhsfrcaULit%2F4yPAiBdfbplAeqSyL5GXd8ubThfA8RAp8XypUp35KFUJ1AyuyqHBAhKEAIaDDc5OTgwMTA4MTY4OCIM8wOft8jWMYptw4%2BgKuQDz3IeMqxTGegEhrdYFh5m7l3h78fNDmKEyLf0WMI8bMpyPqbawcHgMH%2BA4y1lyGf0Yl4fesf8UDpMTArrOHAdBCDlZrAANWEcVDn8TA36%2FE8FWR61qPWF4eD8aHtNuVi4fi4OGlPjYdneV4lTCwXjIWJdOa8YpeL%2FZzN9StQdCM85jaKgcrG6t7gjRhWmPoGDg5KRZI4KbBeX5UhCo%2BvRa6Dmh8I4Dv8nqUlv358pOfByl%2B%2FOf0YldPGcSXhDVCcP1jR%2FJSSPtty5xNGSD%2FItvXEuPcSkoFbetHUWJ1NToehuBSz6G9p6WkD%2BaenqxWWwEgoDETB7Ky8BrXvH8zo7Pd3d1EYgkceB153uPJ58rx99k%2FJBkD%2FHfVx6zLJshpYoktMmqg69Fdf%2B7FVcAxWs9fuy9DHX2HGpu81p2wGVr3PreNLoNkXYYekGkhQGmZc31SfxAndzral2IoWGyTH8lrmmPISd5Df0SdwN1iRaqs3amSb0CKlf9v0Nreh3m09gT7iXB2zJQI350CPUVcJFCy%2FKmqwZImjmgvSSnViFb9D%2BT%2BDBXGINJ15hMQsooZmPt%2BHRNDwzXiRhFGnVO%2BhC1EEuDHtCH7qk8cW3Awi3pLNy8u8Y%2FS3%2FbqfgyxMAoxhBukUO8zCUpJueBjqmAf5YMr2HN9bPotGjAz%2FMdag%2BbxQvvqiQSIInhLsAahD40A6S86xjqLI68v2A3HxCHm%2Fn1aZA78Lf3kxeqAoQ4PhdXJL5kJCu2qBI4elYZb5kO4d9eZg4OSpsUAfA99%2FidsGwEr9fAJ9TpEZe4A0CV4pEblHjDsE6kZnrWmjgf3m0y%2BU2pq5EtUa4Yb4JYvSIBwf4tpUkOZ0LTP5gzYOlp05MrwVXJ1o%3D&X-Amz-SignedHeaders=host&X-Amz-Signature=f73dfc292d77d11fd698e86700f3b8528b0cff3c695c279fa7cc5e2a826f195a",
"object": "cash_payment",
"type": "cash",
"expires_at": 1676592000,
"reference": "33300000001256"
},
"charge_id": "63c6eb7ee24e880001b5ab2e",
"livemode": false,
"created_at": 0,
"object": "inbound_payment",
"amount": 0,
"currency": "MXN",
"fee": 143144,
"customer_id": "cus_2tD12wMqvpRGTgK9i"
}
6.2 Pruebas de confirmaciones de pago
El siguiente payload te enviará una notificación de confirmación de pago a tu Webhook.
{
"event_type": "inbound_payment.payment_attempt",
"reference": "99000000001273",
"amount": "10000"
}
Por ejemplo
curl --request POST \
--url https://api.conekta.io/payment_test \
--header 'accept: application/vnd.conekta-v2.1.0+json' \
-u YOUR_PRIVATE_SANDBOX_API_KEY: \
--header 'content-type: application/json' \
--data '{ "event_type": "inbound_payment.payment_attempt", "reference": "99000000001273", "amount": "10000" }'
Recibirás el siguiente payload en la petición de conekta hacia tu webhook
{
"payment_method": {
"service_name": "Cash",
"barcode_url": "https://xxxx.s3.amazonaws.com/sandbox_reference.png",
"object": "cash_payment",
"type": "cash",
"expires_at": 1677110400,
"reference": "33300000001274"
},
"charge_id": "63cec65e01b900000132912e",
"livemode": false,
"created_at": 1674495582,
"object": "inbound_payment",
"amount": 20000,
"currency": "MXN",
"fee": 905,
"customer_id": "cus_2tExAUj4NRYiM5Vuq"
}
6.3 Pruebas de reversos de pago
El siguiente payload va lanzar una notificación de reverso de pago a tu Webhook.
{
"event_type": "inbound_payment.reverse",
"reference": "99000000001273"
}
Por ejemplo
curl --request POST \
--url https://api.conekta.io/payment_test \
--header 'accept: application/vnd.conekta-v2.1.0+json' \
-u YOUR_PRIVATE_SANDBOX_API_KEY: \
--header 'content-type: application/json' \
--data '{ "event_type": "inbound_payment.reverse", "reference": "99000000001273" }'
Recibirás los siguientes eventos de conekta hacia tu webhook.
charge.reversed
order.reversed
{
"id": "63cec71b01b9000001329149",
"livemode": false,
"created_at": 1674495771,
"currency": "MXN",
"description": null,
"reference_id": null,
"failure_code": null,
"failure_message": null,
"monthly_installments": null,
"device_fingerprint": null,
"channel": null,
"refunds": [],
"payment_method": {
"barcode": "33300000001276",
"reference": "33300000001276",
"barcode_url": "https://xxxx.s3.amazonaws.com/sandbox_reference.png",
"store": null,
"auth_code": 66685306,
"object": "cash_payment",
"type": "cash",
"expires_at": 1677110400,
"store_name": "XXXX"
},
"details": {
"name": "Jorge",
"phone": "8181818181",
"email": "[email protected]",
"line_items": [],
"coupons": [],
"object": "details"
},
"object": "charge",
"status": "reversed",
"amount": 20000,
"paid_at": null,
"fee": 905,
"customer_id": "cus_2tExCqJdhJgj33GYr",
"subscription_id": "",
"amount_refunded": null,
"customer_custom_reference": null
}
{
"livemode": false,
"amount": 20000,
"currency": "MXN",
"payment_status": "reversed",
"amount_refunded": 0,
"customer_info": {
"email": "[email protected]",
"phone": "818181818181",
"name": "Jorge",
"corporate": false,
"customer_id": "cus_2tExCqJdhJgj33GYr",
"object": "customer_info"
},
"object": "order",
"id": "ord_2tExCzuHTu1AAYtvL",
"metadata": {},
"is_refundable": false,
"created_at": 1674495771,
"updated_at": 1674495771,
"charges": {
"object": "list",
"has_more": false,
"total": 1,
"data": [
{
"id": "63cec71b01b9000001329149",
"livemode": false,
"created_at": 1674495771,
"currency": "MXN",
"payment_method": {
"service_name": "Cash",
"barcode_url": "https://xxxx.s3.amazonaws.com/sandbox_reference.png",
"auth_code": 66685306,
"object": "cash_payment",
"type": "cash",
"expires_at": 1677110400,
"store_name": "XXXX",
"reference": "33300000001276"
},
"object": "charge",
"status": "reversed",
"amount": 20000,
"fee": 905,
"customer_id": "cus_2tExCqJdhJgj33GYr",
"order_id": "ord_2tExCzuHTu1AAYtvL"
}
]
}
}
Códigos de rechazo
Te compartimos los siguientes códigos de rechazo para que puedes comunicar fallas a tus clientes en cajero
failure_code | Descripción |
---|---|
01 | Referencia no encontrada |
02 | Cantidad inválida |
03 | Referencia expirada |
10 | Referencia sin deuda |
13 | Referencia inactiva |
14 | Referencia cancelada |
15 | Usuario bloqueado |
16 | Cantidad no permitida |
18 | Comercio fuera de horario |
19 | No autorizado |
35 | Monto fuera del rango permitido |
36 | Referencia ya pagada |
Updated 4 months ago