在我的应用程序中,我想列出 Stripe 客户过去的购买情况。所以我正在查看相关的 API 对象,例如
PaymentIntents
、Sessions
或 Charges
。但它们似乎都不包含任何对 Product
或 Price
的引用,我需要列出购买的产品。
Subscriptions
包含该订阅中包含的项目列表,所以我期待 PaymentIntents
也有类似的东西。
有人知道如何存档我过去的购买清单吗?谢谢!
我对 Stripe API 文档 [1] 进行了一些挖掘,在您引用的三个对象(
PaymentIntent
、Session
、Charges
)中,我看到唯一一个能够追溯到产品是Session
。
Session 对象有一个
line_items
属性[2],可以一直遵循到 line_items.data.price.product
[3]。 要访问此功能,您需要在调用中包含 expand=["data.line_items"]
参数以列出结帐会话。 您可以在此处阅读有关扩展 API 响应的更多信息[4]
因此,对于使用 Checkout Sessions 向客户收取的所有费用,您可以将它们全部列出,使用
customer
属性将每个会话与应用程序中的客户关联,遍历返回的数据,然后查询 API了解产品详情。 如果您有很多客户和产品,这些 API 调用会快速增加,因此我会将这些数据存储在您的后端,以避免达到速率限制[5]。
或者,您可以将产品 ID(Stripe 或您的本地版本)保存为上述任何列出的 Stripe 支付对象的元数据[6]。 这将允许您将任何您想要的付款对象链接到产品。
我通过将产品信息(例如 id、名称、描述)添加到 Stripe.Checkout.SessionCreateParams 中的 payment_intent_data.metadata 来解决 https://docs.stripe.com/api/checkout/sessions/create
当您使用 stripe.charges.list 检索费用时,您会在元数据字段中获取这些信息。
我有同样的问题,我找到了一种方法来检索与特定 PaymentIntent 相关的产品。
您需要在结帐流程完成时获取链接到 PaymentIntent 的会话。 我会给你我用来做这个的代码(PHP)。
\Stripe\Stripe::setApiKey(STRIPE_API_SECRET);
// Find the Session for that PaymentIntent
$sessions = \Stripe\Checkout\Session::all([
'payment_intent' => "pi_xxxxxxxxxx",
'expand' => ['data.line_items'],
]);
然后您将拥有一个包含链接产品的密钥 line_items。
享受