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ámetroDescripciónTipo
payment_sources.expires_atFecha 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.


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ónDescripciónVía
Pago exitosoCuando el usuario final ha pagado la referencia en cualquier tienda de conveniencia del paísEmail

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​

201

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

1280

Modo pruebas - Mi negocio

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_codeDescripción
01Referencia no encontrada
02Cantidad inválida
03Referencia expirada
10Referencia sin deuda
13Referencia inactiva
14Referencia cancelada
15Usuario bloqueado
16Cantidad no permitida
18Comercio fuera de horario
19No autorizado
35Monto fuera del rango permitido
36Referencia ya pagada