asciisd / tap-php
Tap Payment PHP 库
Requires
- php: ^8.1|^8.2
- phpseclib/phpseclib: ^2.0|^3.0
Requires (Dev)
- php-coveralls/php-coveralls: ^2.1
- phpunit/phpunit: ^9.0|^10.0
- scrutinizer/ocular: ~1.1
- symfony/process: ~3.4
README
Tap PHP 库提供了从使用 PHP 编写的应用程序中方便地访问 Tap API 的方法。它包括一组预定义的类,这些类可以从 API 响应中动态初始化自身,使得它与广泛版本的 Tap API 兼容。
需求
PHP 7.3|8.0 和更高版本。
安装
您可以通过 Composer 安装绑定。运行以下命令
$ composer require asciisd/tap-php
要使用绑定,请使用 Composer 的 自动加载
require_once('vendor/autoload.php');
手动安装
如果您不想使用 Composer,可以下载 最新版本。然后,为了使用绑定,请包含 init.php
文件。
require_once('/path/to/tap-php/init.php');
依赖
绑定需要以下扩展才能正常工作
如果您使用 Composer,这些依赖项应自动处理。如果您手动安装,请确保这些扩展可用。
用法
简单用法如下
\Tap\Tap::setApiKey('sk_test_XKokBfNWv6FIYuTMg5sLPjhJ'); $charge = \Tap\Charge::create([ 'amount' => 2000, 'currency' => 'usd', 'source' => ['id' => 'tok_189fqt2eZvKYlo2CTGBeg6Uq'], 'customer' => ['id' => 'cus_w4MN2720192134x9XB1510264'] ]); echo $charge;
文档
请参阅 PHP API 文档。
自定义请求超时
注意:我们不建议减少非只读调用(例如,创建费用)的超时,因为这些调用即使在本地超时,Tap 端的请求仍可能完成。如果您在这些调用中减少超时,请确保使用 幂等令牌 以避免超时重试逻辑导致重复执行同一交易。
要修改请求超时(连接或总超时,以秒为单位),您需要告诉 API 客户端使用除其默认之外的其他 CurlClient。您将在该 CurlClient 中设置超时。
// set up your tweaked Curl client $curl = new \Tap\HttpClient\CurlClient(); $curl->setTimeout(10); // default is \Tap\HttpClient\CurlClient::DEFAULT_TIMEOUT $curl->setConnectTimeout(5); // default is \Tap\HttpClient\CurlClient::DEFAULT_CONNECT_TIMEOUT echo $curl->getTimeout(); // 10 echo $curl->getConnectTimeout(); // 5 // tell Tap to use the tweaked client \Tap\ApiRequestor::setHttpClient($curl); // use the Tap API client as you normally would
配置记录器
库进行了最少的日志记录,但它可以配置为使用与 [PSR-3 兼容的记录器][psr3],以便消息最终出现在那里而不是 error_log
\Tap\Tap::setLogger($logger);
访问响应数据
您可以通过 getLastResponse()
在任何对象上访问最后 API 响应的数据。
$charge = \Tap\Charge::create([ 'amount' => 2000, 'currency' => 'usd', 'source' => ['id' => 'tok_189fqt2eZvKYlo2CTGBeg6Uq'], 'customer' => ['id' => 'cus_w4MN2720192134x9XB1510264'] ]); echo $charge->getLastResponse()->headers['Request-Id'];
SSL / TLS 兼容性问题
Tap 的 API 现在要求所有连接都使用 TLS 1.2。一些系统(特别是某些较旧的 CentOS 和 RHEL 版本)能够使用 TLS 1.2,但默认会使用 TLS 1.0 或 1.1。在这种情况下,您会收到以下错误消息的 invalid_request_error
:“Tap 不再支持使用 TLS 1.0 制作的 API 请求。请使用 TLS 1.2 或更高版本的 HTTPS 连接。”。
建议的操作是升级 cURL 和 OpenSSL 软件包,以便默认使用 TLS 1.2,但如果这不可能,您可能可以通过将 CURLOPT_SSLVERSION
选项设置为 CURL_SSLVERSION_TLSv1
或 CURL_SSLVERSION_TLSv1_2
来解决问题。
$curl = new \Tap\HttpClient\CurlClient([CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1]); \Tap\ApiRequestor::setHttpClient($curl);
按请求配置
对于需要在进程生命周期中使用多个密钥的应用程序,例如使用 [Tap Connect][connect] 的应用程序,也可以设置每个请求的密钥和/或账户
\Tap\Charge::all([], [ 'api_key' => 'sk_test_...', 'amount' => 2000, 'currency' => 'usd', 'source' => ['id' => 'tok_189fqt2eZvKYlo2CTGBeg6Uq'], 'customer' => ['id' => 'cus_w4MN2720192134x9XB1510264'] ]); \Tap\Charge::retrieve("ch_18atAXCdGbJFKhCuBAa4532Z", [ 'api_key' => 'sk_test_...', 'amount' => 2000, 'currency' => 'usd', 'source' => ['id' => 'tok_189fqt2eZvKYlo2CTGBeg6Uq'], 'customer' => ['id' => 'cus_w4MN2720192134x9XB1510264'] ]);
配置 CA 套件
默认情况下,库将使用其内部已知CA证书的捆绑包,但您可以配置自己的证书
\Tap\Tap::setCABundlePath("path/to/ca/bundle");
配置自动重试
库可以配置为自动重试因间歇性网络问题而失败的请求
\Tap\Tap::setMaxNetworkRetries(2);
在请求中添加[幂等键][幂等键],以保证重试的安全性。
请求延迟遥测
默认情况下,库将请求延迟遥测发送到Tap。这些数字有助于Tap提高其API对所有用户的整体延迟。
如果您愿意,可以禁用此行为
\Tap\Tap::setEnableTelemetry(false);
变更日志
有关最近更改的更多信息,请参阅变更日志
测试
$ composer test
贡献
安全
如果您发现任何与安全相关的问题,请通过电子邮件aemad@asciisd.com联系,而不是使用问题跟踪器。
鸣谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件