mirror of
https://git.auk.su/Dinect/bonus-import-tools.git
synced 2025-12-28 18:10:01 +00:00
208 lines
6.3 KiB
Python
208 lines
6.3 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
# __author__ = 'szhdanoff@gmail.com'
|
|
__version__ = '1.0.3'
|
|
import os
|
|
import requests
|
|
import json
|
|
|
|
from dotenv import load_dotenv
|
|
load_dotenv()
|
|
|
|
is_prod = bool(os.getenv('PRODUCTION', False))
|
|
if is_prod:
|
|
url = 'https://pos-api.dinect.com/20130701/'
|
|
else:
|
|
url = 'https://pos-api-ote.dinect.com/20130701/'
|
|
|
|
print('PRODUCTION:', is_prod, '| API URL:', url)
|
|
|
|
# APP_TOKEN = os.getenv('APP_TOKEN')
|
|
# POS_TOKEN = os.getenv('POS_TOKEN')
|
|
|
|
app_token = os.getenv('APP_TOKEN')
|
|
pos_token = os.getenv('POS_TOKEN')
|
|
currency = os.getenv('CURRENCY', 'RUB')
|
|
|
|
HEADERS = {
|
|
'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-Charset': 'utf-8',
|
|
'Connection': 'close',
|
|
'Content-Type': 'application/json',
|
|
# 'Content-Type': 'application/x-www-form-urlencoded',
|
|
}
|
|
|
|
|
|
def get_user(search_id, get_type='auto', headers=None) -> tuple:
|
|
"""
|
|
A function to get user information based on the search_id and get_type.
|
|
|
|
Parameters:
|
|
search_id (str): The search id for the user.
|
|
get_type (str, optional): The type of search (default is 'auto').
|
|
headers (dict, optional): The headers for the request (default is None).
|
|
|
|
Returns:
|
|
tuple: A tuple containing a boolean value and the response data.
|
|
- The boolean value indicating success or failure.
|
|
- The response data based on the request made.
|
|
"""
|
|
if headers is None:
|
|
headers = HEADERS
|
|
|
|
base_url = url + 'users/'
|
|
# get_type = auto, card, phone, email, foreigncard
|
|
r = requests.get(
|
|
base_url,
|
|
headers=headers,
|
|
params={
|
|
get_type: search_id
|
|
}
|
|
)
|
|
if r.status_code == 200:
|
|
if len(r.json()) == 0:
|
|
return False, None, None, None, r.text
|
|
else:
|
|
return True, r.json()[0]['id'], r.json()[0]['card'], r.json()[0]['purchases_url'], r.json()
|
|
else:
|
|
return False, None, None, None, r.text
|
|
# return False, r.text
|
|
|
|
|
|
def new_user(full_name, phone, gender=1, foreign_card=None, email=None, headers=None):
|
|
"""
|
|
A function that creates a new user with optional headers.
|
|
|
|
Args:
|
|
headers (dict, optional): The headers to include in the request. Defaults to None.
|
|
|
|
Returns:
|
|
tuple: A tuple containing a boolean indicating the success of the request and the JSON response.
|
|
If the request is successful, the boolean is True and the JSON response is returned.
|
|
If the request is unsuccessful, the boolean is False and the JSON response is returned.
|
|
:param email:
|
|
:param gender:
|
|
:param foreign_card:
|
|
:param headers:
|
|
:param phone:
|
|
:param full_name :
|
|
"""
|
|
if headers is None:
|
|
headers = HEADERS
|
|
|
|
base_url = url + '/users/'
|
|
|
|
params = {
|
|
# "short_name": nickname,
|
|
"full_name": full_name,
|
|
"phone": phone,
|
|
"email": email,
|
|
"gender": gender,
|
|
}
|
|
|
|
r = requests.post(base_url, headers=headers, json=params)
|
|
if r.status_code == 201:
|
|
return True, r.json()
|
|
else:
|
|
return False, r.json()
|
|
|
|
|
|
def new_user_by_card(external_card, full_name, phone, gender=1, email=None, headers=None, use_existing=True):
|
|
"""
|
|
Creates a new user by card.
|
|
|
|
Args:
|
|
external_card (str): The external card code.
|
|
full_name (str): The full name of the user.
|
|
phone (str): The phone number of the user.
|
|
gender (int, optional): The gender of the user. Defaults to 1.
|
|
email (str, optional): The email of the user. Defaults to None.
|
|
headers (dict, optional): The headers to include in the request. Defaults to None.
|
|
use_existing (bool, optional): Whether to bind the user to an existing card. Defaults to True.
|
|
|
|
Returns:
|
|
tuple: A tuple containing a boolean indicating the success of the request and the JSON response.
|
|
If the request is successful, the boolean is True and the JSON response is returned.
|
|
If the request is unsuccessful, the boolean is False and the error message is returned.
|
|
"""
|
|
if headers is None:
|
|
headers = HEADERS
|
|
|
|
base_url = url + 'cards/'
|
|
params = {
|
|
'full_name': full_name,
|
|
'phone': phone,
|
|
'email': email,
|
|
'gender': gender,
|
|
'bind': use_existing,
|
|
'code': external_card,
|
|
'format': 'qrcode',
|
|
}
|
|
r = requests.post(base_url, headers=headers, json=params)
|
|
if r.status_code == 201:
|
|
return True, r.json()
|
|
else:
|
|
return False, r.text
|
|
|
|
|
|
def add_external_card(user_id, card, headers=None):
|
|
"""
|
|
Adds an external card to a user.
|
|
|
|
Args:
|
|
user_id (int): The ID of the user.
|
|
card (str): The card number.
|
|
headers (dict, optional): The headers to include in the request. Defaults to None.
|
|
|
|
Returns:
|
|
tuple: A tuple containing a boolean indicating the success of the request and the JSON response.
|
|
If the request is successful, the boolean is True and the JSON response is returned.
|
|
If the request is unsuccessful, the boolean is False and the JSON response is returned.
|
|
"""
|
|
if headers is None:
|
|
headers = HEADERS
|
|
|
|
base_url = url + 'users/cards/'
|
|
params = {
|
|
"card": card
|
|
}
|
|
r = requests.post(base_url, headers=headers, json=params)
|
|
if r.status_code == 201:
|
|
return True, r.json()
|
|
|
|
|
|
def bonuses_update(
|
|
user_id,
|
|
summ_total,
|
|
bonus_amount,
|
|
sum_with_discount,
|
|
sum_discount,
|
|
doc_id,
|
|
headers=None,
|
|
dry_run=False
|
|
):
|
|
if headers is None:
|
|
headers = HEADERS
|
|
|
|
base_url = url + 'users/' + str(user_id) + '/purchases/'
|
|
params = {
|
|
"doc_id": doc_id,
|
|
"bonus_amount": bonus_amount,
|
|
"sum_total": summ_total,
|
|
"sum_discount": sum_discount,
|
|
"sum_with_discount ": sum_with_discount,
|
|
"commit": 'True',
|
|
"curr_iso_name": 'RUB',
|
|
"override": 'True'
|
|
# "date": '2024-08-03 12:53:07',
|
|
}
|
|
r = requests.post(base_url, headers=headers, json=params)
|
|
if r.status_code == 201:
|
|
return True, r.json()
|
|
else:
|
|
return False, r.text
|