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

sni*_*guu 8 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",
        ...
      },
      ...
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

根据文档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 上已经有一个类似的问题:https : //stackoverflow.com/questions/56490033/how-to-handle-use-stripe-sdk-through-php 但我的情况是创建我没有的订阅控制 PaymentIntent

Jat*_*mir 6

根据我的理解,仅当您选择手动处理 3D 安全身份验证https://stripe.com/docs/payments/payment-intents/verifying-status#manual-3ds-auth时才next_action.type等于redirect_to_url

根据文档:

要手动处理 3D Secure 身份验证,您可以重定向客户。当您手动确认 PaymentIntent 并提供return_url目的地以指示身份验证完成后应将客户发送到何处时,将使用此方法。手动 PaymentIntent 确认可以在服务器上执行也可以在客户端使用 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
});
Run Code Online (Sandbox Code Playgroud)

使用条纹 Python 的示例:

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

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

  • @snieguu 我的答案是包含所有链接、详细信息和片段的后续内容。在有人将其包含在评论中并且自己没有发布答案之后发布答案并没有什么问题:) (2认同)