【发布时间】: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。
标签: php laravel stripe-payments laravel-cashier