Recap-shan / payment.py
Phoe2004's picture
Rename payment.html to payment.py
e5d22f7 verified
raw
history blame
1.88 kB
# 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