Pagos con CoDi®

El objetivo de esta guía es explicar paso a paso cómo generar referencias de pago con CoDi®.

CoDi® es una plataforma desarrollada por Banco de México para facilitar las transacciones de pago y cobro a través de transferencias electrónicas de forma rápida, segura y eficiente, a través de teléfonos inteligentes.

CoDi® usa códigos QR, que son códigos bidimensionales de uso libre, y notificaciones push, que son notificaciones que llegan directo al teléfono del destinatario, que son fáciles de implementar y de leer por cualquier teléfono inteligente.

Para mas información consulta el sitio oficial CoDi®.

Cargos con QR dinámico

A continuación se presenta el flujo para generar cargos con códigos QR dinámicos. Los códigos QR dinámicos te permiten que tu cliente registre la cantidad a pagar. Los datos de tu cuenta bancaria están fijos y no los puede modificar tu cliente.

 

 

Pasos:

  1. El comercio solicita la generación de un código QR dinámico para realizar un cobro.
  2. Desde el api de Openpay se regresa el código QR.
  3. El comercio expone el código QR por el medio de su elección (impreso, pantalla en checkout, etcétera) para que el comprador pueda realizar el pago
  4. El comprador escanea el código desde el app de su banco y registra la cantidad a pagar.
  5. El cliente confirma el pago desde la aplicación bancaria de su banco.
  6. El banco del cliente envía la notificación del pago a Banxico.
  7. Banxico notifica pago a Openpay.
  8. Openpay confirma el pago al comercio.

Generar código QR dinámico para Merchant (Paso 1 y 2)

Para generar un código QR es necesario crear un cargo indicando los datos del producto de la siguiente manera:

<?php
$openpay = Openpay::getInstance('mzdtln0bmtms6o3kck8f',
  'sk_e568c42a6c384b7ab02cd47d2e407cab');

$chargeData = array(
    'description' => 'Cargo con código QR dinámico',
    'external_id' => 'codi-00051',
    'due_date' => '2020-07-20T13:45:00'
    );

$charge = $openpay->charges->create($chargeData);
?>

Al momento de crearse el cargo se regresará una objeto json.

Respuesta:

 

{
    "id": 62,
    "amount": null,
    "due_date": "2020-10-20T17:50:00-05:00",
    "description": "Cargo con código QR dinámico",
    "external_id": "12121212",
    "metadata": "{}",
    "barcode": null,
    "barcode_url": "https://dev-api.openpay.mx/codi/open_codes/62/qr_code",
    "barcode_base64": "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"
}

 

​Con este código QR, tu cliente puede efectuar el pago escaneándolo desde la app móvil de su banco.

Generar código QR dinámico para Customer (Paso 1 y 2)

Para generar un código QR es necesario crear un cargo indicando los datos del producto de la siguiente manera:

<?php
$openpay = Openpay::getInstance('mzdtln0bmtms6o3kck8f',
  'sk_e568c42a6c384b7ab02cd47d2e407cab');

$chargeData = array(
    'description' => 'Cargo con código QR dinámico',
    'external_id' => 'codi-00051',
    'due_date' => '2020-07-20T13:45:00'
    );

$charge = $openpay->charges->create($chargeData);
?>

Al momento de crearse el cargo se regresará una objeto json.

Respuesta:

 

{
    "id": 62,
    "amount": null,
    "due_date": "2020-10-20T17:50:00-05:00",
    "description": "Cargo con código QR dinámico",
    "external_id": "12121212",
    "metadata": "{}",
    "barcode": null,
    "barcode_url": "https://dev-api.openpay.mx/codi/open_codes/62/qr_code",
    "barcode_base64": "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"
}

 

​Con este código QR, tu cliente puede efectuar el pago escaneándolo desde la app móvil de su banco.

Cargos con QR estático

A continuación se presenta el flujo para generar cargos con códigos QR estáticos. Los códigos QR estáticos te permiten configurar el monto exacto que deberá pagar tu cliente. Los datos de tu cuenta bancaria están fijos y no pueden ser modificados.

 

 

Pasos:

  1. El comercio solicita la generación de un código QR estático para realizar un cobro.
  2. Desde el api de Openpay se regresa el código QR.
  3. El comercio expone el código QR por el medio de su elección (impreso, pantalla en checkout, etcétera) para que el comprador pueda realizar el pago
  4. El comprador escanea el código desde el app de su banco.
  5. El cliente confirma el pago desde la aplicación bancaria de su banco.
  6. El banco del cliente envía la notificación del pago a Banxico.
  7. Banxico notifica pago a Openpay.
  8. Openpay confirma el pago al comercio.

Generar código QR estático (Paso 1 y 2)

Para generar un código QR dinámico es necesario crear un cargo indicando en el campo method el tipo ​codi y la opcion codi_options con el atributo mode el valor QR_CODE de la siguiente manera:

