php - 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);
解决方案
经过一整天的调试,我发现了问题所在。
在我的 app_users 表中创建新客户时,我只是将 stripe-id 归档为空白。它应该是条带 id 或必须设置为 NULL。
另一个重要的一点,stripe_id 文件是高度区分大小写的,所以保持它为 utf8mb4_ci 编码
推荐阅读
- bash - 如何删除字符串末尾的指定字符?
- c# - 将 CorrelationId 添加到 ASP.NET MVC5 中的远程调用
- android - 加载 AppCompat ActionBar 失败,出现未知错误。beta01 3.1.3 请帮帮我
- python - 导致 IndexError 的类似字符串
- gdb - 我可以用前导零打印 rax 寄存器的内容吗?
- bash - 带有“-pattern_type glob”的ffmpeg和bash脚本中的变量
- mysql - Mysql2::Error: 表 'xxxxxxx' 已经存在
- c - Linux内核模块中的UART通信
- reactjs - 列表加载时,SectionList contentinset 不适用
- android - 创建一个简单的 VOIP 应用程序