first commit

This commit is contained in:
deesiigneer
2022-06-03 19:06:55 +03:00
parent dc58afa6ac
commit 24eee827a7
4 changed files with 187 additions and 1 deletions

View File

@@ -1 +1,87 @@
#pyspapi #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)

4
setup.cfg Normal file
View File

@@ -0,0 +1,4 @@
[egg_info]
tag_build =
tag_date = 0

20
setup.py Normal file
View File

@@ -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,
)

76
spapi/__init__.py Normal file
View File

@@ -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)