Laravel 收银员不会自动创建订阅

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 代码

即,如果您检查这两个文件,您会注意到函数handleCustomerSubscriptionCreatedhandleCustomerSubscriptionUpdated已更改,以反映订阅项目支持等。

因此,如果您有一些自定义逻辑,请将这些函数复制到您的 WebhookController.php 并根据您的需要进行更新。