代码之家  ›  专栏  ›  技术社区  ›  Tintin81

如何从Stripe发票中获得默认付款方式?

  •  0
  • Tintin81  · 技术社区  · 4 年前

    我在听Stripe的 invoice.payment_failed webhook与我的网络应用程序,我想获得 default_payment_method 从每个发票,但由于某种原因,它总是只返回一个空数组!

    当我查询条纹时 invoice 在命令行上,然后展开 default_payment_method 这样地。。。

    Stripe::Invoice.retrieve('in_3K6dIY2KgYRkshw2LAzya63P', :expand => "default_payment_method")
    

    …我也得到空数组。这让我很惊讶,因为 全部的 我的Stripe客户确实有一种与他们相关的默认支付方式。

    我在这里错过了什么?

    谢谢你的帮助。

    0 回复  |  直到 4 年前
        1
  •  2
  •   karllekko    4 年前

    有三个独立的地方可以设置默认的付款方式。从更具体到不太具体,它们包括:

    • invoice.default_payment_method (您正在查看)
    • subscription.default_payment_method
    • customer.invoice_settings.default_payment_method

    如果设置了Stripe,则向最特定的一个收费。当从API读取时,这些值不是从上面的级别继承的,它们都可以单独设置,如果没有显式设置,则它们是 null 。所以这就是为什么你认为 无效的 在发票级别。

    相反,您可能希望查看Subscription对象或Customer对象(并可以利用扩展功能),这取决于您构建集成的方式及其设置的集成。

    总的来说,你可能 事实上 希望在发票付款中使用PaymentMethod?那将来自 last_payment_error .

    inv = Stripe::Invoice.retrieve({
       id: 'in_1K8iiKJoUivz182DMzSkuBgp',
       expand: ["customer.invoice_settings.default_payment_method",
           "subscription.default_payment_method",
           "payment_intent"]
      }
    )
    
    print("invoice : #{inv.default_payment_method} \n")
    print("subscription : #{inv.subscription.default_payment_method} \n")
    print("customer : #{inv.customer.invoice_settings.default_payment_method} \n")
    print("failed charge : #{inv.payment_intent.last_payment_error.payment_method} \n")