stripe-payments - 订阅设置试用期时如何防止在条带中创建重复订阅
问题描述
我遇到了条纹问题。让我解释一下我的工作场景。我的要求是在 14 天内不向用户收取预付卡费用
1)用户输入卡的详细信息
2)sca弹出出现
3)无论用户是否完成身份验证,都不会在条带中创建订阅,因为我设置了 trial_end_date=>now()+14 天
4)用户支付失败,再次尝试,另一个订阅创建
我担心重复订阅,因为 Stripe 会在 14 天后尝试为这两个订阅付款,因为它会为这两个订阅的持卡人发送 Stripe 托管的链接
让我简要介绍一下我目前所拥有的
$data['customer']='customerId';
$data['items']=[];
$data['items'][0]['plan']='stripe_plan_id'
$data['default_payment_method']='pm_xxxx'
$data['trial_end']= strtotime('+14 days');
$data['prorate']=true;
$data['tax_percent']=env('VAT_PERCENTAGE');
$data['expand']= ['latest_invoice.payment_intent', 'pending_setup_intent'];
try {
$subscription=\Stripe\Subscription::create($data);
}
catch(Exception $e) {
return response()->json(['success' => false,'message'=>$e->getMessage()]);
}
我错过了什么?如何防止重复订阅方案。请用我缺少的正确示例进行说明。提前致谢
解决方案
我认为问题出在您的付款流程中,没有明确检测重复订阅的条带 api。毕竟,您可以为每个客户 ID 分配超过 1 个订阅。您可以创建幂等键,但这与您所说的不一样,幂等键用于在同一时间范围内意外点击提交按钮两次。
解决方案是在订阅试用期结束之前将付款方式附加到您的条带客户 ID。例如,如果您使用的是条纹元素,您会调用
下面的节点/JS示例:
const result = await stripe.createPaymentMethod({
type: 'card',
card: card
})
然后将该结果传递给您的后端
const result = await stripe.paymentMethods.attach(paymentMethodId, {customerId})
您无需创建新订阅,因为已经为该用户创建了订阅。信用卡分配给客户 ID,而不是订阅。Stripe 将完成剩下的工作。
您还需要使用默认付款方式更新客户,如下所示:
const customer_update = await stripe.customers.update(stripeCustomerId,{invoice_settings: {default_payment_method:paymentMethodId}});
现在,当您访问仪表板时,您将看到分配给您的客户的默认卡。一旦订阅超出试用期,将向默认卡收费。
因此,在这种情况下,不会创建重复订阅,因为您不会stripe.subscriptions.create
再次调用。
推荐阅读
- python - 根据另一列计算 groupby 中的百分比
- rxjs - Rxjs,返回类型
- python - Gem5 中 X86 模型的基准运行问题
- amazon-kinesis - KCL:在重新启动应用程序后的最后几个小时内只读数据
- html - 边框半径被 :after 隐藏
- flutter - 为什么仍然给我没有连接的设备,但是有一个模拟器已经存在?
- hbase-client - 在springboot中,hbase-client不能使用
- ios - 我无法运行颤振构建 ios
- python - 试图让两个下拉菜单显示 5 个图表
- android - 如何在 Android P 之前的 UI 测试中模拟扩展功能或顶级功能?