Laravel 收银员不会自动创建订阅
Posted
技术标签:
【中文标题】Laravel 收银员不会自动创建订阅【英文标题】:Laravel cashier it's not creating automatically the subscription 【发布时间】:2021-12-06 19:11:52 【问题描述】:这是代码:
<?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();
它在 Stripe 的结帐页面上正确地重定向了我,它正确地处理了付款并将我重定向回了我的网站。实际上,我可以在 Stripe 的面板中看到有效订阅,但我的网站帐户上没有有效订阅。
>>> User::first()->subscriptions;
=> Illuminate\Database\Eloquent\Collection #4476
all: [],
>>> User::first()->subscribed('default');
=> false
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_############]
我错过了什么?我应该手动监听 customer.subscription.created 并使用我自己的逻辑吗?
【问题讨论】:
只是想仔细检查一下 - 您确定您从User::first()
获得的用户是您为其创建订阅的同一用户吗?
您是否设置了 webhook?
@karbi 我的开发环境中只有一个用户,因此我确定。但我必须重新检查一遍。
@NerdOfLinux 我没有。引用 laravel 文档:“默认情况下,指向 Cashier 的 webhook 控制器的路由由 Cashier 服务提供商自动注册。该控制器将处理所有传入的 webhook 请求。默认情况下,Cashier webhook 控制器将自动处理取消订阅许多失败的费用”我认为它会自动处理它,创建控制器中声明的“默认”订阅。根据您的经验,我错了吗?我应该使用自定义侦听器处理事件吗?
您不需要设置客户侦听器,但您需要确保路由已注册 (php artisan route:list
),并更新您的 Stripe 设置以向您的应用发送 webhook。
【参考方案1】:
您做得很好,但您需要使用 \vendor\laravel\cashier\src\Http\Controllers\WebhookController.php
也就是说,如果您检查这 2 个文件,您会注意到函数 handleCustomerSubscriptionCreated 和 handleCustomerSubscriptionUpdated 已更改,以反映订阅项目支持等。
所以将这些函数复制到你的 WebhookController.php 并根据需要更新它们,如果你有一些自定义逻辑的话。
【讨论】:
以上是关于Laravel 收银员不会自动创建订阅的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel 中使用 Mailchimp 自动导出订阅者