lab404 / laravel-stripe-server
Laravel Stripe Server 是一个用于处理 Stripe SCA 结账的库。
Requires
- php: ^7.2
- laravel/framework: ^6.0 | ^7.0
- stripe/stripe-php: ^7.40
README
Laravel Stripe Server 是一个用于处理模型 Stripe SCA 结账的库。
需求
- Laravel 6.x 或 7.x
- PHP >= 7.2
Laravel 支持
预期工作流程
- 您有一个
Order
模型,其中包含 stripe 结账。您在控制器中创建订单。
示例模型
use App\Models\Order; use Lab404\StripeServer\Facades\Stripe; use Illuminate\Http\Request; class OrderController { public function store(Request $request) { // Create your order $order = new Order($request->validated()); $order->save(); // Create your checkout session $session = Stripe::requestCreateSession() ->setCustomerEmail($request->user()->email) ->setReturnUrls($confirm_url, $cancel_url) ->setProduct('T-shirt', 5000, 'EUR', 1, $picture_url) ->call(); // Create your checkout model $checkout = Stripe::registerCheckout($session, $order); return Stripe::redirectSession($response->id); } }
- 您的用户被重定向到 stripe,他填写了他的信息,然后被重定向到您的成功 URL。订单尚未付款。异步地,插件将尝试从 Stripe 获取新的事件,并派发
CheckoutSessionCompleted
事件
示例监听器
use Lab404\StripeServer\Events\CheckoutSessionCompleted; use Lab404\StripeServer\Models\StripeCheckout; class CheckoutListener { public function handle(CheckoutSessionCompleted $event): void { /** @var StripeCheckout $checkout */ $checkout = $event->checkout; /** Your charged model */ $chargeable = $checkout->chargeable; /** The PaymentIntent returned by Stripe */ $payment = $event->paymentIntent; /** Important! Mark the checkout as paid */ $checkout->markAsPaid(); } }
- 您可以使用模型如下所示
$order = Order::with('checkout')->first(); if ($order->checkout->is_paid) { echo 'Order is paid'; } else { echo 'Order is not paid'; }
安装
- 使用 Composer 需求
composer require lab404/laravel-stripe-server
-
在
config/services.php
中配置您的 Stripe 密钥。 -
使用
php artisan vendor:publish --tag=stripe-server
发布migrations
和views
。 -
迁移
2019_06_19_101000_create_stripe_checkouts_table.php
。 -
在
app\Console\Kernel.php
中安排命令
protected function schedule(Schedule $schedule) { $schedule->command('stripe:checkout-session-completed')->everyMinute(); }
- 将
Lab404\StripeServer\Models\HasStripeCheckout
或HasStripeCheckouts
(如果模型可以拥有多个结账)添加到您的可收费模型中。
深入研究
Stripe 文档
访问 Stripe 管理员
使用外观
Stripe::method();
使用 DI
public function index(Lab404\StripeServer\Stripe $stripe)
{
$stripe->method();
}
使用容器
app('stripe')->method();
可用方法
redirectSession(string $session_id): Illuminate\Contracts\View\View
registerCheckout(\Stripe\Checkout\Session $session, Model $model): Illuminate\Database\Eloquent\Model
requestCreateCharge(): StripeServer\Requests\CreateCharge
requestCreateSession(): StripeServer\Requests\CreateSession
requestPaymentIntent(string $id): StripeServer\Requests\PaymentIntent
requestEvents(string $type, int $hours = 24): StripeServer\Requests\Events
requestSessionCheckoutCompletedEvents(int $hours = 24): StripeServer\Requests\Events
与您的模型一起工作
具有多个结账的模型
当模型具有 Lab404\StripeServer\Models\HasStripeCheckouts
时,您有权访问以下方法和范围
// Scopes Model::hasCheckouts()->get(); Model::hasPaidCheckouts()->get(); Model::hasUnpaidCheckouts()->get(); // Methods $models->checkouts(); // returns all checkout for the model // Eager loading $models = Model::with('checkouts')->get();
具有一个结账的模型
当模型具有 Lab404\StripeServer\Models\HasStripeCheckout
时,您有权访问以下方法和范围
// Scopes Model::hasCheckout()->get(); Model::hasPaidCheckout()->get(); Model::hasUnpaidCheckout()->get(); // Methods $models->checkout(); // returns the checkout for the model // Eager loading $models = Model::with('checkout')->get();
自定义 StripeCheckout
模型
在 config/stripe-server.php
中配置 model
。您的自定义模型应扩展默认模型。
自定义重定向器
当您使用 redirectSession()
方法时,将返回一个 Illuminate\View\View
实例。您可以这样做
return Stripe::redirectSession('...')->with([ 'title' => 'My custom title', 'message' => 'My customer redirect message' ]);
Artisan 命令
stripe:checkout-session-completed
获取所有 checkout.session.completed
Stripe 事件,并为每个具有 succeeded
状态的事件派发 CheckoutSessionCompleted
事件。
stripe:events
获取所有 Stripe 事件,并为每个事件派发 StripeEvent
。
stripe:purge
删除所有未付款的 StripeCheckout
,这些结账早于给定天数。使用 --days
选项自定义,默认为 7。它方便在调度器中调用
$schedule->command('stripe:purge')->dailyAt('12:00');
Nova
如果您使用 Laravel Nova,则可以添加 Lab404\StripeServer\Nova\StripeCheckout
资源
Laravel\Nova\Nova::resources([
Lab404\StripeServer\Nova\StripeCheckout::class,
]);
此资源不会动态注册,因为它相当简单,您可能想覆盖它。即将推出更多 Nova 功能,如退款操作或卡。
待办事项和想法
[x] 清理未付款的 stripe 结账
[ ] 退款
[ ] Nova 操作
测试
待办事项
贡献
该包仍在开发中,欢迎贡献力量!
贡献者
许可证
MIT