Files
pyspapi/spapi/__init__.py
2022-06-08 10:00:38 +03:00

93 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# pyspapi by deesiigneer
#
import hmac
import hashlib
import base64
from requests import post, get
class Error(Exception):
pass
class ApiError(Error):
pass
class Api:
def __init__(self, card_id: str, token: str):
self.id = card_id
self.token = token
self.header = {
'Authorization': f"Bearer {str(base64.b64encode(str(f'{self.id}:{self.token}').encode('utf-8')), 'utf-8')}",
}
def _fetch(self, path, data):
if path is None:
result = get(url=f'https://spworlds.ru/api/public/users/{data}',
headers=self.header)
else:
result = post(
url=f'https://spworlds.ru/api/public/{path}',
headers=self.header,
json=data
)
if result.status_code == [200, 400]:
ApiError(f'Ошибка при запросе к API {result.status_code}')
return result.json()
def payment(self, amount, redirecturl, webhookurl, data):
"""
Создание запроса на оплату.
:param amount: Стоимость покупки в АРах.
:param redirecturl: URL страницы, на которую попадет пользователь после оплаты.
:param webhookurl: URL, куда наш сервер направит запрос, чтобы оповестить ваш сервер об успешной оплате.
:param data: Строка до 100 символов, сюда можно поместить любые полезные данных.
:return: url - Ссылка на страницу оплаты, на которую стоит перенаправить пользователя.
"""
return self._fetch('payment', data={'amount': amount,
'redirectUrl': redirecturl,
'webhookUrl': webhookurl,
'data': data})
def webhook_verify(self, data, header):
"""
Проверяет достоверность webhook'а.
:param data : data из webhook.
:param header : headers из webhook.
:return: Если header из webhook'а достоверен возвращает True, иначе False
"""
hmac_data = base64.b64encode(hmac.new(self.token.encode('utf-8'), data, hashlib.sha256).digest())
return hmac.compare_digest(hmac_data, header.encode('utf-8'))
def transaction(self, receiver, amount, comment):
"""
Перевод АР на карту.
:param receiver : Номер карты получателя.
:param amount: Количество АР для перевода.
:param comment: Комментарий для перевода.
"""
return self._fetch('transactions', data={'receiver': receiver,
'amount': amount,
'comment': comment})
def check_user(self, discord_user_id):
"""
Проверка на наличие проходки
:param discord_user_id: ID пользователя в Discord.
:return: username - Ник пользователя или null, если у пользователя нет проходки на сервер.
"""
return self._fetch(None, data=discord_user_id)