#callback_data="category_" может работать только в одном обработчике команд, а нужно чтобы он мог #работать желательно в неограниченном количестве обработчиков команд. Это нужно чтобы в #зависимости от выбранной категории менялась и цена выбранной услуги (категория 1 - 100 рублей, #категория 2 - 150 и т.д) ну и в зависимости от выбранной категории предоставлялась определенная #услуга
prices = [
types.LabeledPrice(label="подписка на неделю 1", amount=10 * 100),
types.LabeledPrice(label="подписка на неделю 2", amount=120 * 100),
types.LabeledPrice(label="подписка на неделю 3", amount=130 * 100),
types.LabeledPrice(label="подписка на неделю 4", amount=140 * 100),
types.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")