gamers-geek/stripe

适用于Lunar的Stripe支付驱动程序。

维护者

详细信息

github.com/Gamers-geek/stripe

源代码

安装: 9

依赖者: 0

建议者: 0

安全: 0

星级: 0

关注者: 0

分支: 13

类型:项目

0.8.0 2023-08-29 16:10 UTC

README

此插件可启用Lunar storefront的Stripe支付。

Alpha版本发布

此插件目前处于Alpha版本,虽然已经尽力确保其按预期工作,但只有在添加更多测试并证明其正确性后,才会考虑退出Alpha版本。

所需的测试

  • 从Stripe获取成功的收费响应。
  • 从Stripe获取失败的收费响应。
  • 测试 手动 配置是否作出适当的反应。
  • 测试 自动 配置是否作出适当的反应。
  • 确保交易正确存储在数据库中
  • 确保在使用相同的购物车时,支付意图不会重复。
  • 确保根据Stripe的响应返回适当的响应。
  • 测试退款和部分退款是否创建预期的交易。
  • 确保我们可以手动释放支付或部分支付,并处理不同的响应。

要求

  • Lunar >= 0.1
  • 一个拥有秘密和公开密钥的Stripe账户
  • Laravel Livewire(如果使用前端组件)
  • Alpinejs(如果使用前端组件)

安装

需要composer包

composer require gamers-geek/stripe

发布配置

这将在config/lunar/stripe.php下发布配置。

php artisan vendor:publish --tag=lunar.stripe.config

发布视图(可选)

Lunar Stripe附带了一些您可以在结账时使用的辅助组件,如果您打算编辑它们提供的视图,可以发布它们。

php artisan vendor:publish --tag=lunar.stripe.components

启用驱动程序

config/lunar/payments.php中设置驱动程序

<?php

return [
    // ...
    'types' => [
        'card' => [
            // ...
            'driver' => 'stripe',
        ],
    ],
];

添加您的Stripe凭据

确保您已在config/services.php中设置了Stripe凭据

'stripe' => [
    'key' => env('STRIPE_SECRET'),
    'public_key' => env('STRIPE_PK'),
],

密钥可以在您的Stripe账户中找到 https://dashboard.stripe.com/apikeys

配置

以下是该软件包在config/getcandy/stripe.php中使用的可用配置选项列表

后端使用

创建一个支付意图

use \Lunar\Stripe\Facades\Stripe;

Stripe::createIntent(\Lunar\Models\Cart $cart);

此方法将从购物车创建Stripe支付意图,并将生成的ID添加到元数据中以供稍后检索。如果购物车已存在支付意图,则将从Stripe获取它并返回,以避免创建重复的支付意图。

$cart->meta->payment_intent;

获取现有的支付意图

use \Lunar\Stripe\Facades\Stripe;

Stripe::fetchIntent($paymentIntentId);

这两个方法都将返回一个Stripe\PaymentIntent对象。

前端使用

此插件提供了一些有用的组件,您可以在Storefront中使用它们,它们是用Laravel Livewire和AlpineJs构建的,所以请记住这一点。

如果您正在使用Demo Store,则已经为您设置好了,您可以参考源代码以了解发生了什么。

设置脚本

将其放置在Storefront的<head>中。

@stripeScripts

添加支付组件

在您希望支付表单出现的地方添加此组件

@livewire('stripe.payment', [
  'cart' => $cart,
  'returnUrl' => route('checkout.view'),
])

returnUrl是我们希望Stripe在它们的服务器上处理支付后将其重定向到的位置。

请勿将其指向订单确认页面,如下所示

处理结果

您会注意到我们已告诉Stripe将我们重定向回结账页面,这是因为尽管Stripe已根据您的政策收取了费用或分配了资金,但我们仍需要Lunar处理结果并创建针对订单所需的交易。

当Stripe重定向我们时,我们应在查询字符串中传递两个参数。分别是 payment_intent_client_secretpayment_intent。然后我们可以检查这些值,并通过Lunar的支付驱动程序将它们传递。

因此,假设我们正在使用Livewire,并且在 CheckoutPage 组件中(例如在演示商店中)

if ($request->payment_intent) {
    $payment = \Lunar\Facades\Payments::driver('card')->cart($cart)->withData([
        'payment_intent_client_secret' => $request->payment_intent_client_secret,
        'payment_intent' => $request->payment_intent,
    ])->authorize();

    if ($payment->success) {
        redirect()->route('checkout-success.view');
        return;
    }
}

这就足够了,然后你应该在Lunar中看到带有正确交易的订单。

如果您已将策略设置为 手动,则需要进入中心并手动捕获支付。

贡献

欢迎贡献,如果您正在考虑添加一个功能,请先提交一个问题,以便我们确定是否应该包含该功能。

测试

目前我们使用一个手动的 MockClient 来模拟Stripe API将返回的响应。这可能会在编写测试时得到改进,但它应该很明显它在做什么,所以请随时添加您自己的响应。