当前位置: 首页 > 知识库问答 >
问题:

使用3d secure升级订阅并添加新的支付方式

柴增
2023-03-14

我创建了https://stripe.com/docs/billing/subscriptions/elements中描述的订阅,但现在我想让用户选择更改订阅计划并使用另一种支付方式,例如3d Secure卡。但是,如果我更新订阅以获取新的支付意图的客户端机密,如下所示:

func (c *Client) UpdateSubscription(s *models.Subscription) (*models.Subscription, error) {
    sps := &stripe.SubscriptionParams{
        DefaultPaymentMethod: stripe.String(s.PaymentMethodId),
        CancelAtPeriodEnd:    stripe.Bool(false),
        ProrationBehavior:    stripe.String(string(stripe.SubscriptionProrationBehaviorAlwaysInvoice)),
    }
    if s.CreatePaymentIntent {
        s.PaymentBehavior = "allow_incomplete"
        sps.PaymentBehavior = stripe.String(s.PaymentBehavior)
        sps.AddExpand("latest_invoice.payment_intent")
    } else if s.ItemID != "" {
        sps.Items = []*stripe.SubscriptionItemsParams{
            {Price: stripe.String(s.PriceID)},
            {ID: stripe.String(s.ItemID), Deleted: stripe.Bool(true)},
        }
    }
    ss, err := sub.Update(s.ID, sps)
    if ss.LatestInvoice != nil && ss.LatestInvoice.PaymentIntent != nil {
        s.PaymentIntentClientSecret = ss.LatestInvoice.PaymentIntent.ClientSecret
    }
    return s, err
}

订阅的PaymentIntentClientSecret与订阅相同,这意味着订阅已被处理。Stripe“confirm card”API抛出错误payment\u intent\u unexpected\u statehttps://stripe.com/docs/error-codes/payment-intent-unexpected-state这可能是因为我之前使用了支付意图来创建订阅。然而,我仍然需要一个新的支付意图来授权新卡。

共有1个答案

卢出野
2023-03-14

您收到这些错误的PaymentIntent的状态是什么?

看起来您正在正确更新订阅的价格和付款方法,并为此分段计算创建新发票。如果是这种情况,发票可能会在更新时自动获得付款。因此,发生此错误可能是因为您试图确认已成功向客户收取费用的PaymentIntent。

我认为当你在功能中获得更新的订阅对象时,最好检查LatestInvoice的PaymentIntent的状态。

  • 如果状态为成功,您可以简单地向客户发送更新订阅成功的消息。
  • 如果状态为requires_action,您应该将PaymentIntent的客户端机密发送回您的客户端并调用handleCardAction[1]以允许您的客户解决可能需要采取的任何操作(3DS Auth等)
  • 如果状态为requires_payment_method则新卡被拒绝,您应该让您的客户输入新的信用卡信息以尝试再次更新订阅的PaymentMethod。

[1]https://stripe.com/docs/js/payment_intents/handle_card_action

 类似资料:
  • 我注意到,当购买个人产品与订阅产品冲突时,添加到购物车。

  • 我正在开发一个web应用程序,我遵守REST API标准。我正在搜索REST API的最佳实践订阅和付款。 当新用户订阅“PRO计划”时,用户需要支付计划费用,这是一个交易。 对于升级、取消或更新计划,是否应设置put:和或其他endpoint?

  • 我正在使用stripe-php库实现stripe订阅,遵循这个https://stripe.com/docs/billing/subscriptions/fixed-price文档 使用失败的付款方式模拟客户订阅,在发票状态打开的情况下成功生成条带订阅对象。 问题是在我的后端实现重试发票时,我的代码如下: 在stripe dashboard上,客户默认付款方式已成功更新为最新的付款方式(有效卡),

  • 我四处搜索,找到了关于如何在woocommerce中添加产品的链接,但关于如何使用自定义php片段更新或添加订阅记录的链接不多。

  • 支付宝小程序my.requestSubscribeMessage,我已经调起订阅,点击“好的”,可接口返回的是“用户未订单,消息发送失败”,这可能是哪里的问题?

  • 通过 BaaS SDK 提供的 wx.BaaS.order(OBJECT) 方法, 可查询到交易的详细信息。典型的使用场景为: 调用 wx.BaaS.pay(object) 发起支付, 在成功回调中获取到 transactionID, 在要路由到新的页面时带上此 ID, 在新页面的 onLoad 方法中获取到该 ID, 从而使用此 ID 获取交易的详细信息。 OBJECT 参数说明 参数 类型 必