mirror of
https://github.com/deesiigneer/pyspapi.git
synced 2026-04-20 12:35:26 +00:00
first commit
This commit is contained in:
86
README.md
86
README.md
@@ -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)
|
||||||
|
|||||||
20
setup.py
Normal file
20
setup.py
Normal 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
76
spapi/__init__.py
Normal 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)
|
||||||
Reference in New Issue
Block a user