inverseschool/omnipay-stripe

为Inverseschool.com/online使用案例提供的Omnipay支付处理库的Stripe驱动程序。

v3.5.4 2024-06-22 13:05 UTC

This package is auto-updated.

Last update: 2024-09-22 13:43:27 UTC


README

为Omnipay PHP支付处理库提供的Stripe驱动程序

Build Status Latest Stable Version Total Downloads

Omnipay 是一个与框架无关、多网关的PHP支付处理库。本包实现了Omnipay对Stripe的支持。

安装

Omnipay通过Composer安装。要安装,只需使用Composer要求league/omnipayomnipay/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 Payment Intents

Stripe Payment Intents是Stripe的新基础支付API。与Charges API相比,Payment Intents支持强客户身份验证。这意味着在支付过程中,用户可能会被重定向到客户银行提供的离站页面进行身份验证。

此插件的实现使用了手动Payment Intent确认流程,这与Charges API使用的流程非常相似。修改您的现有支付流程不应太难。

  1. 首先,从客户那里收集支付方式详细信息收集支付方法详细信息。或者,如果客户之前已经提供并已在您的系统中保存了支付方式,您可以使用该支付方式。

  2. 然后按照使用Charges 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中。在这种情况下,现在保存订单和支付意图之间的关系是一个很好的时间,以便稍后可以检索支付意图引用。

  1. 检查支付是否成功。如果是,这意味着3DS身份验证不是必需的。此决定由Stripe(考虑您设置的任何自定义Radar规则)和发卡行决定。
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).
}
  1. 客户将被重定向到3DS认证页面。一旦他们完成认证(或未能完成),客户将被重定向到之前指定的带有completePaymentUrl的URL。

  2. 检索步骤(2)末尾提到的$paymentIntentReference

  3. 现在我们必须确认支付意图,以向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应用程序可以在代表其用户进行的交易上收取额外的费用,超出Stripe的费用。为此,您需要在授权或购买请求中指定一个额外的transactionFee参数。

当交易被退款时,交易费将按照退款金额的比例退还,默认情况下,这将来自您的连接用户Stripe账户,实际上使他们自己承担费用。要从您的(应用程序的)Stripe账户退款,您可以在退款请求中传递一个值为true的refundApplicationFee参数。

注意:使用Stripe Connect特定参数的请求只能使用在授权过程中收到的OAuth访问令牌进行。更多关于Stripe Connect的信息,请参阅此处

测试模式

Stripe账户既有测试模式的API密钥,也有实时模式的API密钥。这些密钥可以同时激活。使用测试模式凭据创建的数据永远不会触碰到信用卡网络,也永远不会让任何人花费钱。

与一些网关不同,没有独立的测试模式端点和实时模式端点,Stripe API端点对测试和实时都是相同的。

支持

如果您遇到Omnipay的一般问题,我们建议在Stack Overflow上发帖。确保添加omnipay标签,以便易于查找。

如果您想了解发布公告、讨论项目想法或提出更详细的问题,还有一个您可以订阅的邮件列表

如果您认为您发现了一个错误,请使用GitHub问题跟踪器报告,或者更好的是,Fork库并提交一个拉取请求。