Stripe-node:检索结帐会话的行项目时元数据为空

问题描述 投票:0回答:1

我创建了一个条带结帐会话,在其中传递从 line_items 属性中的请求正文收到的产品。在每个产品的 product_data 中,我添加了一个包含产品 id 的 元数据

try {
        const cart: ICart[] = req.body.cart;
        const accountEmail: string = req.body.account;
        const tax: number = req.body.tax;
        const discountId: string = req.body.discount; 

        const cartItems: Stripe.Checkout.SessionCreateParams.LineItem[] =
            cart.map((item): Stripe.Checkout.SessionCreateParams.LineItem => {
                return {
                    price_data: {
                        currency: "mad",
                        product_data: {
                            name: item?.name,
                            description: item?.description,
                            images: item?.images,
                            metadata: { id: item?._id },
                        },
                        unit_amount: item?.amount * 100,
                    },
                    quantity: item?.quantity,
                };
            });

        // create the checkout session
        const session = await stripe.checkout.sessions.create({
            currency: "mad",
            ui_mode: "hosted",
            line_items: [
                ...(cartItems as Stripe.Checkout.SessionCreateParams.LineItem[]),
            ],
            billing_address_collection: "required",
            mode: "payment",
            customer_email: accountEmail,
            metadata: {
                email: accountEmail,
                tax: tax,
                discount: discountId,
            },
            success_url: `${env.APP_URL}/success?session_id={CHECKOUT_SESSION_ID}`,
            cancel_url: `${env.APP_URL}/success?session_id={CHECKOUT_SESSION_ID}`,
        });
        res.status(200).json({
            status: "success",
            session,
            clientSecret: session.client_secret,
        });
} catch (err) {
        console.log(err);
}

然后我创建了一个 webhook 来侦听 checkout.session.completed 事件类型,在其中我检索该特定结帐会话的 line_items,目的是创建 订单文档(因为我正在工作)与 mongoose)并将其保存在我的数据库中,但问题是:我找不到我在每个产品的元数据中定义的 id

// in the webhook's swith case
// retrieving the line items
case "checkout.session.completed":
      const checkoutSessionCompleted = event.data.object;
          
      // Retrieve the session's line items
      const lineItems = (await stripe.checkout.sessions.listLineItems(checkoutSessionCompleted.id)).data.map((item) => {
      return {
              _id: item.price?.metadata?.id, // returns undefined
              quantity: item.quantity, // returns the quantity
             }
         });

如果您需要证据,这里是 stripe api 文档的链接: stripe-api 文档检索 line_items

谢谢,

node.js typescript express stripe-payments
1个回答
0
投票

通过查看您的代码,我可以看出,您已在 cartItems/price_data/product_data/metadata 中分配了 id,该 id 作为 line_items 传递。但是,您正在尝试检索尚未分配的 line_items(cartItems)/price(price_data)/metadata 。 您要搜索的 ID 分配在 line_items(cartItems)/price(price_data)/product_data (也许某些别名无法在文档中找到该值)/metadata

© www.soinside.com 2019 - 2024. All rights reserved.