fei / payment-client
支付 - 客户端组件
Requires
- php: >=5.5
- fei/api-client: ^1.1
- fei/payment-common: ^2.6.0
Requires (Dev)
- codeception/codeception: ^2.2
- jakub-onderka/php-parallel-lint: ^0.9.2
- phpmd/phpmd: ^2.6
- phpro/grumphp: ^0.11.1
- sebastian/phpcpd: ^2.0
- squizlabs/php_codesniffer: ^2.7
This package is auto-updated.
Last update: 2024-09-19 10:02:11 UTC
README
您可以使用此客户端来消费支付服务。
使用此客户端,您可以使用两种传输方式发送请求
- 由
BeanstalkProxyTransport
实现的异步传输 - 由
BasicTransport
实现的同步传输
BeanstalkProxyTransport
通过将支付实体发送到Beanstalkd队列将API消费委托给工作进程。
BasicTransport
使用经典的HTTP层来同步发送支付。
您可以在示例文件夹中找到如何使用支付客户端方法的示例。
安装
付款客户端至少需要PHP 5.5才能正常工作。
将此要求添加到您的composer.json: "fei/payment-client": ": "^1.0"
或在终端中执行composer.phar require fei/payment-client。
如果您想使用付款客户端的异步功能(我们知道您想),则需要一个运行良好的Beanstalkd实例以及一个实例api-client-worker.php,该实例将消费Beanstalk的管道并将消息有效负载转发到支付API
Payer Client -> Beanstalkd -> api-client-worker.php -> Payment API server
Beanstalkd配置
运行Beanstalkd非常简单。然而,您必须注意z选项,该选项设置最大作业(或消息)大小(以字节为单位)。
运行api-client-worker.php
以下是如何运行api-client-worker.php
的示例。
php /path/to/payment-client/vendor/bin/api-client-worker.php --host 127.0.0.1 --port 11300 --delay 3
您可以使用Supervisor来控制api-client-worker.php进程。
实体和类
支付实体
除了传统的id
和createdAt
字段外,支付实体还有十一个重要属性
uuid
是一个表示支付实体唯一标识符的字符串- `createdAt'表示创建日期
- `payedAt'表示支付已完成的日期
- `expirationDate'表示支付到期日期
status
表示支付当前的状态orderId
存储您的应用程序中的OrderIdpaymentMethod
表示在平台上使用的支付方式(例如:在payzen中使用VISA)cancellationReason
是一个表示支付取消原因的字符串requiredPrice
是一个表示所需价格的浮点数capturedPrice
是一个表示已捕获价格的浮点数authorizedPayment
是一个表示授权支付的整数(用作二进制标志)selectedPayment
是一个表示已选择的支付方式的整数contexts
是一个包含实体所有上下文的ArrayCollectioncallbackUrl
是一个回调URL数组,将在应用程序中的某些事件中使用(例如,当支付被保存时)。以下是回调URL的可能值和用途succeeded
:支付授权成功时将被调用的URLfailed
:支付授权失败时将被调用的URLcancelled
:支付被取消时将被调用的URL
上下文实体
除了传统的id
字段外,上下文实体还有三个重要属性
key
是一个表示上下文键的字符串value
是一个表示附加到此上下文的值的字符串payment
是一个表示与该上下文相关的支付实体的支付实体
基本用法
为了使用 Payer
方法,您必须定义一个新的 Payer
实例并设置正确的传输方式(异步或同步)。
<?php use Fei\Service\Payment\Client\Payer; use Fei\ApiClient\Transport\BasicTransport; use Fei\ApiClient\Transport\BeanstalkProxyTransport; use Pheanstalk\Pheanstalk; $payer = new Payer([Payer::OPTION_BASEURL => 'https://payment.api']); // Put your payment API base URL here $payer->setTransport(new BasicTransport()); $proxy = new BeanstalkProxyTransport(); $proxy->setPheanstalk(new Pheanstalk('127.0.0.1')); $payer->setAsyncTransport($proxy); // Use the payer client methods...
Payer
客户端实例首先会尝试使用 Beanstalkd 转发消息,如果过程失败,则客户端会直接尝试将支付负载发送到正确的 API 端点。
Payer
类中有几个方法,所有方法都列在下面的表中
客户端选项
只有一个选项可用,可以通过构造函数或通过调用 setOptions
方法 Payer::setOptions(array $options)
来传递
注意:以下所有示例都在 examples 目录中提供。
请求
您可以使用 Payer
客户端的 request()
方法创建新的支付。
示例
<?php use Fei\ApiClient\Transport\BasicTransport; use Fei\Service\Payment\Client\Payer; use Fei\Service\Payment\Entity\Payment; $payer = new Payer([Payer::OPTION_BASEURL => 'http://payment.dev']); $payer->setTransport(new BasicTransport()); $payment = new Payment(); $payment->setExpirationDate(new \DateTime()) ->setStatus(Payment::STATUS_PENDING) ->setOrderId('ORDERID') ->setPaymentMethod('VISA') ->setRequiredPrice(456) ->setAuthorizedPayment(Payment::PAYMENT_PAYPAL) ->setCallbackUrl([ "succeeded" => 'http://url-succeeded.fr', "failed" => 'http://url-failed.fr', "saved" => 'http://url-saved.fr', "cancelled" => 'http://url-cancelled.fr', ]); $payment = $payer->request($payment);
更新
您可以使用 Payer
客户端的 update()
方法更新现有的支付。
示例
<?php use Fei\ApiClient\Transport\BasicTransport; use Fei\Service\Payment\Client\Payer; use Fei\Service\Payment\Entity\Payment; $payer = new Payer([Payer::OPTION_BASEURL => 'http://payment.dev']); $payer->setTransport(new BasicTransport()); $payment = new Payment(); $payment->setExpirationDate(new \DateTime()) ->setStatus(Payment::STATUS_PENDING) ->setRequiredPrice(456) ->setAuthorizedPayment(Payment::PAYMENT_PAYPAL) ->setCallbackUrl([ "succeeded" => 'http://url-succeeded.fr', "failed" => 'http://url-failed.fr', "saved" => 'http://url-saved.fr', "cancelled" => 'http://url-cancelled.fr', ]); $paymentId = $payer->request($payment); $payment->setRequiredPrice(327.4); $payer->update($payment);
检索
您可以使用 Payer
客户端的 retrieve()
方法检索一个支付,该方法接受一个参数:支付实体的 id
或支付的 uuid
。
示例
<?php use Fei\ApiClient\Transport\BasicTransport; use Fei\Service\Payment\Client\Payer; $payer = new Payer([Payer::OPTION_BASEURL => 'http://payment.dev']); $payer->setTransport(new BasicTransport()); $payment = $payer->retrieve(1); // retrieve by it's integer id $payment = $payer->retrieve('81db1f4e-e938-440a-aae0-95b5994db015'); // retrieve by it's string uuid
搜索
您可以使用 Payer
客户端的 search()
方法搜索支付,该方法接受一个 SearchBuilder
实例。
示例
<?php use Fei\ApiClient\Transport\BasicTransport; use Fei\Service\Payment\Client\Payer; use Fei\Service\Payment\Client\Utils\Builder\SearchBuilder; $payer = new Payer([Payer::OPTION_BASEURL => 'http://payment.dev']); $payer->setTransport(new BasicTransport()); $builder = new SearchBuilder(); $builder->uuid()->equal('81db1f4e-e938-440a-aae0-95b5994db012'); $payments = $payer->search($builder); echo '<pre>'; print_r($payments); echo '</pre>';
取消
您可以使用 Payer
客户端的 cancel()
方法取消一个支付,该方法接受一个 Payment
实例(或 id)和一个用于取消原因的 string
。
示例
<?php use Fei\ApiClient\Transport\BasicTransport; use Fei\Service\Payment\Client\Payer; $payer = new Payer([Payer::OPTION_BASEURL => 'http://payment.dev']); $payer->setTransport(new BasicTransport()); $paymentId = $payer->cancel(1, 'Cancel by an administrator');
拒绝
您可以使用 Payer
客户端的 reject()
方法拒绝一个支付,该方法接受一个 Payment
实例(或 id)和一个用于取消原因的 string
。
示例
<?php use Fei\ApiClient\Transport\BasicTransport; use Fei\Service\Payment\Client\Payer; $payer = new Payer([Payer::OPTION_BASEURL => 'http://payment.dev']); $payer->setTransport(new BasicTransport()); $paymentId = $payer->reject(1, 'Rejected by an administrator');
捕获
您可以使用 Payer
客户端的 capture()
方法捕获一个支付,该方法接受一个 Payment
实例(或 id)和一个用于捕获金额的 float
。
示例
<?php use Fei\ApiClient\Transport\BasicTransport; use Fei\Service\Payment\Client\Payer; $payer = new Payer([Payer::OPTION_BASEURL => 'http://payment.dev']); $payer->setTransport(new BasicTransport()); $paymentId = $payer->capture(1, 10.36);
获取支付链接
您可以使用 Payer
客户端的 getPaymentLink()
方法获取公开的支付链接以处理支付,该方法接受一个 Payment
实例或 id 或 uuid。
示例
<?php use Fei\ApiClient\Transport\BasicTransport; use Fei\Service\Payment\Client\Payer; $payer = new Payer([Payer::OPTION_BASEURL => 'http://payment.dev']); $payer->setTransport(new BasicTransport()); try { echo $payer->getPaymentLink(23); } catch (\Exception $e) { echo $e->getMessage() . PHP_EOL; $previous = $e->getPrevious(); if ($previous instanceof Guzzle\Http\Exception\ServerErrorResponseException) { var_dump($previous->getRequest()); var_dump($previous->getResponse()->getBody(true)); } }