- 20.06.2022
- 26 938
- 230
- 36
- Награды
- 10
- Пол
- Муж.
Репутация:
- Автор темы
- Администратор
- Модератор
- Команда форума
- #1
Используются модули:
Чтобы подключить кассу нам нужен аккаунт, айди магазина и секретное слово из него Чтобы подключить эни-пей нам нужен айди магаза и секретное слово
Ссылки я дал, по ним нужную инфу найдёте, я покажу код на примере подключения кассы.
У нас есть файл pk.py (pk от слова paykey)
В нём содержится класс Pay, так что импортируем его
Теперь, когда нам нужно принять оплату от чела, мы шлём ему сообщение, а как клавиатуру вставляем такой параметр
sum --- сумма платежа
id ----- айдишка платежа, которую вы будете обрабатывать (чаще всего я ставлю туда юзер айди)
kassa - номер нашего магазина в фри-кассе
text --- текст, который будет на кнопке
sal ---- скидка, когда например юзер ввёл скидочный промокод (необязательный параметр)
Таким образом юзеру придёт сообщение с инлайн кнопкой, которое отправит его на страницу оплаты.
Далее, когда чел оплатит, нам нужно обработать вебхук от фри-кассы
Допустим у вас уже есть сервер и фри-касса знает куда слать хуки.
Я лично использую cherrypy, так что покажу пример на нём
Сначала создаём переменные с данными по нашему серверу:
Далее, в конце кода создаём экземпляр класса сервера, функцию называем index, дописываем ей *args и **kwargs
И теперь, чтобы понять что хуки идут от кассы, я использую проверку IP
Создаём список с айпишками которые я нашёл в документации и ставим на него проверку:
Далее просто смотрим какие параметры передаёт нам фри-касса (
и делаем с ними что хотим.
Как пример, получить сумму заказа можно через kwargs['AMOUNT']
Потом, когда написали всю обработку, на одном уровне с ифом проверки айпишника добавляем
Это позволит боту принимать хуки от телеграма и выполнять их.
В конце просто пересоздаём вебхук и запускаем сервер!
Таким образом полный код сервера будет такой:
- pyTelegramBotAPI
- cherrypy
- hashlib
- YANDEX
- YANDEX (только картой)
- FREE-KASSA
- ANY-PAY
Чтобы подключить кассу нам нужен аккаунт, айди магазина и секретное слово из него Чтобы подключить эни-пей нам нужен айди магаза и секретное слово
Ссылки я дал, по ним нужную инфу найдёте, я покажу код на примере подключения кассы.
У нас есть файл pk.py (pk от слова paykey)
В нём содержится класс Pay, так что импортируем его
Python:
from pk import Pay
Теперь, когда нам нужно принять оплату от чела, мы шлём ему сообщение, а как клавиатуру вставляем такой параметр
Python:
Pay().paykey(sum, id, kassa, text, sal)
sum --- сумма платежа
id ----- айдишка платежа, которую вы будете обрабатывать (чаще всего я ставлю туда юзер айди)
kassa - номер нашего магазина в фри-кассе
text --- текст, который будет на кнопке
sal ---- скидка, когда например юзер ввёл скидочный промокод (необязательный параметр)
Таким образом юзеру придёт сообщение с инлайн кнопкой, которое отправит его на страницу оплаты.
Далее, когда чел оплатит, нам нужно обработать вебхук от фри-кассы
Допустим у вас уже есть сервер и фри-касса знает куда слать хуки.
Я лично использую cherrypy, так что покажу пример на нём
Сначала создаём переменные с данными по нашему серверу:
Python:
WEBHOOK_HOST = '165.22.57.201'
WEBHOOK_PORT = 88 # 443, 80, 88 или 8443 (порт должен быть открыт!)
WEBHOOK_LISTEN = '165.22.57.201' # На некоторых серверах придется указывать такой же IP, что и выше
WEBHOOK_SSL_CERT = './webhook_cert.pem' # Путь к сертификату
WEBHOOK_SSL_PRIV = './webhook_pkey.pem' # Путь к приватному ключу
WEBHOOK_URL_BASE = "https://%s:%s" % (WEBHOOK_HOST, WEBHOOK_PORT)
WEBHOOK_URL_PATH = "/%s/" % (token)
Далее, в конце кода создаём экземпляр класса сервера, функцию называем index, дописываем ей *args и **kwargs
Python:
class WebhookServer(object):
@cherrypy.expose
def index(self, *args, **kwargs):
И теперь, чтобы понять что хуки идут от кассы, я использую проверку IP
Создаём список с айпишками которые я нашёл в документации и ставим на него проверку:
Python:
ips = ['136.243.38.147', '136.243.38.149', '136.243.38.150', '136.243.38.151', '136.243.38.189', '136.243.38.108']
if cherrypy.request.headers['Remote-Addr'] in ips:
и делаем с ними что хотим.
Как пример, получить сумму заказа можно через kwargs['AMOUNT']
Потом, когда написали всю обработку, на одном уровне с ифом проверки айпишника добавляем
Python:
elif 'content-length' in cherrypy.request.headers and \
'content-type' in cherrypy.request.headers and \
cherrypy.request.headers['content-type'] == 'application/json':
length = int(cherrypy.request.headers['content-length'])
json_string = cherrypy.request.body.read(length).decode("utf-8")
update = telebot.types.Update.de_json(json_string)
# Эта функция обеспечивает проверку входящего сообщения
bot.process_new_updates([update])
return ''
else:
raise cherrypy.HTTPError(403)
Это позволит боту принимать хуки от телеграма и выполнять их.
В конце просто пересоздаём вебхук и запускаем сервер!
Код:
bot.remove_webhook()
bot.set_webhook(url=WEBHOOK_URL_BASE + WEBHOOK_URL_PATH, certificate=open(WEBHOOK_SSL_CERT, 'r'))
cherrypy.config.update({
'server.socket_host': WEBHOOK_LISTEN,
'server.socket_port': WEBHOOK_PORT,
'server.ssl_module': 'builtin',
'server.ssl_certificate': WEBHOOK_SSL_CERT,
'server.ssl_private_key': WEBHOOK_SSL_PRIV
})
# Собственно, запуск!
cherrypy.quickstart(WebhookServer(), WEBHOOK_URL_PATH, {'/': {}})
Таким образом полный код сервера будет такой:
Python:
class WebhookServer(object):
@cherrypy.expose
def index(self, *args, **kwargs):
ips = ['136.243.38.147', '136.243.38.149', '136.243.38.150', '136.243.38.151', '136.243.38.189', '136.243.38.108']
if cherrypy.request.headers['Remote-Addr'] in ips:
# тут обрабатываем данные
elif 'content-length' in cherrypy.request.headers and \
'content-type' in cherrypy.request.headers and \
cherrypy.request.headers['content-type'] == 'application/json':
length = int(cherrypy.request.headers['content-length'])
json_string = cherrypy.request.body.read(length).decode("utf-8")
update = telebot.types.Update.de_json(json_string)
# Эта функция обеспечивает проверку входящего сообщения
bot.process_new_updates([update])
return ''
else:
raise cherrypy.HTTPError(403)
bot.remove_webhook()
bot.set_webhook(url=WEBHOOK_URL_BASE + WEBHOOK_URL_PATH, certificate=open(WEBHOOK_SSL_CERT, 'r'))
cherrypy.config.update({
'server.socket_host': WEBHOOK_LISTEN,
'server.socket_port': WEBHOOK_PORT,
'server.ssl_module': 'builtin',
'server.ssl_certificate': WEBHOOK_SSL_CERT,
'server.ssl_private_key': WEBHOOK_SSL_PRIV
})
# Собственно, запуск!
cherrypy.quickstart(WebhookServer(), WEBHOOK_URL_PATH, {'/': {}})
Вложения
Последние темы в этом разделе:
- [Сергей Спирёв] [Stepik] Библиотека Seaborn. Статистическая визуализация данных в Python (2025)
- [А.Ерошенко, Л.Данилова и др.] Курс по автоматизации тестирования на JavaScript + Playwright (2025)
- [Михаил Крыжановский] [Stepik] Телеграм-боты на Python: продвинутый уровень (2024)
- [IT Start] Курс по Python 3 (2024)
- [А. Ерошенко, С. Хомутинин, С. Васенков] Автоматизация тестирования на Python (2024)
- [IT Start] Создание графического интерфейса в Python 3 с Tkinter (2024)
- [Дмитрий Лаврик] PHP – ООП (2021)
- Параллелизм в Python. Заметка на русском с примерами кода.
- Крутая, содержательная шпаргалка с примерами по веб-фреймворку Django
- Асинхронный Python и Asyncio - Молчанов (2023)