首页 > 解决方案 > Stripe\Exception\InvalidArgumentException 资源 ID 不能为空或空格。#1266

问题描述

Cashier 版本:13.5 Laravel 版本:8.63.0 PHP 版本:8.0.1 数据库驱动程序和版本:mysql 10.4 当我尝试添加新订阅时,出现错误“资源 ID 不能为空或空格。”。在尝试使用用户模型时,它工作正常。但我需要用另一个自定义模型 AppUser 来做。这与用户模型非常相似。

在引导方法下的 AppserviceProvder 中,我给出了

Cashier::useCustomerModel(AppUser::class);

在给定 Billable 和关系的 AppUser 模型中,

namespace App\Models;

use Carbon\Carbon;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Cashier\Billable;

// Authenticatable trait is required to work as User Model
class AppUser extends Authenticatable
{
    use Billable;
    use Notifiable;
    public function subscriptions()
    {
        return $this->hasMany(\App\Subscription::class, 'app_user_id')->orderBy('created_at', 'desc');
    }

我的订阅模式是

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Laravel\Cashier\Subscription as CashierSubscription;

class Subscription extends CashierSubscription
{
    use HasFactory;

    public function owner()
    {
        return $this->belongsTo(AppUser::class);
    }

    public function items()
    {
        return $this->hasMany(SubscriptionItem::class);
    }
}

SubscriptionItem 模型是

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Laravel\Cashier\SubscriptionItem as CachierSubscriptionItem;

class SubscriptionItem extends CachierSubscriptionItem
{
    use HasFactory;

    public function subscription()
    {
        return $this->belongsTo(Subscription::class);
    }
}
In My Config/ Auth.php

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'app_user' => [
            'driver' => 'session',
            'provider' => 'app_users',
        ],
    ],

 'providers' => [
        'app_users' => [
            'driver' => 'eloquent',
            'model' => App\Models\AppUser::class,
        ],

        'users' => [
            'driver' => 'database',
            'table' => 'app_users',
        ],
    ],

最后我的控制器是,

config(['cashier.model' => 'App\Models\AppUser']);

        $data = $request->all();

          $user = AppUser::find($data['user_id']);
        $paymentMethod = $request->input('payment_method');

        $plan = $request->input('plan');
        $plan = $plan ? $plan : 'halfyearly_NZD';

        $response =  $user->newSubscription('main', $plan)->create($paymentMethod);

标签: phplaravelstriplaravel-cashier

解决方案


经过一整天的调试,我发现了问题所在。

在我的 app_users 表中创建新客户时,我只是将 stripe-id 归档为空白。它应该是条带 id 或必须设置为 NULL。

另一个重要的一点,stripe_id 文件是高度区分大小写的,所以保持它为 utf8mb4_ci 编码


推荐阅读