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 个文件,您会注意到函数 handleCustomerSubscriptionCreatedhandleCustomerSubscriptionUpdated 已更改,以反映订阅项目支持等。

所以将这些函数复制到你的 WebhookController.php 并根据需要更新它们,如果你有一些自定义逻辑的话。

【讨论】:

以上是关于Laravel 收银员不会自动创建订阅的主要内容,如果未能解决你的问题,请参考以下文章

带有条纹的laravel收银员没有月度计划错误

在 Laravel 中使用 Mailchimp 自动导出订阅者

带有 Stripe 的 Laravel 收银员:发票号

Laravel Cashier - 使用现有客户对象创建新订阅

Paypal 自动支付每月订阅

Woocommerce 订阅:自动创建续订订单并暂停有效订阅