从 PaymentIntent 获取购买的产品
Posted
技术标签:
【中文标题】从 PaymentIntent 获取购买的产品【英文标题】:Get purchased product from PaymentIntent 【发布时间】:2022-01-18 22:24:10 【问题描述】:在我的应用程序中,我想列出条纹客户过去的购买记录。所以我正在查看相关的 API 对象,例如 PaymentIntents
、Sessions
或 Charges
。但它们似乎都没有包含对Product
或Price
的任何引用,我需要列出购买的产品。
Subscriptions
包含该订阅中包含的项目列表,所以我期待 PaymentIntents
也有类似的东西。
有人知道如何归档我过去的购买清单吗?谢谢!
【问题讨论】:
您是如何创建购买的? PaymentIntent,结帐会话,收费?传入的参数是什么? 我正在使用条带结帐,所以我只是手动创建会话对象,我在其中传递客户和价格以及与结帐页面相关的一些其他参数。 PaymentIntent 和 Charge 然后由条带托管的结帐页面创建。我认为您可以向 PaymentIntent 添加描述,您可以在其中存储产品 ID 或类似的东西,但这似乎是我认为常见用例的黑客攻击。 您始终可以将元数据附加到 Stripe 对象 stripe.com/docs/api/metadata 这就是许多公司将订单 ID 等内容从他们的系统关联到 Stripe 数据的方式。 【参考方案1】:我对 Stripe API 文档[1] 进行了一些挖掘,并且在您引用的三个对象(PaymentIntent
、Session
、Charges
)中,我看到的唯一一个能够追溯一个产品是Session
。
会话对象有一个line_items
属性[2],可以一直跟踪到line_items.data.price.product
[3]。要访问它,您需要在调用中包含 expand=["data.line_items"]
参数以列出结帐会话。您可以在此处阅读有关扩展 API 响应的更多信息[4]
因此,对于使用 Checkout Sessions 向您的客户收取的所有费用,您可以将它们全部列出,使用 customer
属性将每个 session 与您的应用程序中的客户相关联,遍历返回的数据,然后查询产品详细信息的 API。如果您有很多客户和产品,这些 API 调用会很快加起来,所以我会将这些数据存储在您的后端以避免达到速率限制[5]。
或者,您可以将产品 ID(Stripe 或您的本地版本)保存为上述任何 Stripe 支付对象的元数据[6]。这将允许您将任何您希望的付款对象链接到产品。
-
https://stripe.com/docs/api
https://stripe.com/docs/api/checkout/sessions/object#checkout_session_object-line_items
https://stripe.com/docs/api/checkout/sessions/object#checkout_session_object-line_items-data-price-product
https://stripe.com/docs/expand
https://stripe.com/docs/rate-limits
https://stripe.com/docs/api/metadata
【讨论】:
谢谢瑞恩!我想测试这个解决方案,但后来我注意到,您不能查询Sessions
并按Customer
过滤。 PaymentIntent
和 Charge
都允许你这样做。所以我必须查询所有Sessions
,然后在我的后端过滤Customer
,这有点低效。我觉得奇怪的是似乎没有简单的方法来存档。
是的,我也在寻找客户过滤器,但 Sessions 无法做到这一点。在这种情况下,我会使用自动分页功能 (stripe.com/docs/api/pagination/auto) 循环遍历所有会话并将相关产品分配给后端的客户。以上是关于从 PaymentIntent 获取购买的产品的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用 Stripes PaymentIntent 更改订单金额吗?
无法在应用购买中从 iTunes Connect 获取产品标识符?
Stripe PaymentIntent 键未定义 |无法从控制器传递 ClientSecret 密钥 | ASP.NET MVC