stripe-payments - 将 Stripe Intents API 与 Billing(重复订阅)结合使用

标签 stripe-payments

我已经尝试了三个不同的 Stripe 支持人员来获得明确的答案。似乎没有人知道如何解决这个问题。我想使用 Stripe 为客户注册定期订阅。选择计划时,会显示信用卡表格。客户输入信用卡信息,然后点击支付,订阅就创建好了。

我已经使用 Stripe.js 和 token 通过向我的客户端添加一些 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, ...);
        }
    });
}

在服务器上,我将 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);

这会生成一个我发送回给我的客户的客户 secret 。而不是打电话 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 安全对话框的最简单的可能解决方案。

最佳答案

Stripe 目前正致力于将 PaymentIntents 与订阅集成,并计划在 2019 年 4 月支持该流程。一旦可用,您肯定会想要使用 PaymentIntents。由于它是在不久的将来,您可能只想等到它可用。

如果您需要在此期间使其正常工作,this guide引导您通过初始 3DS 检查设置订阅。这是您所谈论的试用期的推荐方法。

更新

根据 Stripe 的说法,支付意图的完整规范日期已移至 2019 年 7 月 1 日:

使用支付意图 API 进行休会付款

第3点说:

You will need to make incremental changes in order to claim exemptions and decrease the rate of authentication challenges required by your customers—this will be ready by July 1, 2019.



https://stripe.com/docs/strong-customer-authentication/migration#step-2

关于stripe-payments - 将 Stripe Intents API 与 Billing(重复订阅)结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55395227/

相关文章:

laravel - 未捕获的 IntegrationError : Please call Stripe() with your publishable key. 您使用了空字符串

php - Laravel Spark,添加订阅计划后仅显示取消订阅选项

javascript - 如何根据选中的复选框数量设置 Stripe 按钮的收费金额

node.js - bundle.js :50930 Uncaught TypeError: require(. ..).createServer 不是函数

node.js - 类型错误 : Cannot read property 'list' of undefined of balanceTransactions

stripe-payments - 在 strip 支付网关中处理客户延迟的正确方法

android - 如何在 Android 上向用户付费

django - 将 csrf token 传递给 Stripe

ruby-on-rails - Multi-Tenancy 应用程序的 Stripe Connect 重定向 uri 问题

java - java Stripe api 调用什么函数来完成快速帐户连接?