Spaces:
Running
Running
| # 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 |