Laravel Cashier + Stripe: 没有此客户

4
我正在使用Laravel Cashier和Stripe来开发Web应用的订阅功能。
我使用Stripe v3 JavaScript API,并使用卡片元素生成Stripe令牌。Stripe令牌已生成,如果您查看Stripe仪表板,则会创建客户。此外,stripe id保存在用户数据库中。但是,当我尝试使用以下代码订阅用户到计划时:
$user->newSubscription($planId, $planId)->create($stripeToken, [
            'email' => $user->email
]);

它失败了,出现了错误:“没有这个客户:cus_xxxxxx”。$planId变量是Stripe中计划的ID。

像我说的那样,stripe令牌被正确生成,在Stripe仪表板中创建了客户,并且stripe id已在数据库中设置。我已经深入研究了Laravel Cashier代码,似乎它在尝试更新卡信息时遇到了错误。更具体地说,它在这个函数中失败了:

public function asStripeCustomer()

这是在计费模型中找到的。

我联系了Stripe支持,他们说在创建初始客户之后,不会再进行任何进一步的API请求。

我的laravel版本是5.5.34,并且我正在使用最新的Cashier发布版。我已尝试重新安装Cashier,但它仍然无法正常工作。我还刷新了缓存。

非常感谢您提供的任何帮助。

3个回答

5
这意味着用户的条纹客户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

以防将来其他人遇到此问题,我成功解决了它。

本质上,问题归结于您的数据库设置。对我而言,我的数据库设置保存为小写字母。Stripe在其客户键中区分大小写。在我将数据库更改为区分大小写后,问题得到了解决。


0

您在Stripe中创建了计划吗?如果是的话,您可以这样调用它

    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中创建的。然而,代码甚至没有到达向用户收费的点。当尝试设置卡片信息时,它失败了。 - Aaron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接