如何解决Laravel Cashier:Stripe仪表板中未显示针对新用户的通用试用版
我有一个注册端点,可以在其中创建一个新用户并在通用试用期内对其进行设置(无需输入信用卡信息):
public function register(Request $request) {
//... other not important things for this
$user = new User([
'name' => $request->get('name'),'email' => $request->get('email'),// other fields not important...
'trial_ends_at' => now()->addDays(1),]);
$user->createAsStripeCustomer(); // not sure if needed
$user->save();
return response()->json($user,201);
}
在数据库中,我看到我创建了一个具有以下字段和值的用户:trial_ends_at: 2020-09-21 05:20:47
。另外,在“客户”下,我可以看到新注册的用户电子邮件:
但是,在Stripe仪表板中,它表示新试验为零:
我还有一个customer.subscription.updated
网络挂钩,它在我期望(尝试结束时)没有运行,所以我在想什么导致Stripe无法检测到新的尝试也是最终结果导致webhook不会触发。
Stripe为什么不“领取” /不知道新的审判?
在Laravel方面,用户似乎正在试用($user->onTrial()
返回true),但在Stripe仪表板上,该用户似乎不在试用中(未显示新的试用,请参见上面的屏幕截图)。
解决方法
Stripe没有“通用试验”的概念(未附在特定订阅计划上的试验),只有Laravel Cashier对此有概念(使用Main
字段)。
我创建了一个计划的订阅,而不是通用试用版,传递了trial_ends_at
的paymentMethod,还包括了null
选项。这样一来,我们无需先为该用户准备付款方式,即可创建试用版。
这是执行此操作的代码:
trial_period_days
另外,在创建用户时,请记住仍然包括$trialDays = 30;
$planId = "<your stripe price id>";
$user->createAsStripeCustomer();
$user->newSubscription('<name of subscription>',$planId)
->create(null,[
'email' => $user->email
],['trial_period_days' => $trialDays]);
字段,以便我们在数据库中拥有的内容与Stripe拥有的内容相匹配:
trial_ends_at
用户现在将在Stripe仪表板中处于试用期,由于$trialEndsAt = now()->addDays($trialDays);
$user = new User([
//...
'trial_ends_at' => $trialEndsAt
]);
$user->save();
字段中的日期时间大于当前日期时间,因此使用$user->onTrial()
将返回true。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。