first commit

This commit is contained in:
Xander 2024-08-22 15:16:07 +03:00
commit 6233aa2dd0
5 changed files with 354 additions and 0 deletions

46
.gitignore vendored Normal file
View File

@ -0,0 +1,46 @@
# Игнорируем директорию с пользовательскими настройками IDE
.idea/
.vscode/
# Игнорируем файлы логов
*.log
# Игнорируем кэш и временные файлы
*.tmp
*.swp
*.bak
# Игнорируем файлы окружения Python
*.pyc
__pycache__/
# Игнорируем конфигурации ОС
.DS_Store
Thumbs.db
# Игнорируем директорию с зависимостями (например, для Node.js)
node_modules/
# Игнорируем файлы виртуального окружения Python
.venv/
.env/
# Игнорируем скомпилированные файлы
*.out
*.class
*.o
# Игнорируем артефакты сборки
/dist/
/build/
/target/
# Игнорируем файлы базы данных
*.sqlite
*.db
# Исключаем файл конфигурации среды, например, переменные окружения
.env
ww
pymb.py
test.py

0
README.md Normal file
View File

274
main.py Normal file
View File

@ -0,0 +1,274 @@
import requests
from datetime import datetime, timedelta
from models import *
import re
import time
import uuid
from dotenv import load_dotenv
import os
load_dotenv()
KCRM =os.getenv('KEYCRM_API')
CLIENT_ID = os.getenv('CLIENT_ID')
USERNAME = os.getenv('USERNAME')
PASSWORD = os.getenv('PASSWORD')
CLIENT_SECRET = os.getenv('CLIENT_SECRET')
def datass():
# Получение текущей даты
current_date = datetime.now()
# Форматирование даты в формат YYYY-MM-DD
formatted_date = current_date.strftime('%Y-%m-%d')
# print(formatted_date)
return formatted_date
def datass_pymb():
# Получение текущей даты
current_date = datetime.now()
# Форматирование даты в формат YYYY-MM-DD
formatted_date = current_date.strftime('%d.%m.%Y')
# print(formatted_date)
return formatted_date
def oplata(order_ids):
# Получение всех записей
# orders = Transaction.select()
order = Transaction.get_or_none(Transaction.id == order_ids)
# for order in orders:
if order:
numbers = re.findall(r'\d+', order.description)
if numbers: # Проверяем, что список не пуст
first_number = numbers[0] # Получаем первое значение из списка
print(first_number, order.amount, order.uuid)
# formatted_datetime = datetime.strptime(order.created_at, "%Y-%m-%dT%H:%M:%S.%fZ").strftime("%Y-%m-%d %H:%M:%S")
# print(first_number, order.amount, formatted_datetime, order.description)
headers = {
'accept': 'application/json',
'Authorization': f'Bearer {KCRM}',
}
# response = requests.get(f'https://openapi.keycrm.app/v1/order/17', headers=headers)
json_data = {
'payment_method_id': 3,
'payment_method': 'Банковский перевод',
'amount': order.amount,
'status': 'paid',
'description': order.description,
'payment_date': order.created_at,
}
response = requests.post(f'https://openapi.keycrm.app/v1/order/{first_number}/payment', headers=headers, json=json_data)
# response = requests.put('https://openapi.keycrm.app/v1/order/17/payment/1161', headers=headers, json=json_data)
print(response.json())
else:
print(f"Order with ID {order_id} not found.")
def trans():
headers = {
'accept': 'application/json',
'Authorization': f'Bearer {KCRM}',
}
params = {
'limit': '30',
'page': '1',
'include': 'payment_method',
'filter[created_between]': f'{datass()} 00:00:00, {datass()} 23:59:59',
# 'filter[created_between]': f'2024-08-20 00:00:00, 2024-08-20 23:59:59',
}
response = requests.get('https://openapi.keycrm.app/v1/payments/external-transactions', params=params, headers=headers)
aaa = response.json()['data']
# print(aaa)
for aa in aaa:
ids = aa['id']
payments_data = aa['payments_data']
amount = aa['amount']
description =aa['description']
uuid = aa ['uuid']
created_at = aa ['transaction_date']
timestamp = datetime.strptime(created_at, "%Y-%m-%dT%H:%M:%S.%fZ") # Преобразование строки в datetime
new_timestamp = timestamp + timedelta(hours=3) # Добавление 3 часов
gateway_id = aa ['gateway_id']
# print(f'{ids} {uuid} {amount} {description}')
# Проверка существования записи с таким id
if not Transaction.select().where(Transaction.id == ids).exists():
# Запись данных в таблицу, если id не существует
new_transaction = Transaction.create(id=ids, uuid=uuid, amount=amount, description=description, created_at = new_timestamp,gateway_id=gateway_id)
# print(f'Запись добавлена: {new_transaction.id} {new_transaction.uuid} {new_transaction.amount} {new_transaction.description}')
numbers = re.findall(r'\d+', description)
if gateway_id == 1:
# Выводим все численные значения
if numbers: # Проверяем, что список не пуст
first_number = numbers[0] # Получаем первое значение из списка
print(first_number)
headers = {
'accept': 'application/json',
'Authorization': f'Bearer {KCRM}',
}
response = requests.get(f'https://openapi.keycrm.app/v1/order/{first_number}', headers=headers)
resp = response.json()
if 'message' in resp:
print('NOT ORDERS')
else:
# Дальше идет обработка данных заказа
print(resp)
oplata(ids)
else:
pass
else:
print(f'Запись с id {ids} уже существует, пропускаем.')
db.close()
def pymb():
token_url = "https://auth.fuib.com/auth/realms/VegaNet/protocol/openid-connect/token"
# Параметры запроса
data = {
'grant_type': 'password',
'client_id': CLIENT_ID,
'username': USERNAME,
'password': PASSWORD,
'client_secret': CLIENT_SECRET
}
# Заголовки запроса
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
# Выполнение POST-запроса
response = requests.post(token_url, data=data, headers=headers)
# print(response.json())
# Проверка статуса ответа
if response.status_code == 200:
# Получение токена из ответа
token_info = response.json()
access_token = token_info.get('access_token')
# print(f"Access Token: {access_token}")
session_id = token_info.get('session_state')
# print(f"Access Token: {session_id}")
else:
print(f"Failed to get token. Status code: {response.status_code}, Response: {response.text}")
request_guid = str(uuid.uuid4()) # Генерация уникального RequiestGUID
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
fingerprint_id = user_agent # Используем UserAgent в качестве FingerprintId
#Запрос на получение транзакций
api_url = "https://service.fuib.com:4103/war_veganet_api/document/period-transactions"
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {access_token}',
'X-App-Channel': 'pure-api',
'X-Flow-ID': f'{request_guid}:{session_id}:{fingerprint_id}'
}
data = {
"accountId": 191214708,
# "documentType": ["UNKNOWN"], # Типы документов (обязательный)
# "dateFrom": "21.08.2024 00:00:00",
"dateFrom": f"{datass_pymb()} 00:00:00",
"dateTo": f"{datass_pymb()} 23:59:00"
}
# # Выполнение POST-запроса
response = requests.post(api_url, json=data, headers=headers)
# Проверка статуса ответа
if response.status_code == 200:
# Успешный ответ
response_data = response.json()['transactions'] # Ответ в формате JSON
# print(f"Filtered Account Data: {response_data}")
for datas in response_data:
flag = datas['dcFlag']
amount = datas['amount']
narrative = datas['narrative']
documentDate = datas['documentDate']
documentNumber = datas['documentNumber']
transactionId = datas['transactionId']
document_date = datetime.strptime(documentDate, "%d.%m.%Y %H:%M:%S")
# Convert to the desired format (Y-m-d H:i:s)
formatted_date = document_date.strftime("%Y-%m-%d %H:%M:%S")
if not Transaction.select().where(Transaction.id == transactionId).exists():
# Запись данных в таблицу, если id не существует
new_transaction = Transaction.create(id=transactionId, uuid=documentNumber, amount=amount, description=narrative, created_at = formatted_date,gateway_id=flag)
numbers = re.findall(r'\d+', narrative)
if numbers: # Проверяем, что список не пуст
first_number = numbers[0] # Получаем первое значение из списка
print(first_number)
headers = {
'accept': 'application/json',
'Authorization': f'Bearer {KCRM}',
}
response = requests.get(f'https://openapi.keycrm.app/v1/order/{first_number}', headers=headers)
resp = response.json()
if 'message' in resp:
print('NOT ORDERS')
else:
# Дальше идет обработка данных заказа
print(resp)
oplata(transactionId)
else:
print(f'Запись с id {transactionId} уже существует, пропускаем.')
else:
# Ошибка
print(f"Failed to get filtered account data. Status code: {response.status_code}, Response: {response.text}")
db.close()
def mains():
while True:
try:
trans()
pymb()
except Exception as e:
# print(e.with_traceback())
print(e)
print("PAUSE")
time.sleep(600)
if __name__ == "__main__":
mains()

27
models.py Normal file
View File

@ -0,0 +1,27 @@
from peewee import *
# Соединение с базой данных SQLite (или любой другой поддерживаемой базой данных)
db = SqliteDatabase('my_database.db')
# Определение модели для таблицы
class Transaction(Model):
id = AutoField()
uuid = CharField()
amount = FloatField()
description = CharField()
created_at = CharField()
gateway_id = CharField()
class Meta:
database = db # Указание базы данных
# Создание таблицы
db.connect()
db.create_tables([Transaction])
# Пример добавления данных в таблицу
# new_transaction = Transaction.create(amount=100.50, description='Payment for services')
# print(new_transaction.id, new_transaction.amount, new_transaction.description)
# Закрытие соединения с базой данных
# db.close()

7
requirements.txt Normal file
View File

@ -0,0 +1,7 @@
certifi==2024.6.2
charset-normalizer==3.3.2
idna==3.7
peewee==3.17.5
python-dotenv==1.0.1
requests==2.32.3
urllib3==2.2.2