Ejemplos de uso avanzado

Enviar un correo electrónico de cobro

Puedes hacer que Khipu envíe automáticamente un correo electrónico con el cobro que generas. Lo único que necesitas es llenar un par de campos al momento de invocar al método GET /payments:

  • payer_name : Es el nombre de la persona que debe pagar.
  • payer_email : Es la dirección de correo electrónico del pagador.
  • send_email : Si envías true Khipu enviará la solicitud de pago por correo.

Es importante notar algunas cosas:

  • Si send_email es true , los otros campos ( payer_name y payer_email ) serán obligatorios.
  • El contenido del campo body no se envía en el correo electrónico. Solo se despliega en la página de pago.
  • Si además de enviar true en el campo send_email , también envías true en el campo send_reminders , además del correo inicial de cobro, se enviarán otros dos correos de recordatorio con una separación de una semana entre cada uno, siempre y cuando el cobro no haya sido pagado o eliminado al momento de gestionar el recordatorio.

Crear un cobro y distribuirlo usando su URL

Puedes hacer que Khipu cree un link del cobro que generas para ser usado donde quieras. Lo único que necesitas es llenar un par de campos al momento de la creación:

  • payer_name : Es el nombre de la persona que debe pagar.
  • payer_email : Es la dirección de correo electrónico del pagador.
  • send_email : false . (Usar true en caso de que además se quiera enviar un email de Khipu con el cobro.)
  • body : Texto que se desplegará en la página de pago

Es importante notar algunas cosas:

El contenido del campo body no se envía en el correo electrónico. Solo se despliega en la página de pago. Si send_email es true puedes enviar true en el parámetro send_reminders. Al hacer esto, Khipu enviará 2 recordatorios de pago. Uno una semana después del cobro y otro la segunda semana después.

Crear un cobro con fecha de expiración

Muchas veces un cobro solo debe ser válido hasta una fecha en particular, por ejemplo, pagar una entrada a un evento (luego del evento no tiene sentido pagarlo). Para esto podemos especificar una fecha máxima de pago o fecha de expiración. Luego de esta fecha el pago no puede ser cancelado.

La fecha máxima para un pago se envía en el parámetro expires_date. Esta fecha tiene algunas condiciones:

  • Debe ser mayor a la fecha del momento en que se genera el cobro y debe ser menor a ese momento más 10 años.
  • La fecha debe ir en el formato ISO 8601 , por ejemplo puedes aplicar una máscara del tipo yyyy-MM-ddTHH:mm:ss.fffzzz

Aunque no se envíe la fecha de expiración el pago se generará con una. En el caso de que sea una solicitud por correo electrónico (cuando send_email es true) la expiración es 60 días desde el momento de la creación. En caso contrario el plazo es de un día.

Enviar información del comercio para usar en la conciliación

Los cobros en Khipu poseen una variable llamada custom en la cual puedes guardar información de cualquier tipo. Esta información puede ser recuperada en cualquier momento, por ejemplo cuando recibamos la notificación por web service desde Khipu.

Podremos recuperar la información del campo custom utilizando el método GET /payments/{payment_id}.

Eliminar un pago antes que el pagador termine

En algunas ocasiones es necesario borrar un cobro que se ha generado, por ejemplo si nos quedamos sin stock o si encontramos algún problema para entregar el producto/servicio. Para poder borrar un cobro este no debe haber sido pagado o marcado como pagado.

Para borrar un cobro en las condiciones descritas solo necesitaremos su identificador, y utilizar el método DELETE /payments/{payment_id}.

Comercios integradores

Un integrador es un cobrador en Khipu que tiene la capacidad de crear cobradores para sus clientes y cobrar, usando Khipu, para ellos. Por ejemplo, un integrador podría ser una empresa que preste el servicio de tienda online a varios comercios, cada comercio crea una tienda online en ese servicio, usando el mismo servicio crea una cuenta de cobro Khipu y cobra online. El servicio de Khipu permite al comercio final cobrar por sus productos y al integrador cobrar una comisión.

Llamaremos cuenta de cobro hija a cada cuenta de cobro normal que esté asociada a una cuenta de cobro de integrador. Esto es muy importante para cuando debas mandar las credenciales en cada llamada. Las cuentas de cobro adicionales se crean utilizando el método POST /receivers.

Crear una cuenta de cobro hija de integrador

Las cuentas hijas se crean usando una llamada especial. Esta llamada devolverá las credenciales de una nueva cuenta de cobro. Debemos guardar estas credenciales para poder generar cobros a nombre de esta nueva cuenta.

En esta llamada debemos enviar los siguientes datos:

  • Email y nombre del dueño de la cuenta. Si el correo existe en Khipu, se usará el usuario existente. Sí no, se creará un nuevo usuario y se asociará la cuenta a él.
  • País para la cuenta: El país donde operará la cuenta.
  • Datos de facturación: Datos para emitir una boleta o factura.
  • Datos de contacto: Datos para que Khipu pueda ponerse en contacto con el administrador de la cuenta de cobro.

