Задать вопрос
Ayrat-Developer
@Ayrat-Developer

VK Pay и VKBottle связать с ботом. Правильно ли написал код?

Уже долго времени сижу не могу понять как реализовать VK Pay к боту на VKBottle. Присылает кнопку с оплатой все ок, но когда оплачиваешь грузит секунду и выдает такое сообщение: "Невозможно совершить операцию. Попробуйте позже"

Вот код, думаю я что-то напутал и не то написал. Документации читал, но я немного запутался и надеюсь вы мне подскажите :)
@bp.on.message(text='подписка')
async def pay(message: Message):
    num = 120156786 #  ID Группы
    pay = (
    Keyboard(one_time=False, inline=True)
    .add(VKPay(payload = None, hash=f'action=pay-to-group&amount=1&group_id={num}&aid=10'))
    .get_json()
    )
    await message.answer('Функции платной подписки:\n1)...\n2)...', keyboard=pay)

@bp.on.raw_event(GroupEventType.VKPAY_TRANSACTION, dataclass=GroupTypes.VkpayTransaction)
async def message_event_pay(event: GroupTypes.VkpayTransaction):
    # id_user = event.object.peer_id
    # print(id_user)

    if event.VkpayTransaction:
        bp.api.messages.edit(
        peer_id=event.object.peer_id,
        conversation_message_id=event.object.conversation_message_id,
        message='checking')
  • Вопрос задан
  • 467 просмотров
Подписаться 3 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@YakovSava
Питонячий сишник
Не знаю актуально ли дос их пор, но надеюсь кому-то пригодиться и этот человек не будет совершать моих ошибок.

Нет, после оплаты не возникает ивента. Приходит лишь сообщение с определённым полем message.attachments под названием VkpayTransactionObject (см. больше тут), потому, лучше сделать так:
@bot.on.private_message(text='подписка')
async def subscribe_handler(message:Message):
	group_id = 12345678 # Вставьте сюда ваш group_id
	amount = 100 # Вставьте сюда сумму которую человек должен оплатить
	pay = (Keyboard(one_time=False, inline=True)
		.add(VKPay(payload={'pays': 0},  hash=f'action=pay-to-group&amount={amount}&group_id={num}')
	)).get_json()
	await message.answer('Вот кнопка для оплаты подписки', keyboard=pay)

@bot.on.private_message(payload={'pays': 0})
async def people_was_pay(message:Message):
	await message.answer(f'Вы успешно оплатили подписку в размере {message.attachments[0].amount} рублей!')


По поводу моего кода не очень уверен, возможно путь (message.attachments[0].amount) не совсем верный, просто в моём боте, я передавал сумму и другие данные вместе с полезной нагрузкой (payload). Хотел бы уточнить, что бот среагирует на payload только после оплаты т.е. отправки сообщения. Так же посоветую не прописывать pip3 install --upgrade vkbottle-types сразу, лучше устанавливать сразу с репозитория на гитхабе
pip install -U https://github.com/vkbottle/vkbottle-types/archive/master.zip
(Такой совет написан здесь) дабы не было каких-либо ошибок.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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