Laravel收银员+条纹:没有这样的顾客
Laravel Cashier + Stripe: No Such Customer
我正在使用 Laravel Cashier 和 Stripe 为 Web 应用程序开发订阅。
我正在使用 Stripe v3 JavaScript API 并使用卡片元素生成 Stripe 令牌。正在生成 Stripe 令牌,如果您在 Stripe 仪表板中查看,则会创建一个客户。此外,一个 stripe id 被保存在用户数据库中。但是,当我尝试使用以下代码为用户订阅计划时:
$user->newSubscription($planId, $planId)->create($stripeToken, [
'email' => $user->email
]);
失败并显示错误:"No such customer: cus_xxxxxx"。 $planId 变量是 Stripe 中计划的 ID。
就像我说的,条带令牌生成正确,客户在条带仪表板中创建,条带 ID 在数据库中设置。我已经深入研究了 Laravel 收银台代码,它似乎在尝试更新卡信息时出错。更具体地说,它在这个函数上失败了:
public function asStripeCustomer()
可在计费模型中找到。
我联系了 Stripe 支持,他们说在创建初始客户后没有向他们的 API 发出进一步的请求。
我的 laravel 版本是 5.5.34,我使用的是最新的 Cashier 版本。我已尝试重新安装 Cashier,但仍然无法正常工作。我也刷新了我的缓存。
非常感谢任何帮助。
你在条纹中制定了你的计划吗?如果是这样你可以这样称呼它
try {
$user->newSubscription('myplan','myplan')
->create($stripeToken);
}
} catch (\Exception $e) {
Session::flash('error_message', 'There has been an error processing your payment.');
return redirect('/');
}
为了防止将来其他人遇到这个问题,我设法解决了这个问题。
本质上,问题归结为您的数据库设置。对我来说,我的数据库设置将所有内容保存为小写。 Stripe 对其客户密钥区分大小写。在我将数据库更改为区分大小写后又开始工作了。
这意味着用户的条带客户 ID(存储在 stripe_id
列中)的当前值无效。
所以,只需删除它,下次调用 newSubscription()
时,它将再次创建新客户。
此外,您可以通过执行以下操作来处理此问题:
try {
$user->newSubscription($subscription, $plan)->create($request->stripeToken);
} catch (\Exception $e) {
// No such customer. Invalid value in stripe_id. Clean it, for making the next request successfully
$user->stripe_id = NULL;
$user->save();
}
我正在使用 Laravel Cashier 和 Stripe 为 Web 应用程序开发订阅。
我正在使用 Stripe v3 JavaScript API 并使用卡片元素生成 Stripe 令牌。正在生成 Stripe 令牌,如果您在 Stripe 仪表板中查看,则会创建一个客户。此外,一个 stripe id 被保存在用户数据库中。但是,当我尝试使用以下代码为用户订阅计划时:
$user->newSubscription($planId, $planId)->create($stripeToken, [
'email' => $user->email
]);
失败并显示错误:"No such customer: cus_xxxxxx"。 $planId 变量是 Stripe 中计划的 ID。
就像我说的,条带令牌生成正确,客户在条带仪表板中创建,条带 ID 在数据库中设置。我已经深入研究了 Laravel 收银台代码,它似乎在尝试更新卡信息时出错。更具体地说,它在这个函数上失败了:
public function asStripeCustomer()
可在计费模型中找到。
我联系了 Stripe 支持,他们说在创建初始客户后没有向他们的 API 发出进一步的请求。
我的 laravel 版本是 5.5.34,我使用的是最新的 Cashier 版本。我已尝试重新安装 Cashier,但仍然无法正常工作。我也刷新了我的缓存。
非常感谢任何帮助。
你在条纹中制定了你的计划吗?如果是这样你可以这样称呼它
try {
$user->newSubscription('myplan','myplan')
->create($stripeToken);
}
} catch (\Exception $e) {
Session::flash('error_message', 'There has been an error processing your payment.');
return redirect('/');
}
为了防止将来其他人遇到这个问题,我设法解决了这个问题。
本质上,问题归结为您的数据库设置。对我来说,我的数据库设置将所有内容保存为小写。 Stripe 对其客户密钥区分大小写。在我将数据库更改为区分大小写后又开始工作了。
这意味着用户的条带客户 ID(存储在 stripe_id
列中)的当前值无效。
所以,只需删除它,下次调用 newSubscription()
时,它将再次创建新客户。
此外,您可以通过执行以下操作来处理此问题:
try {
$user->newSubscription($subscription, $plan)->create($request->stripeToken);
} catch (\Exception $e) {
// No such customer. Invalid value in stripe_id. Clean it, for making the next request successfully
$user->stripe_id = NULL;
$user->save();
}