как заставить callback_data="category_" сначала работать в "обработчике выбора категории услуг", а потом в "обработчике оплаты по карте"?(по очереди)

prices = [
    LabeledPrice(label="подписка на неделю 1", amount=10 * 100),
    LabeledPrice(label="подписка на неделю 2", amount=120 * 100),
    LabeledPrice(label="подписка на неделю 3", amount=130 * 100),
    LabeledPrice(label="подписка на неделю 4", amount=140 * 100),
    LabeledPrice(label="подписка на неделю 5", amount=150 * 100)
]

# клавиатура для выбора категории услуг
service_categories_keyboard = InlineKeyboardMarkup()
service_categories_keyboard.add(
    InlineKeyboardButton("категория_1", callback_data="category_1"),
    InlineKeyboardButton("категория_2", callback_data="category_2"),
    InlineKeyboardButton("категория_3", callback_data="category_3")
)
# клавиатура для выбора способа оплаты
payment_methods_keyboard = InlineKeyboardMarkup(row_width=2)
payment_methods_keyboard.add(
    InlineKeyboardButton("оплата картой", callback_data="category_"),
    InlineKeyboardButton("оплата через телеграм", callback_data="telegram_payment")
)
# обработчик выбора категории услуг
@dp.callback_query_handler(Text(startswith="category_"))
async def select_category(callback_query: types.CallbackQuery):
    category_1 = callback_query.data.split("_")[1]
    await callback_query.message.edit_text(f"вы выбрали категорию:{category_1}\nвыберите способ оплаты:",
                                          reply_markup=payment_methods_keyboard)
    await callback_query.answer()


# обработчик оплаты по карте
@dp.callback_query_handler(lambda callback: True, Text(startswith="category_"), state="*")
async def card_payment(callback_query: types.CallbackQuery):
    category_2 = int(callback_query.data.split("_")[1]) 
    price = prices[category_2 - 1]

    await bot.send_invoice(callback_query.message.chat.id,
                           payload="dj",
                           title="first",
                           description="активация на неделю",
                           provider_token=pay_token,
                           currency="rub",
                           prices=[price],
                           start_parameter="one-week-subscription")

Ответы (1 шт):

Автор решения: Michail Scott

Я сам не спец, но думаю вам стоит подключить машину состояний, чтобы все было по очереди, для этого и создана state, либо изменить callback_data в категории выбора оплаты, надеюсь я смог помочь. Удачи!

→ Ссылка