You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel使用Cashier创建订阅触发Stripe资源ID不能为空错误

解决方案

第一步:校验User模型配置

  • 必须在App\Models\User模型中引入Billable trait,漏加会导致Stripe关联字段操作异常,示例:
use Laravel\Cashier\Billable;

class User extends Authenticatable
{
    use Billable; // 必须保留该行
    // 其余原有代码保持不变
}
  • 确认当前登录用户的name、email字段不为空,Stripe创建客户时依赖这两个字段的有效值,空值会直接触发资源ID为空报错。

第二步:确认迁移文件执行完成

  • 运行php artisan migrate:status查看Cashier自带的迁移文件执行状态,确保users表中已存在stripe_id、pm_type、pm_last_four、trial_ends_at字段,且字段属性允许为null。
  • 如果字段缺失,先执行php artisan vendor:publish --tag="cashier-migrations"发布迁移文件,再运行php artisan migrate完成表结构更新。

第三步:校验Stripe配置正确性

  • 检查.env文件中以下配置没有空值、多余空格,测试环境和生产环境密钥不要混用:
STRIPE_KEY=你的Stripe公钥
STRIPE_SECRET=你的Stripe私钥
STRIPE_WEBHOOK_SECRET=你配置的Webhook密钥(未配置可留空)

第四步:强制传参调试(解决自动读取字段异常问题)

如果以上步骤排查后仍报错,可替换原有$user->createOrGetStripeCustomer()代码,手动传入必填参数创建客户:

// 替换原有$user->createOrGetStripeCustomer()逻辑
if (empty($user->stripe_id)) {
    $stripeCustomer = $user->createAsStripeCustomer([
        'name' => $user->name,
        'email' => $user->email,
    ]);
}

第五步:版本兼容性排查

如果使用Cashier v14+版本,需要确保Stripe PHP SDK版本 >=7.67,可执行composer update laravel/cashier stripe/stripe-php更新到兼容版本。

内容的提问来源于stack exchange,提问作者Matthew Foster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:36:02