NextJS, React , проверка полосы повторяющаяся ошибка цены

#reactjs #next.js #stripe-payments

Вопрос:

Я попытался внедрить проверку полос в свое приложение NextJS. Я скопировал код почти точно так же, как в примере приложения, но я получаю эту ошибку ниже, не зная, что я делаю не так:

Вы указали payment режим, но передали повторяющуюся цену. Либо переключитесь в subscription режим, либо используйте только одноразовые цены.

 const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY)

export default async function handler(req, res) {
  if (req.method === 'POST') {
    try {
      // Create Checkout Sessions from body params.
      const session = await stripe.checkout.sessions.create({
        line_items: [
          {
            // TODO: replace this with the `price` of the product you want to sell
            price: 1,
            quantity: 1,
          },
        ],
        payment_method_types: ['card'],
        mode: 'payment',
        success_url: `${req.headers.origin}/?success=trueamp;session_id={CHECKOUT_SESSION_ID}`,
        cancel_url: `${req.headers.origin}/?canceled=true`,
      })

      res.redirect(303, session.url)
    } catch (err) {
      res.status(err.statusCode || 500).json(err.message)
    }
  } else {
    res.setHeader('Allow', 'POST')
    res.status(405).end('Method Not Allowed')
  }
}
 

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

1. Какой тип price вы передаете при создании сеанса оформления заказа? Если это повторяющаяся цена, вам нужно изменить свой код для использования mode: 'subscription'

Ответ №1:

price: 1 это неправильно.

Существует два способа передать цену для оплаты в кассе Stripe:

  • Создайте встроенный объект цены с помощью price_data :
 line_items: [
    {
        price_data: {
            currency: 'usd',
            product_data: { // Same as with price_data, we're creating a Product inline here, alternatively pass the ID of an existing Product using line_items.price_data.product
                name: 'Shoes'
            },
            unit_amount: 1000 // 10 US$
        },
        quantity: 1,
    },
],
 
  • Использование существующего объекта цены. Вы передадите: price: price_1JZF8B2eZvKYlo2CmPWKn7RI , часть price_XXX, являющаяся идентификатором ранее созданного объекта Prices.

Раньше вы тоже могли устанавливать line_items.amount , но сейчас это устарело, так что не делайте этого.

Вы можете прочитать больше о создании сеанса проверки в документации.