• Как правильно на JS получить обьект успешного платежа от YooKassa?

    @IlyaBursh
    В Юкасса, ты можешь создать тестовые платежи без регистрации по ИП.
    Вот пример через библиотеку @a2seven/yoo-checkout, на javascript
    в этом примере(создание оплаты в телеграмм боте) будет:
    1)база данных UserModel от Mongodb
    2)функция создания платежа createPayment yoo-checkout
    3)функция проверки платежа getPayment yoo-checkout
    4)ctx - Telegraf

    const YOO_KASSA_CONFIG = {
      shopId: 'id в аккаунте Юкасса' ,
      secretKey: 'ключ в аккаунте Юкасса',
      isTest: true, // Установите в false, чтобы использовать реальную среду
    };
    const yooKassa = new YooCheckout(YOO_KASSA_CONFIG);
    bot.command('pay', async (ctx) => {
      const userId = String(ctx.message.from.id)
      const user = await UserModel.findOne({ userId: userId });
      try {
        const orderId = Math.floor(Math.random() * (10000))  + Date.now();//уникальный Id заказа
        const orderAmount = 100; // Сумма платежа в копейках (например, 100 рублей = 10000 копеек)
        const description = userId + 'совершил успешный платеж'; // Описание платежа
        const createPayload = {
          amount: {
            value: orderAmount,
            currency: 'RUB',
          },
          payment_method_data: {
            type: 'bank_card',
          },
          confirmation: {
            type: 'redirect',
            return_url: 'https://qna.habr.com/q/1264078', // URL для перенаправления пользователя после успешной оплаты
          },
          capture:true,// моментальное потверждение заказа, без ручного принятия на стороне Юкасса
          description:description, // описание в Юкасса о этом платеже
        };
        // Создание платежа в Юkassa
        const payment  = await yooKassa.createPayment(createPayload, orderId);
        // Сохраните информацию о платеже или заказе, чтобы затем проверить его статус
    //что бы не создавать второе поле в моей базе данных я записал id в statusPay
         user.statusPay=payment.id
        user.save()
         
         // Получение URL для оплаты из объекта платежа
        const paymentUrl = payment.confirmation.confirmation_url;
        // Отправка пользователю ссылки для оплаты
        ctx.reply(`Чтобы оплатить заказ №${orderId}, перейдите по ссылке: ${paymentUrl}`);
      } catch (error) {
        // Обработка ошибок
        console.error('Error creating payment:', error);
        ctx.reply('Произошла ошибка при создании платежа. Попробуйте позже.');
      }
    });
    bot.command('status', async (ctx) => {
      const userId = String(ctx.message.from.id)
      const username= await (ctx.message.chat.username)
      const user = await UserModel.findOne({ userId: userId });
      try {
        // Здесь получите paymentId из базы данных или памяти вашего приложения.
        const paymentId = user.statusPay;
        // Получение информации о платеже из Юkassa
        const paymentInfo = await yooKassa.getPayment(paymentId);
    
        // Обработка информации о статусе платежа
        if(paymentInfo.status==='succeeded'){
          ctx.reply(`${paymentInfo.status}, ${username ?? 'друг'} спасибо за оплату нашего бота!`)
          user.statusPay=paymentInfo.status
          user.save()
        } else{
          ctx.reply(`Статус платежа №${paymentId}: ${paymentInfo.status}`);
          user.statusPay=paymentInfo.status
          user.save()
        }
      } catch (e) {
        console.log(`ошибка в функции статуса платежа`, e);
        ctx.reply('Создайте платеж!');
      }
    });


    Код не совершенен и есть пару ошибок, но общий принцип из него можно взять.
    Надеюсь чем то помог.
    Ответ написан
    Комментировать