Laravel Cashier 保存到条带而不是 DB

问题描述 投票:0回答:3

创建用户后,Laravel Cashier 不会将条带数据保存到我的数据库中。

当我创建一个新用户,然后尝试将订阅()分配给该用户(或任何其他用户)时,数据会适当地发送到 Stripe,因为我可以看到客户 ID、选择的计划等。 ..但是我的数据库用户条带列没有在我的数据库中更新。

当我删除 create() 用户的代码并仅订阅用户时,数据会像应有的那样保留到数据库中。只有在我创建新用户然后尝试订阅任何用户后它才不起作用。

我正在使用 Jeffrey Way 的模型验证包。

$user = $this->userModel->create($input);

if ($user->hasErrors()) {
    throw new \Exception($user->getErrors());
}

$this->createStripeSubscription($user->id, $input['creditCardToken']);

private function createStripeSubscription($user_id, $token) {
    //$this->userModel->find(1)->subscription('monthly')->create($token); // Doesn't work either
    $this->userModel->find($user_id)->subscription('monthly')->create($token);
}
php laravel laravel-4 stripe-payments
3个回答
1
投票

我在 Confide 中进行 Ardent 验证时遇到了类似的问题。

在用户模型中重写 BillableTrait 的保存方法解决了该问题。

class User extends ConfideUser implements BillableInterface {

    use BillableTrait;

    public function saveBillableInstance()
    {                            
        $this->forceSave();        
    }
}

0
投票

问题是与 Jeffrey Way 的验证模型包发生冲突。或者至少是我在使用收银员时尝试实现它的方式。我决定在它自己的类中抽象出我的验证并删除验证模型包。一切都好。


0
投票

我也遇到了同样的问题,Laravel Cashier 将罚款保存到 stripe,但不保存到我的数据库。
但是,我在本地开发环境中遇到了这种情况。
运行 stripe Listen 命令解决了该问题。

详情如下:
了解为什么记录仅在运行 stripe Listen 时保存。

您的订阅记录仅在您运行时才会保存到数据库的原因:

stripe listen --forward-to http://localhost-url/stripe/webhook

是因为您的本地开发环境(http://localhost-url)无法从互联网访问。因此,Stripe 无法将 Webhook 事件直接发送到您的本地服务器。 Stripe CLI 提供的 stripe Listen 命令充当 Stripe 服务器和本地计算机之间的代理,将 Webhook 事件转发到本地 Webhook 端点。

总结:

没有 stripe 监听:Stripe 的服务器无法到达您的本地 webhook 端点 (http://localhost-url/stripe/webhook),因为它不可公开访问。 使用 stripe 监听:Stripe CLI 监听 Stripe 服务器上的事件并将其转发到您的本地端点,从而允许您的应用程序处理 Webhooks。


此外,我已将此路由添加到我的 web.php 文件中。

Cashier route I added for stripe webhooks

您不需要添加此路由。收银员会自己为您添加。

© www.soinside.com 2019 - 2024. All rights reserved.