结合使用Stripe Intents API和计费(定期订阅)

时间:2019-03-28 10:23:43

标签: stripe-payments

我已经尝试了三种不同的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安全对话框。

1 个答案:

答案 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