Полоса с узлом выдает ошибку 400: «Не удается прочитать свойство «сеансы» неопределенного»

#javascript #node.js #reactjs #stripe-payments

Вопрос:

Я пытаюсь интегрировать stripe в приложение моей организации, однако, следуя собственной документации stripe, способ интеграции с помощью NodeJS заключается в следующем:

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

Я перепробовал почти все, но сервер всегда выдает ошибку 404 со следующим сообщением: «Не удается прочитать свойство «сеансы » неопределенного»»

Дело в том, что, когда я утешаю объект stripe в бэкэнде, я вижу, что на самом деле для stripe нет свойства «проверка», но в документах stripe говорится, что оно у него есть, что наводит меня на мысль, что я, должно быть, делаю что-то не так.

Это код интерфейса моей кнопки «перейти к оформлению заказа»

     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,
      }
    });
  }
});

 

Ответ №1:

Похоже, вы используете более старую версию библиотеки узлов Stripe, которая не поддерживает сеансы проверки. Вам следует проверить версию библиотеки, которую вы используете, обновив ее до последней версии, если это возможно, или как минимум до версии 6.20.0 (первая версия, в которую добавлена поддержка проверки).

Комментарии:

1. Я использую версию 7.15.0 в соответствии с npm stripe-v

2. Это действительно странно. stripe Объект должен абсолютно обладать checkout свойством, и checkout должен обладать sessions . Если ты console.log(stripe.VERSION); , что ты получишь?

Ответ №2:

Хорошо, ребята, я понял, что полоса уже была установлена в моих пакетах, однако каждый раз, когда я пытался ее обновить, она говорила, что я на последней версии.

В любом случае, я удалил, а затем снова переустановил все, что связано с полосой, используя npm i <package> , и это внезапно сработало просто отлично

Ответ №3:

Я удалил полосу, переустановил — никаких костей.

Убедитесь, что, согласно документам:

Пакет необходимо настроить с помощью секретного ключа вашей учетной записи, который доступен на панели мониторинга Stripe. Требуйте его со значением ключа:

Нравится

 const stripe = require('stripe')(process.env.STRIPE_PRIVATE_KEY);
 

Убедившись в этом, все было в порядке.