Stripe PHP 库提供了从 PHP 语言编写的应用程序对 Stripe API 的便捷访问。它包括一组预定义的 API 资源类,这些类根据 API 响应动态初始化自身,这使其与 Stripe API 的各种版本兼容。
PHP 5.6.0 及更高版本。
您可以通过 Composer 安装绑定。运行以下命令:
composer require stripe/stripe-php
要使用绑定,请使用 Composer 的自动加载:
require_once ' vendor/autoload.php ' ;
如果您不想使用 Composer,可以下载最新版本。然后,要使用绑定,请包含init.php
文件。
require_once ' /path/to/stripe-php/init.php ' ;
绑定需要以下扩展才能正常工作:
curl
,不过如果您愿意,也可以使用自己的非 cURL 客户端json
mbstring
(多字节字符串)如果您使用 Composer,这些依赖关系应该会自动处理。如果您手动安装,您需要确保这些扩展可用。
简单的用法如下:
$ stripe = new Stripe StripeClient ( ' sk_test_BQokikJOvBiI2HlWgH4olfQ2 ' );
$ customer = $ stripe -> customers -> create ([
' description ' => ' example customer ' ,
' email ' => ' [email protected] ' ,
' payment_method ' => ' pm_card_visa ' ,
]);
echo $ customer ;
您可以继续使用版本 7.33.0 之前使用的旧集成模式。查看迁移指南以了解向后兼容的客户端/服务模式更改。
请参阅 PHP API 文档。
请观看有关如何使用该库的视频演示。
如果您使用 PHP 5.4 或 5.5,您应该考虑升级您的环境,因为这些版本分别自 2015 年 9 月和 2016 年 7 月起就已经结束生命周期。否则,您仍然可以通过从我们的发布页面下载 stripe-php v6.43.1(zip、tar.gz)来使用 Stripe。该版本可以工作,但可能不支持自该版本发布以来我们添加的最新功能,升级 PHP 是最好的做法。
如果您使用的是 PHP 5.3,则应该升级您的环境,因为该版本自 2014 年 8 月起就已停止使用。否则,您可以从我们的发布页面下载 v5.9.2(zip、tar.gz)。该版本将继续与新版本的 Stripe API 一起用于所有常见用途。
注意我们不建议减少非只读调用(例如费用创建)的超时,因为即使您本地超时,Stripe 端的请求仍然可以完成。如果您要减少这些调用的超时,请确保使用幂等性令牌以避免由于超时重试逻辑而执行同一事务两次。
要修改请求超时(连接超时或总超时,以秒为单位),您需要告诉 API 客户端使用默认值以外的 CurlClient。您将在该 CurlClient 中设置超时。
// set up your tweaked Curl client
$ curl = new Stripe HttpClient CurlClient ();
$ curl -> setTimeout ( 10 ); // default is StripeHttpClientCurlClient::DEFAULT_TIMEOUT
$ curl -> setConnectTimeout ( 5 ); // default is StripeHttpClientCurlClient::DEFAULT_CONNECT_TIMEOUT
echo $ curl -> getTimeout (); // 10
echo $ curl -> getConnectTimeout (); // 5
// tell Stripe to use the tweaked client
Stripe ApiRequestor :: setHttpClient ( $ curl );
// use the Stripe API client as you normally would
需要为您的请求设置代理吗?使用与curl_stopt_array()
相同的语法将必需的CURLOPT_*
数组传递给 CurlClient 构造函数。这将为 SDK 发出的每个 HTTP 请求设置默认的 cURL 选项,尽管许多更常见的选项(例如超时;请参阅上面的如何设置这些选项)将被客户端覆盖,即使在此处设置也是如此。
// set up your tweaked Curl client
$ curl = new Stripe HttpClient CurlClient ([ CURLOPT_PROXY => ' proxy.local:80 ' ]);
// tell Stripe to use the tweaked client
Stripe ApiRequestor :: setHttpClient ( $ curl );
或者,可以将可调用对象传递给 CurlClient 构造函数,该构造函数根据请求输入返回上述数组。有关此行为的示例,请参阅tests/CurlClientTest.php
中的testDefaultOptions()
。请注意,该可调用函数会在每个 API 请求开始时、发送请求之前调用。
该库执行最少的日志记录,但可以使用PSR-3
兼容的记录器进行配置,以便消息最终出现在那里,而不是error_log
:
Stripe Stripe :: setLogger ( $ logger );
您可以通过getLastResponse()
访问任何对象上最后一个 API 响应的数据。
$ customer = $ stripe -> customers -> create ([
' description ' => ' example customer ' ,
]);
echo $ customer -> getLastResponse ()-> headers [ ' Request-Id ' ];
Stripe 的 API 现在要求所有连接都使用 TLS 1.2。某些系统(尤其是一些较旧的 CentOS 和 RHEL 版本)能够使用 TLS 1.2,但默认情况下将使用 TLS 1.0 或 1.1。在这种情况下,您将收到invalid_request_error
并显示以下错误消息:“Stripe 不再支持使用 TLS 1.0 发出的 API 请求。请使用 TLS 1.2 或更高版本启动 HTTPS 连接。您可以在 https://stripe 上了解更多信息.com/blog/upgrading-tls。”。
建议的操作过程是升级您的 cURL 和 OpenSSL 软件包,以便默认使用 TLS 1.2,但如果不可能,您可以通过将CURLOPT_SSLVERSION
选项设置为CURL_SSLVERSION_TLSv1
或CURL_SSLVERSION_TLSv1_2
来解决该问题:
$ curl = new Stripe HttpClient CurlClient ([ CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1 ]);
Stripe ApiRequestor :: setHttpClient ( $ curl );
对于需要在进程生命周期内使用多个密钥的应用程序(例如使用 Stripe Connect 的应用程序),还可以设置每个请求密钥和/或帐户:
$ customers = $ stripe -> customers -> all ([],[
' api_key ' => ' sk_test_... ' ,
' stripe_account ' => ' acct_... '
]);
$ stripe -> customers -> retrieve ( ' cus_123456789 ' , [], [
' api_key ' => ' sk_test_... ' ,
' stripe_account ' => ' acct_... '
]);
默认情况下,该库将使用其自己的已知 CA 证书的内部捆绑包,但也可以配置您自己的:
Stripe Stripe :: setCABundlePath ( " path/to/ca/bundle " );
该库可以配置为自动重试由于间歇性网络问题而失败的请求:
Stripe Stripe :: setMaxNetworkRetries ( 2 );
将幂等键添加到请求中以保证重试的安全。
默认情况下,该库向 Stripe 发送有关请求延迟和功能使用情况的遥测数据。这些数字有助于 Stripe 改善所有用户 API 的整体延迟,并改进流行的功能。
如果您愿意,可以禁用此行为:
Stripe Stripe :: setEnableTelemetry ( false );
Stripe 具有处于测试阶段的功能,可以通过该包的测试版本访问这些功能。我们希望您在这些功能达到稳定阶段之前尝试这些功能并与我们分享反馈。使用指定确切版本的composer require
命令来安装stripe-php pacakge 的测试版。
composer require stripe/stripe-php:v9.2.0-beta.1
注意Beta 版本之间可能存在重大更改。因此,我们建议将包版本固定到 Composer.json 文件中的特定 Beta 版本。这样,您每次都可以安装相同的版本,而不会破坏更改,除非您有意寻找最新的测试版。
我们强烈建议您关注您感兴趣的测试版功能何时从测试版变为稳定版,以便您可以从使用 SDK 的测试版转向稳定版。
如果您的 Beta 功能需要发送Stripe-Version
标头,请使用函数addBetaVersion
设置config
对象的apiVersion
属性:
Stripe :: addBetaVersion ( " feature_beta " , " v3 " );
如果您想向未记录的 API 发送请求(例如您处于私人测试版),或者您希望绕过库中的方法定义并直接指定您的请求详细信息,您可以使用rawRequest
方法StripeClient。
$ stripe = new Stripe StripeClient ( ' sk_test_xyz ' );
$ response = $ stripe -> rawRequest ( ' post ' , ' /v1/beta_endpoint ' , [
" caveat " : " emptor "
], [
" stripe_version " => " 2022-11_15 " ,
]);
// $response->body is a string, you can call $stripe->deserialize to get a StripeStripeObject.
$ obj = $ stripe -> deserialize ( $ response -> body );
// For GET requests, the params argument must be null, and you should write the query string explicitly.
$ get_response = $ stripe -> rawRequest ( ' get ' , ' /v1/beta_endpoint?caveat=emptor ' , null , [
" stripe_version " => " 2022-11_15 " ,
]);
Stripe PHP 库的最新主要版本发布了新功能和错误修复。如果您使用的是较旧的主要版本,我们建议您升级到最新版本,以便使用新功能和错误修复,包括安全漏洞的修复。该软件包的旧主要版本将继续可用,但不会收到任何更新。
获取作曲家。例如,在 Mac 操作系统上:
brew install composer
安装依赖项:
composer install
该测试套件依赖于 stripe-mock,因此请确保从后台终端获取并运行它(stripe-mock 的 README 还包含通过 Homebrew 和其他方法安装的说明):
go install github.com/stripe/stripe-mock@latest
stripe-mock
如上所述安装依赖项(这将解析 PHPUnit),然后您可以运行测试套件:
./vendor/bin/phpunit
或者运行单独的测试文件:
./vendor/bin/phpunit tests/Stripe/UtilTest.php
从 Mozilla cURL 版本更新捆绑的 CA 证书:
./update_certs.php
该库使用 PHP CS Fixer 进行代码格式化。提交 PR 之前必须格式化代码,否则 CI 将失败。使用以下命令运行格式化程序:
./vendor/bin/php-cs-fixer fix -v .
您是否正在编写一个集成 Stripe 并嵌入我们的库的插件?然后请使用setAppInfo
函数来识别您的插件。例如:
Stripe Stripe :: setAppInfo ( " MyAwesomePlugin " , " 1.2.34 " , " https://myawesomeplugin.info " );
在将任何请求发送到 API 之前,应调用该方法一次。第二个和第三个参数是可选的。
有关完整上下文,请参阅上面的“SSL / TLS 兼容性问题”段落。如果您想确保您的插件可以在所有系统上使用,您应该添加一个配置选项,让您的用户在CURLOPT_SSLVERSION
的不同值之间进行选择:none(默认)、 CURL_SSLVERSION_TLSv1
和CURL_SSLVERSION_TLSv1_2
。