asciisd/tap-php

Tap Payment PHP 库

v2.1.0 2024-07-05 13:55 UTC

This package is auto-updated.

Last update: 2024-09-05 14:22:54 UTC


README

Latest Version on Packagist Software License Total Downloads

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');

依赖

绑定需要以下扩展才能正常工作

  • curl,尽管您可以选择使用自己的非 cURL 客户端
  • json
  • mbstring(多字节字符串)

如果您使用 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_TLSv1CURL_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)。有关更多信息,请参阅许可证文件