我已经尝试了三种不同的Stripe支持人员来获得明确的答案。似乎没有人知道如何解决这个问题。我想使用Stripe为定期订阅的客户注册。选择计划时,将显示信用卡表格。客户输入信用卡信息,然后单击“付款”并创建订阅。
我已经通过使用Stripe.js和令牌通过向客户端添加一些JavaScript来做到这一点:
function pay() {
stripe.createToken(card).then(function (result) {
if (result.error) {
// Do something
} else {
var token = result.token.id;
$.post("/api/subscriptions/create?token=" + token, ...);
}
});
}
在服务器上,我将令牌放置在客户身上(C#中的示例,但可以是任何东西):
customerService.Update(customerId, new CustomerUpdateOptions
{
SourceToken = token,
});
并创建订阅:
var items = new List<SubscriptionItemOption> {
new SubscriptionItemOption {
PlanId = newPlanId,
},
};
var subscriptionCreateOptions = new SubscriptionCreateOptions
{
CustomerId = customerId,
Items = items,
};
Subscription subscription = stripe.Subscriptions.Create(subscriptionCreateOptions);
到目前为止,一切正常。 Stripe自动为第一笔付款创建发票并创建自动费用。它还会为下个月生成一张看起来不错的发票。
我现在应该很高兴,但我不高兴。测试上述代码时,不适用于需要3D安全和类似扩展身份验证检查的卡。在那种情况下,创建订阅时我会从Stripe收到错误消息,说该卡无效(我想是因为我们从未完成3D安全身份验证)。
根据我从Stripe文档中了解的内容,显示3D安全身份验证对话框将要求我使用Checkout或Intents API。我不想使用Checkout,但是Intents API看起来像是正确的选择。
使用意图,我需要先提出意图:
var createOptions = new PaymentIntentCreateOptions {
Amount = 4900,
Currency = "usd",
PaymentMethodTypes = new List<string> { "card" }
};
paymentIntents.Create(createOptions);
这将产生一个客户机密,然后将其发送回我的客户。而不是调用createToken
。在客户端上,我调用handleCardPayment
函数,该函数在需要时显示3D安全模态:
stripe.handleCardPayment(
clientSecret, cardElement
).then(function(result) {
if (result.error) {
// Display error.message in your UI.
} else {
$.post("/api/subscriptions/create?...");
}
});
这里的问题是handleCardPayment
向客户收取费用。我不想要那样,因为我想每月自动为客户开票。
有人知道是否可以在不使用意图的情况下,或者至少在不产生费用的情况下,显示3D安全性(或类似结果)?我读过类似的问题,人们建议创建费用,然后通过1个月的试用期创建订阅。这并没有我想要的效果,因为这将在第一个月产生费用,并在接下来的几个月产生费用发票。
基本上,我只想要最简单的解决方案,仍然显示3D安全对话框。
答案 0 :(得分:4)
Stripe当前正在将PaymentIntents与Subscriptions集成在一起,并计划在2019年4月支持该流程。一旦可用,您肯定会想要使用PaymentIntents。由于它是在不久的将来,您可能只想等到它可用。
如果您需要同时进行此操作,this guide将引导您设置带有初始3DS检查的订阅。在您所讨论的试用期中,这是推荐的方法。
更新
根据Stripe的说法,“付款意图”的完整规范日期已移至2019年7月1日:
使用付款意图API进行的场外付款
第3点:
您需要进行增量更改才能申请豁免 并降低您要求的身份验证挑战的速度 客户-将于2019年7月1日准备就绪。
https://stripe.com/docs/strong-customer-authentication/migration#step-2