nyehandel / omnipay-stripe
用于 Omnipay 支付处理库的 Stripe 驱动程序
Requires
- omnipay/common: ^3
Requires (Dev)
- omnipay/tests: ^3
- phpro/grumphp: ^0.14
- squizlabs/php_codesniffer: ^3
This package is auto-updated.
Last update: 2024-09-06 11:38:16 UTC
README
用于 Omnipay PHP 支付处理库的 Stripe 驱动程序
Omnipay 是一个与框架无关的多网关支付处理库,适用于 PHP。此包实现了 Omnipay 对 Stripe 的支持。
安装
Omnipay 通过 Composer 安装。要安装,只需使用 Composer 需求 league/omnipay
和 omnipay/stripe
composer require league/omnipay omnipay/stripe
基本用法
此包提供了以下网关
有关一般用法说明,请参阅主要的 Omnipay 存储库。
Stripe.js
Stripe 集成相当简单。基本上,你只需将 token
字段传递给 Stripe 而不是常规的信用卡数据。
首先,请按照以下标准 Stripe JS 指南进行操作: https://stripe.com/docs/tutorials/forms
之后,你将有一个 stripeToken
字段,该字段将提交到你的服务器。只需将其传递给网关作为 token
,而不是通常的 card
数组。
$token = $_POST['stripeToken']; $response = $gateway->purchase([ 'amount' => '10.00', 'currency' => 'USD', 'token' => $token, ])->send();
Stripe 支付意图
Stripe 支付意图是 Stripe 的新基础支付 API。与收费 API 相比,支付意图支持 强客户身份验证。这意味着在支付过程中,用户可能会被重定向到由客户银行提供的网站进行身份验证。
此插件的实现使用手动支付意图确认流程,与收费 API 相似。不应太难以修改当前的支付流程。
-
首先,请 收集客户支付方式详情。或者,如果客户已经提供并已在您的系统中保存了支付方式,您可以重新使用它。
-
然后按照使用收费 API 时的方式进行授权或购买。
$paymentMethod = $_POST['paymentMethodId']; $response = $gateway->authorize([ 'amount' => '10.00', 'currency' => 'USD', 'description' => 'This is a test purchase transaction.', 'paymentMethod' => $paymentMethod, 'returnUrl' => $completePaymentUrl, 'confirm' => true, ])->send();
- 如果您有一个令牌而不是支付方式,您可以通过设置
token
参数来使用它,而不是设置paymentMethod
参数。 returnUrl
必须指向您将重定向的每个外部网关。如果confirm
设置为 true,则此参数是必需的。- 如果您未将
confirm
参数设置为true
,则必须手动确认支付意图,如下所示。
$paymentIntentReference = $response->getPaymentIntentReference(); $response = $gateway->confirm([ 'paymentIntentReference' => $paymentIntentReference, 'returnUrl' => $completePaymentUrl, ])->send();
此时,您需要保存支付意图的引用。$_SESSION
可以用于此目的,但更常见的模式是在 $completePaymentUrl
URL 中编码当前订单的引用。在这种情况下,现在将订单与支付意图之间的关系保存到某个地方以供以后检索支付意图引用将是一个很好的时机。
- 检查支付是否成功。如果是,则表示不需要 3DS 身份验证。此决定由 Stripe(考虑您设置的任何自定义雷达规则)和发卡行决定。
if ($response->isSuccessful()) { // Pop open that champagne bottle, because the payment is complete. } else if($response->isRedirect()) { $response->redirect(); } else { // The payment has failed. Use $response->getMessage() to figure out why and return to step (1). }
-
客户将被重定向到3DS认证页面。一旦认证完成(或未能完成认证),客户将被重定向到之前指定的带有
completePaymentUrl
的URL。 -
检索步骤(2)末尾提到的
$paymentIntentReference
。 -
现在我们需要确认支付意向,向Stripe发出信号,表明一切都在控制之中。
$response = $gateway->confirm([ 'paymentIntentReference' => $paymentIntentReference, 'returnUrl' => $completePaymentUrl, ])->send(); if ($response->isSuccessful()) { // All done!! Big bucks! } else { // The response will not be successful if the 3DS authentication process failed or the card has been declined. Either way, it's back to step (1)! }
Stripe Connect
Stripe Connect应用程序可以在代表用户进行的费用上收取额外的费用。为此,您需要在授权或购买请求中指定一个额外的transactionFee
参数。
当一笔费用被退款时,交易费用也会按比例退款,默认情况下,这将从您的连接用户Stripe账户中扣除,实际上使他们自己承担费用。要从您的(应用程序的)Stripe账户退款,您可以在退款请求中传递一个布尔值为true的refundApplicationFee
参数。
注意:使用带有Stripe Connect特定参数的请求只能使用授权过程中收到的OAuth访问令牌进行。有关Stripe Connect的更多信息,请参阅此处。
测试模式
Stripe账户既有测试模式的API密钥,也有实时模式的API密钥。这些密钥可以同时激活。使用测试模式凭证创建的数据永远不会触及信用卡网络,也不会花费任何人的钱。
与某些网关不同,没有独立的测试模式端点与实时模式端点分开,Stripe API端点在测试和实时中都是相同的。
支持
如果您在使用Omnipay时遇到一般性问题,我们建议在Stack Overflow上发布。请确保添加omnipay标签,以便更容易找到。
如果您想了解发布公告,讨论项目想法或提出更详细的问题,还可以订阅邮件列表。
如果您认为您发现了一个错误,请使用GitHub问题跟踪器报告,或者更好的方法是fork库并提交一个pull request。