Laravel Cashier +条纹:没有此类客户

时间:2018-02-15 16:07:09

标签: php laravel laravel-5 stripe-payments laravel-cashier

我正在使用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版本。我已经尝试重新安装收银台,它仍然无法正常工作。我也刷新了我的缓存。

非常感谢任何帮助。

3 个答案:

答案 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('/');
    }