zan*_*rsh 5 php laravel stripe-payments laravel-cashier
这是代码:
<?php
namespace App\Http\Controllers;
use Inertia\Inertia;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class BillingController extends Controller
{
public function index(Request $request) {
return Auth::user()
->newSubscription('default', 'price_#################')
->checkout();
}
}
Run Code Online (Sandbox Code Playgroud)
它正确地将我重定向到 stripe 的结帐页面,它正确地处理付款并将我重定向回我的网站。我实际上可以在 stripe 面板中看到活动订阅,但我的网站帐户上没有活动订阅。
>>> User::first()->subscriptions;
=> Illuminate\Database\Eloquent\Collection {#4476
all: [],
}
>>> User::first()->subscribed('default');
=> false
Run Code Online (Sandbox Code Playgroud)
Laravel 文档中有一点说它会自动处理订阅关联(我猜是通过一种神奇的内部方法),但它不起作用。
Stripe 的 CLI 在我的付款操作中捕获了这些事件:
2021-10-19 23:34:16 --> charge.succeeded [evt_############]
2021-10-19 23:34:16 --> checkout.session.completed [evt_############]
2021-10-19 23:34:16 --> invoice.created [evt_############]
2021-10-19 23:34:16 --> invoice.finalized [evt_############]
2021-10-19 23:34:16 --> customer.subscription.created [evt_############]
2021-10-19 23:34:17 --> invoice.updated [evt_############]
2021-10-19 23:34:17 --> customer.subscription.updated [evt_############]
2021-10-19 23:34:17 --> invoice.paid [evt_############]
2021-10-19 23:34:17 --> invoice.payment_succeeded [evt_############]
2021-10-19 23:34:17 --> payment_intent.succeeded [evt_############]
2021-10-19 23:34:17 --> payment_intent.created [evt_############]
Run Code Online (Sandbox Code Playgroud)
我缺少什么?我应该手动监听 customer.subscription.created 并使用我自己的逻辑吗?
小智 3
你做得很好,但你需要使用\vendor\laravel\cashier\src\Http\Controllers\WebhookController.php中的新/更新代码来更新你的 WebhookController.php 代码
即,如果您检查这两个文件,您会注意到函数handleCustomerSubscriptionCreated和handleCustomerSubscriptionUpdated已更改,以反映订阅项目支持等。
因此,如果您有一些自定义逻辑,请将这些函数复制到您的 WebhookController.php 并根据您的需要进行更新。