first commit
This commit is contained in:
commit
6233aa2dd0
|
@ -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,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()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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()
|
|
@ -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
|
Loading…
Reference in New Issue