ebethus/bbvasdk

这是一个在bbva.com实现Bbva支付服务的客户端

dev-master 2020-10-13 22:51 UTC

This package is auto-updated.

Last update: 2024-09-14 07:09:54 UTC


README

Bbva PHP

Bbva API服务(版本1.0.0)的PHP客户端

这是一个在bbva.mx实现Bbva支付服务的客户端

有什么新功能?

兼容性

PHP 5.2 或更高版本

要求

PHP 5.2 或更高版本的cURL扩展,PHP JSON扩展,PHP多字节字符串扩展

安装

Composer

首选方法是通过 composer。如果您尚未安装composer,请遵循 安装说明

一旦安装了composer,请在您的项目根目录中执行以下命令来安装此库

composer require bbva/sdk dev-master

最后,务必包含自动加载器

require_once '/path/to/your-project/vendor/autoload.php';

手动安装

要安装,只需

  • 克隆存储库或下载库,并在您的项目文件夹结构中创建一个名为 'Bbva' 的文件夹。如果您将客户端库作为压缩文件下载,请解压缩它并创建适当的文件夹结构。
  • 在将客户端库用于的PHP脚本顶部(或在包含其他库的部分),添加客户端库的主要脚本
require(dirname(__FILE__) . '/Bbva/Bbva.php');

注意:在上述示例中,库位于名为Bbva的目录中,位于包含客户端的PHP文件相同的目录中。请确保调整您项目中的路径,否则库将无法工作。

实现

配置

在使用库之前,将需要设置您的商户ID和私钥。有三个选项

  • 使用方法 Bbva::setId()Bbva::setApiKey()。只需将适当的参数传递给每个函数即可
Bbva::setId('moiep6umtcnanql3jrxp');
Bbva::setApiKey('sk_3433941e467c4875b178ce26348b0fac');
  • 将商户ID和私钥作为参数传递给方法 Bbva::getInstance(),这是一个实例生成器
$bbva = Bbva::getInstance('moiep6umtcnanql3jrxp', 'sk_3433941e467c4875b178ce26348b0fac');
  • 同时配置商户ID和私钥,以及作为环境变量。这种方法有其自身的优点,因为敏感数据不会直接在任何脚本中暴露。

注意:请参阅PHP文档以获取有关此方法的更多信息。

沙盒/生产模式

为了方便和安全,客户端库默认激活沙盒模式。这允许您在实施Bbva时测试自己的代码,而无需在生产环境中对任何信用卡进行收费。一旦完成集成,请使用方法 Bbva::setProductionMode(FLAG) 以激活/停用沙盒模式。

Bbva::setProductionMode(true);

您还可以使用环境变量为此目的

SetEnv BBVA_PRODUCTION_MODE true

如果需要,您可以使用方法 Bbva::getProductionMode() 在任何时候确定沙盒模式的状态

// will return TRUE/FALSE, depending on if sandbox mode is activated or not.
Bbva::getProductionMode(); 

PHP客户端库简介

配置库后,您可以将其用于与Bbva API服务交互。第一步是使用生成器获取一个实例

$bbva = Bbva::getInstance('mptdggroasfcmqs8plpy', 'sk_326c6d0443f6457aae29ffbd48f7d1be');

在这个示例中,$bbva 将是商户(根)的一个实例,它将被用来调用任何派生子资源。根据当前版本的Bbva API,这些资源包括

  • 费用
  • 令牌

您可以通过根实例的公共变量访问所有这些资源,因此,如果您想添加新客户,可以像以下这样做

$bbva->tokens->add(PARAMETERS);

每次调用任何资源都将返回该资源的一个实例。在上面的例子中,调用资源 tokens 中的 add() 方法将返回一个 Token 实例,调用资源 tokens 中的 add() 方法将返回一个 Card 实例,依此类推。唯一的例外情况是使用 getList() 方法检索资源列表时,在这种情况下将返回一个实例数组。

// a SINGLE instance of Customer will be returned
$charge = $bbva->charges->add(PARAMETERS);


// an ARRAY of instances of Customers will be returned
chargersList = $bbva->charges->getList(PARAMETERS);

另一方面,根据 Bbva API 文档,由 Charge 衍生的资源是

  • 费用
  • 令牌

参数

接收多个参数的方法(例如,尝试添加新客户或新客户的卡)必须作为关联数组传递

array('PARAMETER_INTEGER' => VALUE,
      'PARAMETER_STRING'  => 'VALUE');
      'PARAMETER_DERIVED' => array('PARAMETER_INTEGER' => VALUE), 
                                   'PARAMETER_STRING'  => 'VALUE'));

注意:请参阅 Bbva API 文档以确定每个情况下接受的参数、必须的参数以及哪些是可选的。

错误处理

Bbva API 根据情况生成多种类型的错误,为了处理这种情况,PHP 客户端实现了五种类型的异常

  • BbvaApiTransactionError。此类包含在交易未成功完成时发生的错误:被拒绝的卡、资金不足、目标账户不活跃等。
  • BbvaApiRequestError。它指的是当 API 请求失败时产生的错误。例如:数据请求格式无效、请求参数不正确、Bbva 内部服务器错误等。
  • BbvaApiConnectionError。这些异常是在库尝试连接到 API 但连接失败时生成的。例如:超时、域名服务器等。
  • BbvaApiAuthError。这些错误是在认证数据以无效格式指定或在没有完全在 Bbva 服务器上验证(商户 ID 或私钥)时生成的。
  • BbvaApiError。此类包含在处理客户端库时发生的所有通用错误。

