【问题标题】:Laravel cashier it's not creating automatically the subscriptionLaravel 收银员不会自动创建订阅
【发布时间】: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


【解决方案1】:

您做得很好,但您需要使用 \vendor\laravel\cashier\src\Http\Controllers\WebhookController.php

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-18
    • 2018-05-31
    • 2020-04-23
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 2018-03-28
    • 2016-02-19
    相关资源
    最近更新 更多