Skip to content

CoDi®. payments

The objective of this guide is to explain step by step how to generate payment referrals with CoDi®.

CoDi® is a platform developed by Banco de México to facilitate payment and collection transactions through electronic transfers in a fast, safe and efficient way, through smartphones.

CoDi® uses QR codes, which are free-to-use two-dimensional codes, and push notifications, which are notifications that arrive directly to the recipient's phone, that are easy to implement and read by any smartphone.

For more information see the CoDi® official site.

Dynamic QR charges

Below is the flow to generate charges with dynamic QR codes. Dynamic QR codes allow your customer to record the amount to pay. Your bank account details are fixed and cannot be modified by your client.

 

 

Steps:

  1. The merchant requests the generation of a dynamic QR code to make a payment.
  2. From the Openpay api the QR code is returned.
  3. The store exposes the QR code by the means of its choice (printed, screen at checkout, etc.) so that the buyer can make the payment
  4. The buyer scans the code from his bank's app and records the amount to pay.
  5. The customer confirms the payment from his bank's banking application.
  6. The customer's bank sends the payment notification to Banxico.
  7. Banxico notifies Openpay payment.
  8. Openpay confirms the payment to the merchant.

Generate dynamic QR code for Merchant (Step 1 and 2)

To generate a dynamic QR code it is necessary to create a charge indicating in the method field method the type ​codi and the option codi_options with the attribute mode the value QR_CODE as follows:

<?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);
?>

At the time the charge is created, a transaction object is returned.

Response:

 

{
    "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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"
}

 

With this QR code, your customer can make the payment by scanning it from their bank's mobile app.

Generate dynamic QR code for Customer (Step 1 and 2)

To generate a dynamic QR code it is necessary to create a charge indicating in the method field method the type ​codi and the option codi_options with the attribute mode the value QR_CODE as follows:

<?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);
?>

At the time the charge is created, a transaction object is returned.

Response:

 

{
    "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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"
}

 

With this QR code, your customer can make the payment by scanning it from their bank's mobile app.

Charges with static QR

To generate a dynamic QR code it is necessary to create a charge indicating in the method field the type codi and the option codi_options with the attribute mode the value QR_CODE as follows:

 

 

Steps:

  1. The store requests the generation of a static QR code to make a payment.
  2. From the Openpay api the QR code is returned.
  3. The store exposes the QR code by the means of its choice (printed, screen at checkout, etc.) so that the buyer can make the payment
  4. The buyer scans the code from their bank's app.
  5. The customer confirms the payment from his bank's banking application.
  6. The customer's bank sends the payment notification to Banxico.
  7. Banxico notifies Openpay payment.
  8. Openpay confirms the payment to the merchant.

Generate static QR code (Step 1 and 2)

To generate a dynamic QR code it is necessary to create a charge indicating in the field method the typecodi and the option codi_options with the attribute mode the value QR_CODE as follows:

<?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);
?>

When the position is created, a json object will be returned.

Response:

 

{
    "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"
}

 

With this QR code, your customer can make the payment by scanning it from their bank's mobile app.

Payment notification

Below is the flow for the generation of charges for payment notification.

 

 

Steps:

  1. The user requests the merchant to make the payment request.
  2. The merchant requests Openpay to make the payment request to Banxico.
  3. Banxico makes the payment request to the corresponding bank.
  4. The bank to which the user's account belongs makes the payment request to the customer and requests confirmation.
  5. The client authorizes or declines the charge requested by the bank.


In this guide we will see steps number 1 and 2.

Payment Notification Sending (Step 1 and 2)

To make a payment notification notification it is necessary to create a charge indicating in the field method the typecodi and the option codi_options with the following attributes mode the value PUSH_NOTIFICATION, use_customer_phone the value false, phone_number the customer phone number, as follows:

<?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);
?>

When the position is created, a json object will be returned.

Response:

 

{
    "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"
}

 

With this payment notification, your customer can make the payment from their bank's mobile app.