Задать вопрос
@alwaystried

Почему не работает оплата?

Добрый день. Возникла небольшая проблема - бот не видит подтвержденного инвойса. По факту, я прописал все необходимое, создал инвойс, все открывается, но... бот просто не видит даже подтверждения. Платежный модуль: юкасса. Использую Aiogram

Код:

@dp.callback_query_handler(text="oplata")
async def confirm(query: CallbackQuery):
    teleid = query.from_user.id
    priceord = db.fetchone('SELECT price FROM precheckout WHERE id=?', (teleid,))
    await query.answer('Оплатите покупку с помощью банковской карты:',
                         reply_markup=confirm_markup())
    priceord = priceord[0]

    str(priceord)+"00"

    priceord = int(priceord)
    await bot.send_invoice(chat_id=query.from_user.id, title="Оформление заказа", description="Спасибо что выбираете нас!", payload="order", provider_token=YOOTOKEN, currency="RUB", start_parameter="shaverma_bot", prices=[{"label": "Руб", "amount": 15000}])

@dp.pre_checkout_query_handler(IsUser())
async def process_pre_checkout_query(pre_checkout_query: types.PreCheckoutQuery):
    await bot.answer_pre_checkout_query(pre_checkout_query.id, ok=False or True)
    print("aaaa")

@dp.message_handler(content_types=ContentType.SUCCESSFUL_PAYMENT)
async def process_confirm(message: Message):

    # enough money on the balance sheet
    markup = ReplyKeyboardRemove()

    logging.info('Deal was made.')
    if message.successful_payment.invoice_payload == "order":
        async with state.proxy() as data:

            cid = message.chat.id
            products = [idx + '=' + str(quantity)
                        for idx, quantity in db.fetchall('''SELECT idx, quantity FROM cart
            WHERE cid=?''', (cid,))]  # idx=quantity

            db.query('INSERT INTO orders VALUES (?, ?, ?, ?)',
                     (cid, data['name'], data['address'], ' '.join(products)))

            db.query('DELETE FROM cart WHERE cid=?', (cid,))

            await message.answer('Ок! Ваш заказ уже в пути \nИмя: <b>' + data['name'] + '</b>\nАдрес: <b>' + data['address'] + '</b>',
                                 reply_markup=markup)

        await state.finish()


Заранее спасибо!
  • Вопрос задан
  • 223 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
ok=False or True всегда будет True
Ответ написан
Комментировать
@mishpro
Попробуйте написать не False or True, а просто True. Я хоть и не писал ботов на аиограм, да и не профи в Python, но мне кажется, что это поможет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы