- 316
- 146
Привет, увидел тему @S E V E N c автооплатой и решил сделать такое же на Python.
Что нам понадобится:
1) Python 3
2) Любая библиотека для работы с VK API (я буду использовать VKBottle)
3) Библиотека для работы с QIWI - pyQiwiP2P
После установки всего нам нужного приступаем к следующим этапам:
1) Переходим в раздел "Работа с API"
В данном разделе переходим в LongPoll API и включаем LongPoll, версию API выбираем 5.103
Переходим в "Типы событий" и включаем все события на "Входящие сообщения".
2) Переходим в раздел "Сообщения" и включаем сообщения группы.
Также там же переходим в раздел "Настройки для бота" и включаем возможности ботов.
Группа готова, переходим к коду, создаем Python файл и открываем его в любом текстовом редакторе.
Что нам понадобится:
1) Python 3
2) Любая библиотека для работы с VK API (я буду использовать VKBottle)
3) Библиотека для работы с QIWI - pyQiwiP2P
После установки всего нам нужного приступаем к следующим этапам:
1) Переходим в раздел "Работа с API"
В данном разделе переходим в LongPoll API и включаем LongPoll, версию API выбираем 5.103
Переходим в "Типы событий" и включаем все события на "Входящие сообщения".
2) Переходим в раздел "Сообщения" и включаем сообщения группы.
Также там же переходим в раздел "Настройки для бота" и включаем возможности ботов.
Группа готова, переходим к коду, создаем Python файл и открываем его в любом текстовом редакторе.
Подключаем наши библиотеки:
Далее нам нужно передать токен ВК:
Для начала попробуем сделать реакцию на определенную команду, к примеру "/qiwi" и ответим на эту команду:
Python:
from vkbottle.bot import Bot, Message
from pyqiwip2p import QiwiP2P
from pyqiwip2p.types import QiwiCustomer, QiwiDatetime
Далее нам нужно передать токен ВК:
Python:
bot = Bot("Токен ВК")
Для начала попробуем сделать реакцию на определенную команду, к примеру "/qiwi" и ответим на эту команду:
Python:
@bot.on.private_message(text='/qiwi')
async def test(message: Message):
print(message)
await message.answer('Я отреагировал на твое сообщение!')
bot.run_forever()
Теперь приступим к работе с QIWI, для оплаты мы будем использовать формы с оплатой.
Переходим на https://p2p.qiwi.com/, логинимся под свой кошелек.
Далее переходим в раздел "API" и создаем токен, сохраняем наш секретный ключ (не спутайте с PublicKey), в скрипте можно создать переменную с нашим ключом.
Где-то сверху вставляем данную строчку:
Сделаем генерацию ссылки на форму по команде "/qiwi":
Теперь напишем боту команду "/qiwi", он должен прислать нам ссылку на оплату:
Как мы видим, все работает!
Теперь нам надо проверить платеж от пользователя, сделать это можно разными способами. Логику проверки придумаете сами, советую записывать рандом номера в БД и сверять их. Сейчас я только покажу как проверять платеж по команде, например "/check".
Теперь проверим.
Переходим на https://p2p.qiwi.com/, логинимся под свой кошелек.
Далее переходим в раздел "API" и создаем токен, сохраняем наш секретный ключ (не спутайте с PublicKey), в скрипте можно создать переменную с нашим ключом.
Где-то сверху вставляем данную строчку:
Python:
p2p = QiwiP2P(auth_key="Секретный токен QIWI")
Сделаем генерацию ссылки на форму по команде "/qiwi":
Python:
@bot.on.private_message(text='/qiwi')
async def test(message: Message):
amount = 1 # Сумма 1 рубль
lifetime = 15 # Форма будет жить 15 минут
comment = 'Купить арбуз' # Комментарий
bill = p2p.bill(amount=amount, lifetime=lifetime, comment=comment) # Выставление счета
await message.answer(f'Сумма: {amount}\nСсылка живет: {lifetime} минут\nСсылка:\n{bill.pay_url}') # Отправляем ссылку человеку
bot.run_forever()
Теперь напишем боту команду "/qiwi", он должен прислать нам ссылку на оплату:
Как мы видим, все работает!
Теперь нам надо проверить платеж от пользователя, сделать это можно разными способами. Логику проверки придумаете сами, советую записывать рандом номера в БД и сверять их. Сейчас я только покажу как проверять платеж по команде, например "/check".
Python:
@bot.on.private_message(text='/check')
async def check(message: Message):
status = qiwi.check_status(bill_id) # bill_id - номер платежа
if status == 'PAID': # Если статус счета оплачен (PAID)
await message.answer('Оплата прошла успешно!')
else: # В другом случае
await message.answer('Вы не оплатили счет!')
Теперь проверим.