条纹从会话对象获取product_id / price_id

时间:2020-06-07 16:38:07

标签: node.js stripe-payments backend payment

我当前正在使用Stripe Webhooks来在用户购买产品时得到通知。一切正常。从付款意图中,我可以获取种子客户对象。但是我找不到获取用户支付的 product_id price_id 的方法。

有人知道获取 product_id price_id 的方法吗?

2 个答案:

答案 0 :(得分:2)

感谢您的提问。如您所见,checkout.session.completed事件中包含的会话数据不包含将价格ID与结帐会话相关联的line_items

line_items是可扩展属性之一,因此要检索“价格ID”,您要检索“结帐会话”并使用expand将行项目包括在响应中。无法配置Webhook,使发送给您的数据包括此数据。

有两种方法将客户的购买与Checkout会话相关联。首先,您可以将Checkout会话的ID与客户购买的购物车或商品清单一起存储在数据库中。这样,如果结帐会话成功,则可以按ID查找购物车并知道购买了哪些物品。

或者,您可以侦听checkout.session.completed Webhook事件,然后在收到新的成功结帐通知时,将retrieve the Sessionexpand一起使用,然后使用相关的价格数据。

使用如下所示的条带节点:

const session = await stripe.checkout.sessions.retrieve(
  'cs_test_xxx', {
    expand: ['line_items'],
  },
);
// note there may be more than one line item, but this is how you access the price ID.
console.log(session.line_items.data[0].price.id);
// the product ID is accessible on the Price object.
console.log(session.line_items.data[0].price.product);

要更进一步,如果您想要的不仅仅是产品ID,还可以通过传递line_items.data.price.product来扩展它,其中包括订单项的相关价格以及这些产品的完整产品对象价格。

答案 1 :(得分:2)

在创建付款方式时,您可以在元数据字段中存储有关对象的其他信息。

const paymentIntent = await stripe.paymentIntents.create({
    amount: 1099,
    currency: 'usd',
    payment_method_types: ['card'],
    metadata: {
        product_id: '123',
        price_id: '20',
    },
});

付款完成后,您可以从元数据字段中检索此信息。

您也可以对会话对象执行相同的操作。