102 lines
3.4 KiB
Python
102 lines
3.4 KiB
Python
import time, json, hashlib
|
||
from pathlib import Path
|
||
from woocommerce import API
|
||
from files2 import toom
|
||
from dotenv import load_dotenv
|
||
import os
|
||
import logging
|
||
|
||
load_dotenv()
|
||
|
||
|
||
CONSUMER_KEY = os.getenv('CONSUMER_KEY') # токен бота
|
||
CONSUMER_SECRET = os.getenv('CONSUMER_SECRET') # id чата
|
||
URLS = os.getenv('URLS')
|
||
# Настройки подключения
|
||
wcapi = API(
|
||
url=URLS,
|
||
consumer_key = CONSUMER_KEY, # ключ пользователя с правами admin/shop_manager
|
||
consumer_secret = CONSUMER_SECRET,
|
||
version="wc/v3",
|
||
timeout=30
|
||
|
||
)
|
||
|
||
|
||
STATE_FILE = Path("./last_order_state.json")
|
||
|
||
def load_last_state():
|
||
if STATE_FILE.exists():
|
||
with open(STATE_FILE, 'r') as f:
|
||
return json.load(f)
|
||
return None
|
||
|
||
def save_last_state(data):
|
||
with open(STATE_FILE, 'w') as f:
|
||
json.dump(data, f)
|
||
|
||
def get_order_hash(order):
|
||
# Хеш только по важным полям (чтобы не реагировать на мелочи)
|
||
important = {
|
||
'id': order.get('id'),
|
||
'status': order.get('status'),
|
||
'total': order.get('total'),
|
||
'date_modified': order.get('date_modified')
|
||
}
|
||
return hashlib.md5(json.dumps(important, sort_keys=True).encode()).hexdigest()
|
||
|
||
def check_order_changes():
|
||
last_state = load_last_state()
|
||
|
||
while True:
|
||
try:
|
||
response = wcapi.get("orders", params={
|
||
"per_page": 1,
|
||
"orderby": "date",
|
||
"order": "desc"
|
||
})
|
||
response.raise_for_status()
|
||
orders = response.json()
|
||
|
||
if not orders:
|
||
time.sleep(60)
|
||
continue
|
||
|
||
current_order = orders[0]
|
||
order_id = current_order['id']
|
||
current_hash = get_order_hash(current_order)
|
||
|
||
logging.info(f"🔍 [{order_id}] {current_order.get('status')} | {current_order.get('total')}")
|
||
|
||
if last_state and last_state.get('hash') == current_hash:
|
||
logging.info("⏳ Без изменений, жду...")
|
||
else:
|
||
logging.info("🔄 Изменения обнаружены!")
|
||
|
||
# 🔥 ТВОЯ ЛОГИКА
|
||
toom()
|
||
if last_state: # Не первый запуск
|
||
old_status = last_state.get('status')
|
||
new_status = current_order.get('status')
|
||
if old_status != new_status:
|
||
print(f"🎯 Статус сменился: {old_status} → {new_status}")
|
||
# process_order_change(order_id, new_status)
|
||
|
||
# Сохраняем новое состояние
|
||
save_last_state({
|
||
'id': order_id,
|
||
'hash': current_hash,
|
||
'status': current_order.get('status'),
|
||
'total': current_order.get('total'),
|
||
'modified': current_order.get('date_modified')
|
||
})
|
||
last_state = {'hash': current_hash, 'status': current_order.get('status')}
|
||
|
||
time.sleep(60)
|
||
|
||
except Exception as e:
|
||
print(f"❌ Ошибка: {e}")
|
||
time.sleep(60)
|
||
|
||
# if __name__ == "__main__":
|
||
# check_order_changes() |