Laravel出纳将付款同步到下个月的第一个月

Laravel出纳将付款同步到下个月的第一个月,laravel,stripe-payments,Laravel,Stripe Payments,我一直在尝试使用Laravel出纳集成订阅服务的支付系统 我已经设置了我的注册控制器,以便它计算出离下个月的第一天还有多少天 使用$user->trial\u ends\u at=Carbon::now()->addDays($datediff) 创建用户时,它会将试用结束日期设置为下个月的第一个月 在这里,我想使用$user->onTrial()方法来创建实际订阅 请注意:即使创建了用户,也没有在条带中创建客户,因为订阅尚未创建 我的问题: 登记表中记录了卡的详细信息,以便用户可以订阅并设置其

我一直在尝试使用Laravel出纳集成订阅服务的支付系统

我已经设置了我的
注册控制器
,以便它计算出离下个月的第一天还有多少天

使用
$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!");
    }