jclee100/lunar-stripe

Lunar 的 Stripe 付款驱动程序。

安装: 12

依赖者: 0

建议者: 0

安全性: 0

星标: 1

关注者: 0

分支: 12

类型:项目

dev-main 2023-07-08 15:32 UTC

This package is auto-updated.

Last update: 2024-09-08 17:56:24 UTC


README

此插件使您可以在 Lunar 店铺上启用 Stripe 付款。

Alpha 发布版

此插件目前处于 Alpha 版,尽管已经采取了所有措施以确保其按预期工作,但只有在添加更多测试并证明其正确性后,它才会被视为离开 Alpha 版。

所需测试

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

要求

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

安装

需要 composer 包

composer require getcandy/stripe

发布配置

这将发布配置到 config/getcandy/stripe.php 下。

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

发布视图(可选)

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

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

启用驱动程序

config/getcandy/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 中使用的可用的配置选项列表

后端使用

创建 PaymentIntent

use \Lunar\Stripe\Facades\Stripe;

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

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

$cart->meta->payment_intent;

获取现有的 PaymentIntent

use \Lunar\Stripe\Facades\Stripe;

Stripe::fetchIntent($paymentIntentId);

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

店面使用

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

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

设置脚本

将此放置在店面 <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;
    }
}

然后就应该这样了,你应该会看到带有正确交易的订单。

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

贡献

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

测试

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