From 24eee827a700d1aedf7094dfbc2187386f68773b Mon Sep 17 00:00:00 2001 From: deesiigneer Date: Fri, 3 Jun 2022 19:06:55 +0300 Subject: [PATCH] first commit --- README.md | 88 ++++++++++++++++++++++++++++++++++++++++++++++- setup.cfg | 4 +++ setup.py | 20 +++++++++++ spapi/__init__.py | 76 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 187 insertions(+), 1 deletion(-) create mode 100644 setup.cfg create mode 100644 setup.py create mode 100644 spapi/__init__.py diff --git a/README.md b/README.md index 2e21839..1c8e182 100644 --- a/README.md +++ b/README.md @@ -1 +1,87 @@ -# pyspapi \ No newline at end of file +#pyspapi +Фреймворк [API](https://github.com/sp-worlds/api-docs) для серверов СП + +##Установка +**Требуется *Python 3.7* или выше** + +*Windows* +```commandline +> pip install pyspapi +``` +*Linux* +```commandline +$ sudo apt pip3 install pyspapi +``` + +##Примеры +###Оплата + +```Python +import spapi + +api = spapi.Api(card_id='CARD_ID', + token='TOKEN') + +print(api.payment(amount=1, + redirecturl='https://www.google.com/', + webhookurl='https://www.yourwebhook.com/', + data='Какие-то данные' + ) + ) + +``` +- `amount` - Стоимость покупки в АРах +- `redirectUrl` - URL страницы, на которую попадет пользователь после оплаты +- `webhookUrl` - URL, куда наш сервер направит запрос, чтобы оповестить ваш сервер об успешной оплате +- `data` - Строка до 100 символов, сюда можно пометить любые полезные данных. +####Получение данных об успешной оплате +После успешной оплаты на URL указанный в `webhookUrl` придет POST запрос. + +*Тело запроса будет в формате JSON:* + +- `payer` - Ник игрока, который совершил оплату +- `amount` - Стоимость покупки +- `data` - Данные, которые вы отдали при создании запроса на оплату + +###Переводы + +```Python +import spapi + +api = spapi.Api(card_id='CARD_ID', + token='TOKEN') + +print(api.transaction(receiver='12345', + amount=1, + comment="test" + ) + ) + +``` +- `receiver` - Номер карты получателя +- `amount` - Количество АР для перевода +- `comment` - Комментарий к переводу +- +###Проверка наличия проходки + +```Python +import spapi + +api = spapi.Api(card_id='CARD_ID', + token='TOKEN') + +print(api.check_user(discord_user_id=123456789012345678) + ) + +``` +- `discord_user_id` - ID пользователя в Discord. + +*В ответ вы получите JSON:* + +- `username` - Ник пользователя или null, если у пользователя нет входа на сервер. + + +## Ссылки + +- [Discord сервер разработчика](https://discord.gg/sJYtYnhN) +- [Документация API сайтов СП](https://github.com/sp-worlds/api-docs) diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..8bfd5a1 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,4 @@ +[egg_info] +tag_build = +tag_date = 0 + diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..cd57b6e --- /dev/null +++ b/setup.py @@ -0,0 +1,20 @@ +from setuptools import setup + +from os import path +this_directory = path.abspath(path.dirname(__file__)) +with open(path.join(this_directory, 'README.md'), encoding='utf-8') as f: + description = f.read() + +requires = ['requests==2.25.1'] + +setup( + name='pyspapi', + version='1.0.0a', + description='Framework for SP API', + long_description=description, + long_description_content_type='text/markdown', + author='deesiigneer', + author_email='xdeesiigneerx@gmail.com', + packages=['spapi'], + install_requires=requires, +) diff --git a/spapi/__init__.py b/spapi/__init__.py new file mode 100644 index 0000000..87b4162 --- /dev/null +++ b/spapi/__init__.py @@ -0,0 +1,76 @@ +# pyspapi by deesiigneer +# + +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 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: Стоимость покупки в АРах + + :return: username - Ник пользователя или null, если у пользователя нет проходки на сервер. + """ + return self._fetch(None, data=discord_user_id)