Es muy importante saber que esta cuenta no está lista para cobrar. El proceso de creación envía un e-mail al correo indicado para que el dueño de la cuenta (el dueño del e-mail) pueda completar el proceso de pago. Solo una vez completado este proceso la cuenta podrá comenzar a operar.

Recuerda

La llamada para crear una cuenta de cobro debe ser hecha con las credenciales de la cuenta padre. Las llamadas para generar los cobros deben ser hechas con las credenciales de las cuentas hijas.

Crear un cobro con comisión de integrador es idéntico a crear un cobro normal pero con dos detalles:

  • Se debe enviar el parámetro integrator_fee con el monto que recibirá el integrador. Este monto no pude ser superior al monto original menos la comisión de Khipu.
  • Las credenciales que se usan para la llamada deben ser las credenciales de la cuenta hija. Esto es porque el cobro debe quedar a nombre de esta cuenta.

Modificar el usuario dueño de un cobro

Cada cobro en Khipu tiene asociado un “responsible user” (usuario responsable) que es el dueño del cobro. Él recibe copia de los comprobantes de pago y copia de los recordatorios semanales. Si se está usando la interfaz web de Khipu, el responsable siempre es el que crea el cobro. Si más de una persona tiene acceso a la cuenta de cobro del comercio uno puede especificar usando la API quien es el dueño de cada cobro creado, en el campo responsible_user_email.

Para poder especificar un usuario como dueño de un cobro el usuario debe poder cobrar usando la cuenta del comercio.

Cobro con autenticación

Es posible crear cobros que solo puedan ser pagados usando una cuenta bancaria perteneciente a alguien en particular. Esto se hace especificando el identificador personal del usuario. Por ejemplo una cuenta bancaria en Chile está asociada a un RUT. Si se especifica un RUT en particular para un cobro, este solo podrá ser pagado utilizando una cuenta asociada a ese RUT. El campo para estos efectos es fixed_payer_personal_identifier.

Reembolsar un cobro que no ha sido rendido

Es posible reembolsar el cobro hasta la 1:00 am del día habil siguiente. El cliente recibirá un correo electrónico explicándole que el comercio no ha podido completar la transacción y que los fondos serán devueltos a su cuenta bancaria.

El método para eso es POST /payments/{payment_id}/refunds

Recibiendo y validando notificación de rendición por web service

Khipu permite recibir notificaciones en tu sitio web de manera automática con el detalle de cada rendición realizada hacia la cuenta corriente asociada a tu cuenta de cobro.

Configuración

Para recibir notificaciones primero debes ingresar a tu cuenta Khipu e ir a “Opciones de la cuenta”. En la sección Notificación instantánea de rendiciones debes agregar la URL en donde tu sitio web escuchará las notificaciones y definir la versión de la API de notificaciones que quieres usar (3.0).

Ejemplo en PHP

Las notificaciones de rendición se hacen utilizando un mensaje en estándar JOSE JWS, y ensobrado gzip.

Los mensajes de las notificaciones de rendición se firman con el siguiente certificado.

Descargar el certificado de clave pública

Si estás usando una cuenta de cobro de desarrollo entonces deberás usar el certificado de desarrollo de Khipu.

Descargar el certificado de clave pública (desarrollo)

En este ejemplo se hace uso de la librería Namshi/Jose:

Copy
Copied
<?php
require_once 'vendor/autoload.php';

use NamshiJOSEJWS;

$jws_text=gzdecode($HTTP_RAW_POST_DATA);

$jws=JWS::load($jws_text);

// Leemos el certificado con la clave publica
$filename = 'khipu_signer.pem';
$fp = fopen($filename, "r");
$cert = fread($fp, filesize($filename));
fclose($fp);
$pubkey = openssl_get_publickey($cert);

$payload = $jws->getPayload();

if ($jws->isValid($public_key)) {
/*
   Si la firma del mensaje es valida se puede procesar el mensaje
*/

    $report=$payload['report'];
    $fecha_desde=$report['startDate']; // fecha de inicio de la rendición
    $fecha_hasta=$report['endDate']; //fecha de termino de la rendición
    $report_items=$report['items']; //pagos incluidos en la rendición
    foreach($report_items as $item){
       $customer=$item['customer']; //datos del pagador
       local_process($item['paymentDate'],       //fecha del pago
                     $item['paymentSubject'],    //asunto del pago
                     $item['khOperationCodeUID'],//código único de operación khipu
                     $item['merchantTxID'],      //id de transacción informado por el comercio
                     $item['customer']['customerName'], //nombre del pagador
                     $item['customer']['customerUID'],  //rut del pagador
                     $item['customer']['customerEmail'],//correo electrónico del pagador
                     $item['customer']['customerBankName'], //nombre del banco origen
                     $item['feeScheme'], //esquema de comisión
                     $item['txAmount'],  //monto de la transacción
                     $item['khipuFee']); //comisión khipu
    }
}