From f244e3f4db9c700bf2067f39e5d008c4b738f6f8 Mon Sep 17 00:00:00 2001 From: deesiigneer Date: Wed, 8 Jun 2022 10:00:38 +0300 Subject: [PATCH 1/2] new feature webhook_verify --- spapi/__init__.py | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/spapi/__init__.py b/spapi/__init__.py index 77e6d38..4ca81d6 100644 --- a/spapi/__init__.py +++ b/spapi/__init__.py @@ -1,9 +1,13 @@ # pyspapi by deesiigneer # +import hmac +import hashlib import base64 + from requests import post, get + class Error(Exception): pass @@ -40,9 +44,9 @@ class Api: """ Создание запроса на оплату. - :param amount: Стоимость покупки в АРах - :param redirecturl: URL страницы, на которую попадет пользователь после оплаты - :param webhookurl: URL, куда наш сервер направит запрос, чтобы оповестить ваш сервер об успешной оплате + :param amount: Стоимость покупки в АРах. + :param redirecturl: URL страницы, на которую попадет пользователь после оплаты. + :param webhookurl: URL, куда наш сервер направит запрос, чтобы оповестить ваш сервер об успешной оплате. :param data: Строка до 100 символов, сюда можно поместить любые полезные данных. :return: url - Ссылка на страницу оплаты, на которую стоит перенаправить пользователя. @@ -52,15 +56,27 @@ class Api: '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 receiver : Номер карты получателя. - :param amount: Количество АР для перевода + :param amount: Количество АР для перевода. - :param comment: Комментарий для перевода + :param comment: Комментарий для перевода. """ return self._fetch('transactions', data={'receiver': receiver, 'amount': amount, From 1d6af2b8ec155fcebb3efb3c5d2c526ee24c375e Mon Sep 17 00:00:00 2001 From: Aleksey Date: Wed, 8 Jun 2022 10:24:55 +0300 Subject: [PATCH 2/2] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Немного исправлено описание библиотеки и добавлено описание функции webhook_veify() --- README.md | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d848cc2..d17d889 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # pyspapi -Фреймворк [API](https://github.com/sp-worlds/api-docs) для серверов СП +[API](https://github.com/sp-worlds/api-docs) обертка для серверов СП, написанная на Python. ## Установка **Требуется *Python 3.7* или выше** @@ -34,7 +34,7 @@ print(api.payment(amount=1, - `redirectUrl` - URL страницы, на которую попадет пользователь после оплаты - `webhookUrl` - URL, куда наш сервер направит запрос, чтобы оповестить ваш сервер об успешной оплате - `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 запрос. *Тело запроса будет в формате JSON:* @@ -43,6 +43,23 @@ print(api.payment(amount=1, - `amount` - Стоимость покупки - `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) ```Python @@ -61,7 +78,7 @@ print(api.transaction(receiver='12345', - `receiver` - Номер карты получателя - `amount` - Количество АР для перевода - `comment` - Комментарий к переводу -- + ### [Проверка наличия проходки](https://github.com/sp-worlds/api-docs/blob/main/USERS.md) ```Python