diff --git a/README.md b/README.md index b20a0e5..c00a83b 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,10 @@ -# bonus-import-tools +# bonus-import-tools - Приложение для импорта бонусных баллов. -bonus-import-tools +## Типы установки -## Приложение для импорта бонусных баллов. +- через python VENV (для разработки) +- через docker-compose (на сервере) +- через Nuitka (TODO)(у стороннего клиента) ### Требования для установки через pipenv @@ -55,3 +57,6 @@ cd loyalty-load-tester pip install -r requirements.txt ``` +### Запуск exe (TODO) + +- Nuitka diff --git a/dinect_api.py b/dinect_api.py index 04ef5c9..5567bb9 100644 --- a/dinect_api.py +++ b/dinect_api.py @@ -6,20 +6,147 @@ import json import httpx # local imports import app +import requests + app_token = app.APP_TOKEN pos_token = app.POS_TOKEN merchant_id = app.MERCHANT_ID +url = app.API_URI -url = 'https://api.dinect.ru/v1/' +__version__ = '1.0.0' HEADERS = { - 'Authorization': f'{app_token}', - 'DM-Authorization': f'{pos_token}', - 'User-Agent': 'bonus-import-tools-2024', + 'Authorization': f'dmtoken {pos_token}', + 'DM-Authorization': f'dmapptoken {app_token}', + 'User-Agent': f'bonus-import-tools-2024 v.{__version__}', 'Accept': 'application/json', - 'Accept-Language': 'ru,ru-RU;q=0.8,en-gb;q=0.5,en;q=0.3', + # 'Accept-Language': 'ru,ru-RU;q=0.8,en-gb;q=0.5,en;q=0.3', 'Accept-Charset': 'utf-8', 'Connection': 'close', - 'Content-Type': 'application/x-www-form-urlencoded', -} \ No newline at end of file + 'Content-Type': 'application/json', + # 'Content-Type': 'application/x-www-form-urlencoded', +} + + +# GET /20130701/tokens/?next=/20130701/logon +# https://pos-api.dinect.com/20130701/tokens/3b01228843d115ae8c03a4d3b20dcb545dbb228c + +def get_user(search_id, get_type='auto', headers=None): + """ + Retrieves user information based on the provided search ID. + + Args: + search_id (str): The ID used to search for the user. + get_type (str, optional): The type of search to perform. Defaults to 'auto'. + headers (dict, optional): The headers to include in the request. Defaults to None. + + Returns: + tuple: A tuple containing a boolean indicating if the user was found and the response text. + + Raises: + None + + Example: + # >>> get_user('1234567890123', get_type='auto') + (True, '[{"id":1002,"card":"4620011139016364102713436","discount":0,"amount":"0.00","purchases":0,"bonus":10,"first_name":"Сергей Жданов","last_name":"","middle_name":"","photo_urls":{"100x125":"https://static.dinect.com/load/usr/ava/000/000/001/002/43ebeec7c6ee/avatar-100x100.png","50x62":"https://static.dinect.com/load/usr/ava/000/000/001/002/43ebeec7c6ee/avatar-50x50.png"},"coupons_url":"https://pos-api.dinect.com/20130701/users/1002/coupons/","purchases_url":"https://pos-api.dinect.com/20130701/users/1002/purchases/byforeigncard/1234567890123/","loyalty_url":"https://pos-api.dinect.com/20130701/loyalties/byforeigncard/1234567890123","url":"https://pos-api.dinect.com/20130701/users/1002"}]') + """ + if headers is None: + headers = HEADERS + + base_url = url + '/users/' + # get_type = auto, card, phone, email, foreigncard + response = httpx.get( + base_url, + headers=headers, + params={ + get_type: search_id + } + ) + + if response.status_code == 200: + # print('User found', user_id, 'response.text', response.text) + return True, response.text + else: + # print('get_headers', headers) + # print('response_headers', response.headers) + # print('User not found', search_id, 'response.text', response.text) + return False, response.text + + +def new_user(foreign_card, headers=None): + if headers is None: + headers = HEADERS + + base_url = url + '/users/' + response = httpx.post( + base_url, + headers=headers, + json={ + 'foreigncard': foreign_card + } + ) + + if response.status_code == 200: + return True, response.text + else: + return False, response.text + + +def bonuses_update(user_id, summ_total, bonus_amount, doc_id, headers=None): + if headers is None: + headers = HEADERS + + print(headers) + + base_url = url + 'users/' + str(user_id) + '/purchases/' + params = { + "doc_id": doc_id, + "bonus_amount": bonus_amount, + "sum_total": summ_total, + # "sum_total": '0.00', + "sum_discount": '10.00', + "sum_with_discount ": '90.00', + "commit": 'True', + # "curr_iso_code": '643', + # "redeem_auto": 'True', + "curr_iso_name": 'RUB', + # "override": 'True', + # 'password': 'True', + "date": '2024-08-03 12:53:07', + } + # data = { + # 'bonus_amount': '10.00', + # 'commit': 'True', + # 'curr_iso_code': '643', + # 'override': 'True', + # # 'password': 'True', + # 'sum_total': '0', + # } + r = requests.post(base_url, headers=headers, json=params) + # {"doc_id": "test1", "bonus_amount": "10", "commit": "False", "curr_iso_code": "643", "override": "True", "sum_total": "100"} + + # response = httpx.post( + # base_url, + # headers=headers, + # params=params + # ) + + # if response.status_code == 200: + # return True, response.text + # else: + # print('params', params) + # print('base_url', base_url) + # return False, response.text + print('params', params) + if r.status_code == 201: + return True, r.text + else: + return False, r.text + + +# print(get_user('1234567890123')) +# print(get_user('1002')) +# print(new_user('1234567890123')) + +print(bonuses_update('1002', '100.00', '10.00', doc_id='test11'))