在我的 nodejs 应用程序中使用条带结帐时未显示产品图片

product image not showing up when using stripe checkout in my nodejs application

下面是我的结帐路径的代码。

除一行外一切正常:images: [`${process.env.SERVER_URL}/public${item.itemData.images[0]}`]

我尝试通过控制台记录这条路径并得到正确的路径:“http://localhost:5000/public/image/test_image_2.webp” 因此,我很困惑为什么这不起作用。我很确定图像字段为每个产品采用了一系列图像路径,这就是我给它的,但我仍然看到小的无法找到图像符号而不是我的产品图像。我该怎么办?

const router = require("express").Router();
const Product = require("../models/product-schema");
const { default: Stripe } = require("stripe");
const { getUser, authUser, authAdmin, authAdmin404 } = require("../middleware/authentication");
const stripe = require("stripe")(process.env.STRIPE_PRIVATE_KEY);

router.post("/create-checkout-session", authUser, async (req, res) => {
  try {
    const unresolved = req.body.items.map(async (item, index, arr) => {
      const storeItem = await Product.findById(item.id);
      return arr[index] = { itemData: storeItem, quantity: item.quantity };
    });
    const items = await Promise.all(unresolved);
    const session = await stripe.checkout.sessions.create({
      payment_method_types: ["card"],
      mode: "payment",
      line_items: items.map((item) => {
        return {
          price_data: {
            currency: 'eur',
            product_data: {
              name: item.itemData.product_name,
              images: [`${process.env.SERVER_URL}/public${item.itemData.images[0]}`]
            },
            unit_amount: item.itemData.price_in_cents,
          },
          quantity: item.quantity,
        }
      }),
      success_url: `${process.env.SERVER_URL}/`,
      cancel_url: req.body.url,
    });
    res.json({ url: session.url });
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

module.exports = router;

Stripe 将在您提供的 URL(s) 下载每张图片并在本地缓存它们。当你给出一个基于 localhost 的 URL 时,它无法访问数据,所以它无法缓存它并在以后显示它。

您需要确保您提供的 URL 可公开访问以供他们缓存。您的服务器也可能是 mis-configured(例如错误的 TLS 证书)导致尝试获取图像失败,因此在这种情况下 Stripe 将不会呈现它。