Autorizador remoto IVR

La Respuesta de Voz Interactiva o IVR es una tecnología de telefonía que le permite a los clientes interactuar con el sistema de atención de la compañía a través de menús de voz configurables, en tiempo real, utilizando tonos DTMF.

En un sistema IVR, las personas que llaman se les da la posibilidad de ingresar los datos de la tarjeta pulsando las teclas. Al presionar un dígito en el teclado del teléfono se envía un tono DTMF al sistema de atención de la empresa el cual selecciona a continuación la acción/respuesta apropiada de acuerdo con el dígito pulsado.

Ahora tus clientes pueden pagarte con una simple llamada telefónica.

Esta es una forma segura de que tus clientes realizen sus pagos ya que ellos proporcionan sus datos de forma electronica y directa a Openpay.

Cargos con IVR

A continuación se presenta el flujo para crear un cargo por IVR.

  1. El cliente confirma la compra en el sitio web del comercio, seleccionando como medio de pago IVR
  2. Desde el servidor del comercio se crea un código creando un cargo en Openpay

Generar cargo IVR

Para generar un cargo por IVR es necesario crear un cargo indicando en el campo method el tipo ​card y en el atributo confirm el valor ivr de la siguiente manera:

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

$customer = array(
     'name' => $_POST["Juan"],
     'last_name' => $_POST["Urbina"],
     'phone_number' => $_POST["45155352828"],
     'email' => $_POST["juan.test@correo.mx"],);

$chargeData = array(
    'method' => $_POST["card"],
    'confirm' => $_POST["ivr"],
    'order_id' => $_POST["ord-234"],
    'amount' => $_POST["200"], // formato númerico con hasta dos dígitos decimales. 
    'description' => $_POST["CargoIVR"],
    'customer' => $_POST[$customer]
    );

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

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

Respuesta:

 

{
    "id": "trapsxzfv4rxx8dz3lan",
    "authorization": null,
    "operation_type": "in",
    "transaction_type": "charge",
    "status": "charge_pending",
    "conciliated": false,
    "creation_date": "2020-10-16T23:02:46-05:00",
    "operation_date": "2020-10-16T23:02:46-05:00",
    "description": "Cargo IVR",
    "error_message": null,
    "order_id": "ord-234",
    "payment_method": {
        "type": "ivr",
        "phone_number": "525588969143",
        "ivr_key": 257139,
        "attempts": 0
    },
    "amount": 200.00,
    "currency": "MXN",
    "customer": {
        "name": "Juan",
        "last_name": "Urbina",
        "email": "juan.test@correo.mx",
        "phone_number": "45155352828",
        "address": null,
        "creation_date": "2020-10-16T23:02:46-05:00",
        "external_id": null,
        "clabe": null
    },
    "method": "card"
}

 

Con los datos de payment_method, tu cliente puede efectuar el pago con una llamada telefónica.

Flujo de Compra

A continuación se presenta el flujo para realizar la compra con código IVR.

  1. El cliente llama al número de IVR asignado a su negocio e ingresa su clave de pago que le fue proporcionada previamente.
  2. El IVR informa al cliente el monto del cargo y solicita su confirmación para continuar.
  3. El cliente acepta o rechaza el cargo. Sí el cliente acepta el cargo, el IVR solicitará, en pasos separados, los datos de la tarjeta de débito o crédito.
  4. El IVR procesa el cargo mediante el API de Openpay.
  5. El API de Openpay regresa la respuesta al IVR.
  6. EL IVR informa al cliente el resultado del cargo.

Autorizar Cargo IVR con clave de pago

Pasos de flujo

Los pasos para autorizar una clave de pago por IVR mediante un servicio expuesto por tu aplicación son los siguientes:

  1. El cliente llama al número de IVR asignado a tu negocio e ingresa su clave de pago que le fue proporcionada previamente.
  2. El IVR invoca al servicio expuesto por tu servidor para autorizar la clave de pago.
  3. Tu servidor ejecuta la validación de la clave de pago. Sí es válida, regresa el detalle del cargo como el monto, número de orden y descripción. En caso contrario, regresa el código de error correspondiente.
  4. El IVR informa al cliente el monto del cargo y solicita su confirmación para continuar.
  5. El cliente acepta o rechaza el cargo. Sí el cliente acepta el cargo, el IVR solicitará, en pasos separados, los datos de la tarjeta de débito o crédito.
  6. El IVR procesa el cargo mediante el API de Openpay.
  7. El API de Openpay regresa la respuesta al IVR.
  8. EL IVR informa al cliente el resultado del cargo.

Para esto Openpay requiere que implementes un servicio web en tu aplicación para autorizar los pagos de IVR.

Servicio para autorizar pagos de IVR

A continuación se describe el detalle de la petición y respuesta que deberá seguir el servicio expuesto por tu aplicación para autorizar claves de pago de IVR (Pasos 2 y 3).

 Petición enviada por el IVR de Openpay

El IVR de Openpay llamará a este servicio mediante un método HTTP POST, utilizando autenticación HTTP Basic para identificarse. El contenido de la petición será de tipo application/json, codificado en UTF-8.

Ejemplo de la petición HTTP:

 

POST /openpay/authorizer HTTP/1.1
Host: example.com
Authorization: Basic dXNyOnB3ZA==
Content-Type: application/json
Cache-Control: no-cache
{
    "ivr_key": 123456
}

 

Respuesta del servicio

El servicio deberá regresar una respuesta HTTP 200 OK, con un cuerpo de tipo application/json.

Ejemplo de respuesta exitosa:

 

{
  "response_code": 0,
  "amount": 200.00,
  "description": "Cargo IVR",
  "order_id": "ord-234"
}

 

Ejemplo de respuesta fallida:

 

{
  "response_code": 1,
  "description": "Clave de pago inválida"
}

 

En caso de un error en tu aplicación se deberá regresar una respuesta HTTP 4XX o 5XX, según sea el caso.

Consideraciones

Tiempo de comunicación entre Openpay y el Servicio

Openpay esperará 5 segundos por una respuesta de tu servidor y una vez pasado ese tiempo Openpay cancelará la operación.

Comunicación HTTPS

Aunque en el ambiente de Sandbox se permite que el servicio sea HTTP, no olvides que en el ambiente de producción se requiere que el servicio se encuentre disponible mediante HTTPS