Laravel出纳将付款同步到下个月的第一个月
我一直在尝试使用Laravel出纳集成订阅服务的支付系统 我已经设置了我的Laravel出纳将付款同步到下个月的第一个月,laravel,stripe-payments,Laravel,Stripe Payments,我一直在尝试使用Laravel出纳集成订阅服务的支付系统 我已经设置了我的注册控制器,以便它计算出离下个月的第一天还有多少天 使用$user->trial\u ends\u at=Carbon::now()->addDays($datediff) 创建用户时,它会将试用结束日期设置为下个月的第一个月 在这里,我想使用$user->onTrial()方法来创建实际订阅 请注意:即使创建了用户,也没有在条带中创建客户,因为订阅尚未创建 我的问题: 登记表中记录了卡的详细信息,以便用户可以订阅并设置其
注册控制器
,以便它计算出离下个月的第一天还有多少天
使用$user->trial\u ends\u at=Carbon::now()->addDays($datediff)代码>
创建用户时,它会将试用结束日期设置为下个月的第一个月
在这里,我想使用$user->onTrial()
方法来创建实际订阅
请注意:即使创建了用户,也没有在条带中创建客户,因为订阅尚未创建
我的问题:
登记表中记录了卡的详细信息,以便用户可以订阅并设置其付款方式。这包括对卡进行条带验证并发回令牌
此令牌可以存储并在以后使用吗?
假设我以后可以使用此令牌,要在出纳中创建实际订阅,我必须使用非传统方法检查用户试用是否已结束
订阅是使用以下方法创建的:
$user->subscription($subscription_plan)->create($stripeToken);
在哪里最好添加上述代码,以便用户订阅,并在试用期结束时开始计费?
文档中根本没有提到这一点,所以我只是想知道是否创建了一个新的控制器来实际启动订阅,在哪里调用函数,以及如何在每个用户试用结束时让它运行
编辑:
使用队列可以实现类似的功能吗
然后在设置的时间为每个用户运行订阅方法。至于条带令牌,您需要在创建后的几分钟内使用它。预计不会持续更长时间
至于你的其他问题,我不是一个喜欢拉威尔的人,所以我不能这么说,但是PHP的strotime()函数接受各种字符串并返回一个时间戳。因此,如果您总是希望在下个月的第一个中午开始计费,您可以将时间戳设置为:
strtotime('first day of next month 12:00');
希望有帮助,
拉里
PS我在Stripe从事支持工作。我注意到在订阅的同时创建Stripe客户时出现了一些问题。我在Stripe中遇到了很多额外的客户,因为如果创建了客户,但订阅有错误,它不会在Cashier中连接这些客户,而是在Stripe中连接客户
为了将两者分开,我在用户模型中创建了一个helper方法。它将允许我创建客户,而无需创建订阅。然后,我可以稍后创建订阅
我认为这解决了你的问题
用户模型中的帮助器方法:
/**
* Method to create stripe customer without subscription
*/
public function createStripeCustomer($token, $properties) {
$gateway = $this->subscription();
$customer = $gateway->createStripeCustomer($token, $properties);
$gateway->updateLocalStripeData($customer);
}
public function getStripeCustomer() {
$gateway = $this->subscription();
return $gateway->getStripeCustomer();
}
然后在我处理订阅的API控制器中:
if (!$user->getStripeId()) {
$user->createStripeCustomer($inputs['token'], ['email' => $user->email]);
//this can be done at a much later time, the customer is already stored.
$user->subscription($inputs['plan'])->create(null, [], $user->getStripeCustomer());
Flash::success("Subscription Success!");
} elseif (!$user->getStripeSubscription()) {
$user->subscription($inputs['plan'])->create($inputs['token'], [], $user->getStripeCustomer());
Flash::success("Subscription Success!");
}
为清除代币过期而欢呼。这帮助我决定了前进的方向。我设置审判结束日期的功能基本上与您上面写的相同,但是如果是这样的话,使用出纳可能无法实现。你认为我应该从头开始,只使用stripe.js与stripe集成,而不使用预构建的包吗?我很难说。我没有使用过拉威尔或出纳,所以我不知道出纳有多好或灵活。但是,如果你已经在出纳的道路上,我倾向于尝试首先使之工作。哇,这看起来是一个有趣的阅读。我打算在周末采取行动,如果这能解决我的问题,我会批准的。
if (!$user->getStripeId()) {
$user->createStripeCustomer($inputs['token'], ['email' => $user->email]);
//this can be done at a much later time, the customer is already stored.
$user->subscription($inputs['plan'])->create(null, [], $user->getStripeCustomer());
Flash::success("Subscription Success!");
} elseif (!$user->getStripeSubscription()) {
$user->subscription($inputs['plan'])->create($inputs['token'], [], $user->getStripeCustomer());
Flash::success("Subscription Success!");
}