所有这些错误异常都通过以下方法提供了 Bbva API 返回的所有信息

  • getDescription():由 Bbva 服务器生成的错误描述。
  • getErrorCode():由 Bbva 服务器生成的错误代码。当错误在请求之前生成时,此值等于零。
  • getCategory():由 Bbva 服务器生成并由其确定的错误类别。当错误在请求之前或请求过程中生成时,此值是一个空字符串。
  • getHttpCode():请求 Bbva 服务器时生成的 HTTP 错误代码。当错误在请求之前或请求过程中生成时,此值等于零。
  • getRequestId():Bbva 服务器在处理请求时生成的 ID。当错误在请求之前生成时,此值是一个空字符串。

以下是一个更完整的错误捕获示例

try {
	Bbva::setProductionMode(true);
	
	// the following line will generate an error because the
	// private key is empty. The exception generated will be
	// a BbvaApiAuthError
	$bbva = Bbva::getInstance('mptdggroasfcmqs8plpy', '');

	$customer = $bbva->customers->get('a9ualumwnrcxkl42l6mh');
 	$customer->name = 'Juan';
 	$customer->last_name = 'Godinez';
 	$customer->save();

} catch (BbvaApiTransactionError $e) {
	error_log('ERROR on the transaction: ' . $e->getMessage() . 
	      ' [error code: ' . $e->getErrorCode() . 
	      ', error category: ' . $e->getCategory() . 
	      ', HTTP code: '. $e->getHttpCode() . 
	      ', request ID: ' . $e->getRequestId() . ']', 0);

} catch (BbvaApiRequestError $e) {
	error_log('ERROR on the request: ' . $e->getMessage(), 0);

} catch (BbvaApiConnectionError $e) {
	error_log('ERROR while connecting to the API: ' . $e->getMessage(), 0);

} catch (BbvaApiAuthError $e) {
	error_log('ERROR on the authentication: ' . $e->getMessage(), 0);
	
} catch (BbvaApiError $e) {
	error_log('ERROR on the API: ' . $e->getMessage(), 0);
	
} catch (Exception $e) {
	error_log('Error on the script: ' . $e->getMessage(), 0);
}

示例

客户

向商户添加新客户

$bbva = Bbva::getInstance('mptdggroasfcmqs8plpy', 'sk_326c6d0443f6457aae29ffbd48f7d1be');

$customerData = array(
	'name' => 'Teofilo',
	'last_name' => 'Velazco',
	'email' => 'teofilo@payments.com',
	'phone_number' => '4421112233',
	'address' => array(
			'line1' => 'Privada Rio No. 12',
			'line2' => 'Co. El Tintero',
			'line3' => '',
			'postal_code' => '76920',
			'state' => 'Querétaro',
			'city' => 'Querétaro.',
			'country_code' => 'MX'));

令牌

在商户处

添加令牌

$bbva = Bbva::getInstance('mptdggroasfcmqs8plpy', 'sk_326c6d0443f6457aae29ffbd48f7d1be');

$tokenData = array(
	'holder_name' => 'Luis Pérez',
	'card_number' => '4111111111111111',
	'cvv2' => '123',
	'expiration_month' => '12',
	'expiration_year' => '15',
	'address' => array(
		'line1' => 'Av. 5 de Febrero No. 1',
		'line2' => 'Col. Felipe Carrillo Puerto',
		'line3' => 'Zona industrial Carrillo Puerto',
		'postal_code' => '76920',
		'state' => 'Querétaro',
		'city' => 'Querétaro',
		'country_code' => 'MX'));

$token = $bbva->tokens->add($tokenData);

获取令牌

$bbva = Bbva::getInstance('mptdggroasfcmqs8plpy', 'sk_326c6d0443f6457aae29ffbd48f7d1be');

$token = $bbva->tokens->get('k9pn8qtsvr7k7gxoq1r5');

费用

在商户处

对商户进行收费

$bbva = Bbva::getInstance('mptdggroasfcmqs8plpy', 'sk_326c6d0443f6457aae29ffbd48f7d1be');

$chargeData = array(
	'affiliation_bbva' => '781500',
	'amount' => 100,
	'currency' => 'MXN',
	'order_id' => 'ORDEN-00071',
	'customer' => array(
		'name' => 'Teofilo',
		'last_name' => 'Velazco',
		'email' => 'teofilo@payments.com',
		'phone_number' => '4421112233',
		'address' => array(
			'line1' => 'Privada Rio No. 12',
			'line2' => 'Co. El Tintero',
			'line3' => '',
			'postal_code' => '76920',
			'state' => 'Querétaro',
			'city' => 'Querétaro.',
			'country_code' => 'MX')),
	'description' => 'Cargo inicial a mi merchant'
	'redirect_url' => 'https://sand-portal.ecommercebbva.com/'
	);

$charge = $bbva->charges->create($chargeData);

获取费用

$bbva = Bbva::getInstance('mptdggroasfcmqs8plpy', 'sk_326c6d0443f6457aae29ffbd48f7d1be');

$charge = $bbva->charges->get('tvyfwyfooqsmfnaprsuk');

进行捕获

$bbva = Bbva::getInstance('mptdggroasfcmqs8plpy', 'sk_326c6d0443f6457aae29ffbd48f7d1be');

$captureData = array('amount' => 150.00 );

$charge = $bbva->charges->get('tvyfwyfooqsmfnaprsuk');
$charge->capture($captureData);

退款

$bbva = Bbva::getInstance('mptdggroasfcmqs8plpy', 'sk_326c6d0443f6457aae29ffbd48f7d1be');

$refundData = array('description' => 'Devolución' );

$charge = $bbva->charges->get('tvyfwyfooqsmfnaprsuk');
$charge->refund($refundData);