为 Tifon 的 Khipu 库 (https://github.com/khipu/lib-php) 定制的 Composer 包,修改后用于个人使用,所有权利归他们所有

1.0.1 2016-08-06 21:00 UTC

This package is auto-updated.

Last update: 2024-09-19 05:58:45 UTC


README

我修改了这个库以供个人使用,增加了使用默认 Phipu 按钮或自定义 URL 或提交类型输入自定义值的选项,并在创建页面时在渲染表单上增加了类选项

库版本:1.3

Khipu API 版本:1.3

用于使用 Khipu.com 服务的 PHP 库

Khipu.com 的文档可以在这里查看:https://khipu.com/page/api

安装:composer

composer require blenderdeluxe/khipu

简介

Khipu API 提供了多项服务,包括

  • 查看 Khipu 账户状态
  • 创建支付按钮
  • 通过邮件创建收费
  • 创建支付 URL
  • 过期收费
  • 查询支付状态
  • 标记支付为已支付
  • 标记支付为拒绝
  • 更新通知版本
  • 获取银行列表

要使用这些服务,必须加载 Khipu.php 文件

一些示例

1) 创建收费并通过邮件发送

创建收费需要识别收费者和收件人。以下是一个示例

<?php
  // ...
  require_once __DIR__ . '/../vendor/autoload.php';
  $khipu = new Khipu();
  // Para usar el servicio para crear cobros y enviarlos por Mail necesitamos
  // identificar al cobrador ya que es requerido para el servicio.
  $khipu->authenticate($receiver_id, $llave);

  // Luego cargamos el servicio.
  $khipu_service = $khipu->loadService('CreateEmail');

  // Preparamos los datos que queremos enviar
  $data = array(
    'subject' => 'Título del pago',
    'body' => 'Descripción del producto',
    'transaction_id' => '1',
    'pay_directly' => 'false',
    // Decimos que envie los correos.
    'send_emails' => 'true',
    // Si contamos con algun sitio, podemos redireccionar al usuario
    // a esta URL una vez que pague.
    'return_url' => '',
    // Le damos un tiempo de expiración.
    'expires_date' => time() + 30 * 10,
    // Opcionalmente podemos asignar una URL de una imagen.
    'picture_url' => '',
  );
  // Recorremos los datos y se lo asignamos al servicio
  foreach($data as $name => $value) {
    $khipu_service->setParameter($name, $value);
  }
  /**
   * En reemplazo de setParameter se podría usar
   * $this->setParameters($data);
   */
  // Agregamos un destinatario con un monto
  $khipu_service->addRecipient('Cliente', 'cliente@gmai.com', 25000);

  // Lo enviamos
  $json = $khipu_service->send();

2) 创建支付页面

创建支付页面也需要进行识别,以下是一个示例

<?php
  // ...
  require_once __DIR__ . '/../vendor/autoload.php';

  $Khipu = new Khipu();
  $Khipu->authenticate($receiver_id, $llave);
  $khipu_service = $Khipu->loadService('CreatePaymentPage');

  $data = array(
    'subject' => 'Título del pago',
    'body' => 'Descripción del producto',
    'amount' => 10000,
    // Página de exito
    'return_url' => $return_url,
    // Página de fracaso
    'cancel_url' => $cancel_url,
    'transaction_id' => 1,
    // Dejar por defecto un correo para recibir el comprobante
    'payer_email' => 'cliente@gmail.com',
    // url de la imagen del producto o servicio
    'picture_url' => $picture_url,
    // Opcional
    'custom' => 'Custom Variable',
    // definimos una url en donde se notificará del pago
    'notify_url' => $notify_url,
  );
  // Recorremos los datos y se lo asignamos al servicio.
  foreach ($data as $name => $value) {
    $khipu_service->setParameter($name, $value);
  }
  // Luego imprimimos el formulario html
  echo $khipu_service->renderForm();

3) 接收和验证支付通知

此服务应在接收 Khipu POST 的页面中使用,无需识别收费者。以下是一个示例

<?php
  // ...
  require_once __DIR__ . '/../vendor/autoload.php';

  $Khipu = new Khipu();
  // No necesitamos identificar al cobrador para usar este servicio.

  $api_version = $_POST['api_version'];

  if($api_version == '1.2') {
	$khipu_service = $Khipu->loadService('VerifyPaymentNotification');
  	$khipu_service->setDataFromPost();
	$response = $khipu_service->verify();
	if($response['response'] == 'VERIFIED'){
		//el pago esta verificado, hacemos algo al respecto
	}

  } else if ($api_version == '1.3') {
	$Khipu->authenticate($receiver_id, $llave);
	$khipu_service = $Khipu->loadService('GetPaymentNotification');
  	$khipu_service->setDataFromPost();
	$response = json_decode($khipu_service->consult());
	
	// validamos que la notificacion de pago corresponda con una solicitud de pago esperada
	if($response->transaction_id == $mi_transaction_id &&  $response->receiver_id == $receiver_id, $response->amount == $mi_amount) {
		// la notificacion esta ok, la estaba esperando y debo procesar el pedido
	} else {
		// la notificacion no es para mi o no la estaba esperando, la ignoro
	}
	

  } else {
	// api de notificacion no soportada
  }

4) 检查 Khipu 账户状态

此服务允许查询 Khipu 账户的状态,返回一个 json,说明其所在环境以及是否可以接收支付。以下是一个示例

<?php
  // ...
  require_once __DIR__ . '/../vendor/autoload.php';
  $Khipu = new Khipu();
  $Khipu->authenticate($receiver_id, $llave);
  $khipu_service = $Khipu->loadService('ReceiverStatus');

  // Aquí se hace la consulta a khipu sobre la cuenta.
  $json = $khipu_service->consult();

在 examples 文件夹中还有其他示例。

附加

Khipu 类有两个静态函数,分别是

getUrlService()

<?php
  // ...
  require_once __DIR__ . '/../vendor/autoload.php';

  // Imprime https://khipu.com/api/1.3/verifyPaymentNotification
  echo Khipu::getUrlService('VerifyPaymentNotification');
?>

此函数接收服务名称,并返回对应的 Khipu URL。

getButtonsKhipu()

<?php
  // ...
  require_once __DIR__ . '/../vendor/autoload.php';

  $buttons = Khipu::getButtonsKhipu();
?>

此函数返回 Khipu.com 按钮的链接列表,您可以在以下位置查看:https://khipu.com/page/botones-de-pago

测试

phpunit src/KhipuTest.php