如何获得PaymentIntent next_action.type = redirect_to_url而不是use_stripe_sdk进行订阅

时间:2019-07-05 07:53:43

标签: stripe-payments

我正在使用Stripe来实现Subscription *(已准备好SCA)。 我尝试处理https://stripe.com/docs/billing/subscriptions/payment#handling-action-required。 在Stripe端创建订阅后,我得到了上面文档中所述的答案:

{
  "id": "sub_XXXXXXXXXXXXXXXXXXX",
  "object": "subscription",
  "status": "incomplete",
  ...
  "latest_invoice": {
    ...
    "payment_intent": {
      "status": "requires_action",
      ...
      "next_action": {
        "type": "use_stripe_sdk",
        ...
      },
      ...
    }
  }
}

根据文档https://stripe.com/docs/api/payment_intents/object#payment_intent_object-next_action-type next_action.type可以有两个值redirect_to_urluse_stripe_sdk

所以我的问题是如何获取next_action.type = redirect_to_url(而不是use_stripe_sdk)以及如何强制条带填充next_action.redirect_to_url(因为我想在UI中自行处理) ?

*关于SO已经存在类似的问题: how to handle "use_stripe_sdk" through PHP? 但我的情况是在我无法控制PaymentIntent的情况下创建 Subscription

2 个答案:

答案 0 :(得分:2)

据我了解,仅当您选择手动处理3D安全身份验证next_action.type

时,https://stripe.com/docs/payments/payment-intents/verifying-status#manual-3ds-auth等于redirect_to_url

根据文档:

  

要手动处理3D安全身份验证,可以重定向客户。当您手动确认PaymentIntent并提供return_url目的地以指示认证完成后应将客户发送到何处时,将使用此方法。可以on the server或在客户with Stripe.js上执行手动付款意向确认。

使用Stripe.js的示例:

stripe.confirmPaymentIntent(
  '{PAYMENT_INTENT_CLIENT_SECRET}',
  {
    payment_method: '{PAYMENT_METHOD_ID}',
    return_url: 'https://example.com/return_url'
  }
).then(function(result) {
  // Handle result.error or result.paymentIntent
});

使用Stripe Python的示例:

intent = stripe.PaymentIntent.confirm(
  '{PAYMENT_INTENT_ID}',
  payment_method='{PAYMENT_METHOD_ID}',
  return_url='https://example.com/return_url'
)

编辑:根据@karllekko's的评论,在您的情况下,{PAYMENT_INTENT_ID}将是latest_invoice.payment_intent.id

答案 1 :(得分:1)

请阅读https://stripe.com/docs/payments/3d-secure-iframe-它提供了有关“ return_url”流程的更多详细信息-并描述了在“ iframe”等中自定义其可能性的可能性

该文档可能是最新文档-因此,在提出此问题(7月)时,该文档尚不存在