<?php
$openpay = Openpay::getInstance('mzdtln0bmtms6o3kck8f',
  'sk_e568c42a6c384b7ab02cd47d2e407cab');

$chargeData = array(
    'method' => 'codi',
    'amount' => 200.00,
    'description' => 'Cargo con código QR estático',
    'order_id' => 'codi-00051',
    'due_date' => '2020-12-20T13:45:00',
    'codi_options' => {
          'mode': 'qr_code'
      },
    'customer' => {
      'name': 'Ricardo',
      'last_name': 'Martinez',
      'email': 'this.is.a@customer.test',
      'phone_number': '4421217210'
    }
    );

$charge = $openpay->charges->create($chargeData);
?>

Al momento de crearse el cargo se regresará un objeto json.

Respuesta:

 

{
    "id": "tr47lahm4etz1rqz1nbs",
    "authorization": null,
    "operation_type": "in",
    "transaction_type": "charge",
    "status": "charge_pending",
    "conciliated": false,
    "creation_date": "2020-07-15T16:58:16-05:00",
    "operation_date": "2020-07-15T16:58:16-05:00",
    "description": "Cargo con código QR estático",
    "error_message": null,
    "order_id": "codi-929678",
    "due_date": "2020-07-20T13:45:00-05:00",
    "amount": 200.00,
    "customer": {
        "name": "Ricardo",
        "last_name": "Martinez",
        "email": "this.is.a@customer.test",
        "phone_number": "4421217210",
        "address": null,
        "creation_date": "2020-07-15T16:58:15-05:00",
        "external_id": null,
        "clabe": null
    },
    "payment_method": {
        "type": "codi",
        "barcode_url": "https://dev-api.openpay.mx/codi-qrcode/tr47lahm4etz1rqz1nbs",
        "barcode_base64": "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",
        "mode": "qr_code"
    },
    "currency": "MXN",
    "method": "codi"
}

 

​Con este código QR, tu cliente puede efectuar el pago escaneándolo desde la app movil de su banco.

Notificación de pago

A continuación se presentará el flujo para la generación de cargos por notificación de pago.

 

 

Pasos:

  1. El usuario solicita al comercio que realice la solicitud de pago.
  2. El comercio solicita a Openpay que realice la solicitud de pago a Banxico.
  3. Banxico realiza la solicitud de pago al banco correspondiente .
  4. El banco al que pertenece la cuenta del usuario realiza la solicitud de pago al cliente y solicita la confirmación.
  5. El cliente autoriza o declina el cargo que le solicita el banco.

En esta guía veremos los pasos número 1 y 2.

Envío de Notificación de Pago (Paso 1 y 2)

Para realizar un cobro por notificación de pago es necesario crear un cargo indicando en el campo method el tipo ​codi y la opción codi_options con los siguientes atributos mode el valor PUSH_NOTIFICATION, use_customer_phone el valor false, phone_number el número telefónico de cliente, de la siguiente manera:

<?php
$openpay = Openpay::getInstance('mzdtln0bmtms6o3kck8f',
  'sk_e568c42a6c384b7ab02cd47d2e407cab');

$chargeData = array(
    'method' => 'codi',
    'amount' => 200.00,
    'description' => 'Cargo por Notificación de Pago',
    'order_id' => 'codi-00051',
    'codi_options' => ''
    'due_date' => '2020-12-20T13:45:00',
    'codi_options' => {
          'mode': 'push_notification',
      'use_customer_phone': false,
      'phone_number' : '4421217210'
      },
    'customer' => {
      'name': 'Ricardo',
      'last_name': 'Martinez',
      'email': 'this.is.a@customer.test',
      'phone_number': '4421217210'
    }
    );

$charge = $openpay->charges->create($chargeData);
?>

Al momento de crearse el cargo se regresará un objeto json.

Respuesta:

 

{
    "id": "trs1clzwqweqwznutfmt",
    "authorization": null,
    "operation_type": "in",
    "transaction_type": "charge",
    "status": "charge_pending",
    "conciliated": false,
    "creation_date": "2020-07-15T16:58:33-05:00",
    "operation_date": "2020-07-15T16:58:33-05:00",
    "description": "Cargo por Notificación de Pago",
    "error_message": null,
    "order_id": "codi-121795",
    "due_date": "2020-07-20T13:45:00-05:00",
    "amount": 200.00,
    "customer": {
        "name": "Ricardo",
        "last_name": "Martinez",
        "email": "this.is.a@customer.test",
        "phone_number": "4421217210",
        "address": null,
        "creation_date": "2020-07-15T16:58:33-05:00",
        "external_id": null,
        "clabe": null
    },
    "payment_method": {
        "type": "codi",
        "mode": "push_notification",
        "phone_number": "4421217210"
    },
    "currency": "MXN",
    "method": "codi"
}

 

​Con esta notificación de pago, tu cliente puede efectuar el pago desde la app móvil de su banco.