首页 > 解决方案 > 带节点的条带引发错误 400:“无法读取未定义的属性‘会话’”

问题描述

我正在尝试将条带集成到我组织的应用程序中,但是,按照条带自己的文档,使用 nodeJS 进行集成的方法是这样做:

https://stripe.com/docs/billing/subscriptions/checkout#create-session

我几乎尝试了所有方法,但服务器总是抛出 404 错误并显示以下消息:“无法读取未定义的属性‘会话’”

问题是,当我在后端控制条带对象时,我发现实际上条带没有“结帐”属性,但条带文档说它确实有它,这让我认为我一定做错了什么.

这是我的“去结帐”按钮的前端代码

    const createCheckoutSession = (priceId:any) => {
        return axios.post("/create-checkout-session", {
          method: "POST",
          headers: {
            "Content-Type": "application/json"
          },
          body: JSON.stringify({
            priceId: priceId
          })
        }).then(function(result) {
          return result.data();
        });
      };
    
    const handleClick = async (event:any) => {
        // Get Stripe.js instance
        const stripe = await stripePromise;
    
        // Call your backend to create the Checkout Session
        //const response = await fetch('/create-checkout-session', { method: 'POST' });
        createCheckoutSession('price_1J7UmZFYFs5GcbAXvPronXSX').then(function(data) {
            // Call Stripe.js method to redirect to the new Checkout page
            stripe
              .redirectToCheckout({
                sessionId: data.sessionId
              })
              .then(()=>{console.log('handleResult')});
          })
          };

这是我的 server.js 代码

//STRIPE CODE
const stripeKey = 'sk_test_51J7UfrFYFs5GcbAX45lXy6w2TV1hPqvUbqu3hdB4QRAXFR3QYmTgcNKXcVG7tL9vwaanjdYWGvkfiQ6Bd41dK4V7004yMs3Cbh'
const stripe = Stripe(stripeKey);

app.post('/create-checkout-session', async (req, res) => {
  //console.log("--------STRIPE----------", stripe);
  const { priceId } = req.body;

  try {
    const session = await stripe.checkout.sessions.create({
      mode: 'subscription',
      payment_method_types: ['card'],
      line_items: [
        {
          price: priceId,
          // For metered billing, do not pass quantity
          quantity: 1,
        },
      ],
      // {CHECKOUT_SESSION_ID} is a string literal; do not change it!
      // the actual Session ID is returned in the query parameter when your customer
      // is redirected to the success page.
      success_url: 'https://localhost:3000/success?session_id={CHECKOUT_SESSION_ID}',
      cancel_url: 'https://localhost:3000/canceled',
    });

    res.send({
      sessionId: session.id,
    });
  } catch (e) {
    res.status(400);
    return res.send({
      error: {
        message: e.message,
      }
    });
  }
});

标签: javascriptnode.jsreactjsstripe-payments

解决方案


好吧,伙计们,所以我想通了,我的包中已经安装了条带,但是每次我尝试更新它时,它都会说我使用的是最新版本。

无论如何,我卸载然后重新安装了所有与条纹相关的东西npm i <package>,它突然工作得很好


推荐阅读