# payment.py import os, json, uuid from datetime import datetime from pathlib import Path PAYMENT_DB_FILE = str(Path(__file__).parent / 'payments_db.json') def load_payments(): if not os.path.exists(PAYMENT_DB_FILE): return {'payments': []} try: with open(PAYMENT_DB_FILE, encoding='utf-8') as f: return json.load(f) except: return {'payments': []} def save_payments(db): with open(PAYMENT_DB_FILE, 'w', encoding='utf-8') as f: json.dump(db, f, ensure_ascii=False, indent=2) def create_payment(username, coins, price, slip_image_data=None): db = load_payments() payment_id = str(uuid.uuid4())[:8] payment = { 'id': payment_id, 'username': username, 'coins': coins, 'price': price, 'status': 'pending', 'created_at': datetime.now().isoformat(), 'updated_at': datetime.now().isoformat(), 'slip_image': slip_image_data, 'admin_note': '' } db['payments'].insert(0, payment) save_payments(db) return payment_id def update_payment_status(payment_id, status, admin_note=''): db = load_payments() for p in db['payments']: if p['id'] == payment_id: p['status'] = status p['updated_at'] = datetime.now().isoformat() if admin_note: p['admin_note'] = admin_note save_payments(db) return p return None def get_user_payments(username, limit=50): db = load_payments() return [p for p in db['payments'] if p['username'] == username][:limit] def get_pending_payments(): db = load_payments() return [p for p in db['payments'] if p['status'] == 'pending'] def get_payment_by_id(payment_id): db = load_payments() for p in db['payments']: if p['id'] == payment_id: return p return None