8 Commits

Author SHA1 Message Date
Aleksey
1d6af2b8ec Update README.md
Немного исправлено описание библиотеки и добавлено описание функции webhook_veify()
2022-06-08 10:24:55 +03:00
deesiigneer
f244e3f4db new feature webhook_verify 2022-06-08 10:00:38 +03:00
deesiigneer
76dc15a332 Merge remote-tracking branch 'origin/main' 2022-06-06 14:52:00 +03:00
deesiigneer
a2a4ac9fab fix #1 2022-06-06 14:51:38 +03:00
Aleksey
ef40d83a9c Update python-publish.yml 2022-06-05 17:25:41 +03:00
Aleksey
4a611396a1 Create python-publish.yml 2022-06-05 17:23:55 +03:00
Aleksey
7cc708ee03 fix: typo 2022-06-04 11:43:56 +03:00
Aleksey
8cba25a754 fix: Разметка 2022-06-03 21:25:42 +03:00
3 changed files with 85 additions and 13 deletions

39
.github/workflows/python-publish.yml vendored Normal file
View File

@@ -0,0 +1,39 @@
# This workflow will upload a Python Package using Twine when a release is created
# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: Upload to PYPI
on:
release:
types: [published]
permissions:
contents: read
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install build
- name: Build package
run: python -m build
- name: Publish package
uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}

View File

@@ -1,16 +1,16 @@
# pyspapi # pyspapi
Фреймворк [API](https://github.com/sp-worlds/api-docs) для серверов СП [API](https://github.com/sp-worlds/api-docs) обертка для серверов СП, написанная на Python.
## Установка ## Установка
**Требуется *Python 3.7* или выше** **Требуется *Python 3.7* или выше**
*Windows* *Windows*
```commandline ```commandline
> pip install pyspapi pip install pyspapi
``` ```
*Linux* *Linux*
```commandline ```commandline
$ sudo apt pip3 install pyspapi sudo apt pip3 install pyspapi
``` ```
## Примеры ## Примеры
@@ -33,8 +33,8 @@ print(api.payment(amount=1,
- `amount` - Стоимость покупки в АРах - `amount` - Стоимость покупки в АРах
- `redirectUrl` - URL страницы, на которую попадет пользователь после оплаты - `redirectUrl` - URL страницы, на которую попадет пользователь после оплаты
- `webhookUrl` - URL, куда наш сервер направит запрос, чтобы оповестить ваш сервер об успешной оплате - `webhookUrl` - URL, куда наш сервер направит запрос, чтобы оповестить ваш сервер об успешной оплате
- `data` - Строка до 100 символов, сюда можно пометить любые полезные данных. - `data` - Строка до 100 символов, сюда можно поместить любые полезные данных.
#### Получение данных об успешной оплате #### [Получение данных об успешной оплате](https://github.com/sp-worlds/api-docs/blob/main/PAYMENTS.md#%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%BE%D0%B1-%D1%83%D1%81%D0%BF%D0%B5%D1%88%D0%BD%D0%BE%D0%B9-%D0%BE%D0%BF%D0%BB%D0%B0%D1%82%D0%B5)
После успешной оплаты на URL указанный в `webhookUrl` придет POST запрос. После успешной оплаты на URL указанный в `webhookUrl` придет POST запрос.
*Тело запроса будет в формате JSON:* *Тело запроса будет в формате JSON:*
@@ -43,6 +43,23 @@ print(api.payment(amount=1,
- `amount` - Стоимость покупки - `amount` - Стоимость покупки
- `data` - Данные, которые вы отдали при создании запроса на оплату - `data` - Данные, которые вы отдали при создании запроса на оплату
Для проверки достоверности webhook'a используйте:
```Python
import spapi
api = spapi.Api(card_id='CARD_ID',
token='TOKEN')
print(api.webhook_verify(data='webhook_data',
header='webhook_header'
)
)
```
В ответ вы получите:
- True - webhook достоверен
- False - webhook не является достоверным
### [Переводы](https://github.com/sp-worlds/api-docs/blob/main/TRANSACTIONS.md) ### [Переводы](https://github.com/sp-worlds/api-docs/blob/main/TRANSACTIONS.md)
```Python ```Python
@@ -61,7 +78,7 @@ print(api.transaction(receiver='12345',
- `receiver` - Номер карты получателя - `receiver` - Номер карты получателя
- `amount` - Количество АР для перевода - `amount` - Количество АР для перевода
- `comment` - Комментарий к переводу - `comment` - Комментарий к переводу
-
### [Проверка наличия проходки](https://github.com/sp-worlds/api-docs/blob/main/USERS.md) ### [Проверка наличия проходки](https://github.com/sp-worlds/api-docs/blob/main/USERS.md)
```Python ```Python

View File

@@ -1,9 +1,13 @@
# pyspapi by deesiigneer # pyspapi by deesiigneer
# #
import hmac
import hashlib
import base64 import base64
from requests import post, get from requests import post, get
class Error(Exception): class Error(Exception):
pass pass
@@ -40,9 +44,9 @@ class Api:
""" """
Создание запроса на оплату. Создание запроса на оплату.
:param amount: Стоимость покупки в АРах :param amount: Стоимость покупки в АРах.
:param redirecturl: URL страницы, на которую попадет пользователь после оплаты :param redirecturl: URL страницы, на которую попадет пользователь после оплаты.
:param webhookurl: URL, куда наш сервер направит запрос, чтобы оповестить ваш сервер об успешной оплате :param webhookurl: URL, куда наш сервер направит запрос, чтобы оповестить ваш сервер об успешной оплате.
:param data: Строка до 100 символов, сюда можно поместить любые полезные данных. :param data: Строка до 100 символов, сюда можно поместить любые полезные данных.
:return: url - Ссылка на страницу оплаты, на которую стоит перенаправить пользователя. :return: url - Ссылка на страницу оплаты, на которую стоит перенаправить пользователя.
@@ -52,15 +56,27 @@ class Api:
'webhookUrl': webhookurl, 'webhookUrl': webhookurl,
'data': data}) '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): def transaction(self, receiver, amount, comment):
""" """
Перевод АР на карту. Перевод АР на карту.
:param receiver : Номер карты получателя :param receiver : Номер карты получателя.
:param amount: Количество АР для перевода :param amount: Количество АР для перевода.
:param comment: Комментарий для перевода :param comment: Комментарий для перевода.
""" """
return self._fetch('transactions', data={'receiver': receiver, return self._fetch('transactions', data={'receiver': receiver,
'amount': amount, 'amount': amount,
@@ -69,7 +85,7 @@ class Api:
def check_user(self, discord_user_id): def check_user(self, discord_user_id):
""" """
Проверка на наличие проходки Проверка на наличие проходки
:param discord_user_id: Стоимость покупки в АРах :param discord_user_id: ID пользователя в Discord.
:return: username - Ник пользователя или null, если у пользователя нет проходки на сервер. :return: username - Ник пользователя или null, если у пользователя нет проходки на сервер.
""" """