创建用户后,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);
}
我在 Confide 中进行 Ardent 验证时遇到了类似的问题。
在用户模型中重写 BillableTrait 的保存方法解决了该问题。
class User extends ConfideUser implements BillableInterface {
use BillableTrait;
public function saveBillableInstance()
{
$this->forceSave();
}
}
问题是与 Jeffrey Way 的验证模型包发生冲突。或者至少是我在使用收银员时尝试实现它的方式。我决定在它自己的类中抽象出我的验证并删除验证模型包。一切都好。
我也遇到了同样的问题,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 文件中。
您不需要添加此路由。收银员会自己为您添加。