我正在使用Laravel Cashier和Stripe开发Web应用程序订阅。
我正在使用Stripe v3 JavaScript API并使用卡元素生成Stripe令牌。正在生成Stripe令牌,如果您在Stripe仪表板中查看,则会创建一个客户。此外,条带标识正在用户数据库中保存。但是,当我尝试使用以下代码订阅用户计划时:
$user->newSubscription($planId, $planId)->create($stripeToken, [
'email' => $user->email
]);
失败并显示错误:“没有这样的客户:cus_xxxxxx”。 $ planId变量是Stripe中计划的ID。
就像我说的那样,正确生成条带令牌,在条带仪表板中创建客户,并在数据库中设置条带ID。我已经完成了对Laravel Cashier代码的一些挖掘,并且在尝试更新卡信息时似乎收到了错误。更具体地说,它在这个功能上失败了:
public function asStripeCustomer()
可以在计费模型中找到。
我联系了Stripe支持,他们表示在创建初始客户后,没有进一步要求他们的API。
我的laravel版本是5.5.34,我正在使用最新的Cashier版本。我已经尝试重新安装收银台,它仍然无法正常工作。我也刷新了我的缓存。
非常感谢任何帮助。
答案 0 :(得分:1)
为了防止其他人在将来遇到这个问题,我设法解决了这个问题。
基本上,问题归结为您的数据库设置。对我来说,我的数据库设置保存了所有小写的内容。 Stripe的客户密钥区分大小写。我将数据库更改为区分大小写后再次开始工作。
答案 1 :(得分:1)
这意味着用户的条纹客户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();
}
答案 2 :(得分:0)
你是否创建了条纹计划?如果是这样,你可以这样称呼它
try {
$user->newSubscription('myplan','myplan')
->create($stripeToken);
}
} catch (\Exception $e) {
Session::flash('error_message', 'There has been an error processing your payment.');
return redirect('/');
}