import os import subprocess import sys from flask import Flask, request, jsonify, make_response from flask_cors import CORS from config import get_config from services.order import OrderService from services.user import UserService from utils.datetime import parse_time_string, to_milliseconds app = Flask('app') CORS(app, resources={r"/*": {"origins": "http://localhost:8080"}}) config = get_config() config.order.lifetime = to_milliseconds(**parse_time_string(config.order.lifetime)) order_service = OrderService(config) user_service = UserService(config) @app.after_request def add_cors_headers(response): response.headers['Access-Control-Allow-Origin'] = 'http://127.0.0.1:8080' # 具体的来源 # response.headers['Access-Control-Allow-Credentials'] = 'true' # 如果需要凭据支持 response.headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS' response.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization' return response @app.route('/createOrder', methods=['POST']) def create_order(): data = request.get_json() payment_method = data.get('paymentMethod', None) if payment_method not in config['PaymentAddresses']: return jsonify({ "message": "wrong payment method" }), 400 quant = int(data.get('amount', 0)) if quant < config.order.get_int("min_quant"): return jsonify({ "message": "Amount below minimum limit." }), 400 wallet_address = data.get('wallet_address', None) if wallet_address is None: name = data.get('name', None) phone = data.get('phone', None) email = data.get('email', None) wallet_addresses = user_service.get_wallet_addresses(name, phone, email) if not wallet_addresses: return jsonify({ "message": "empty wallet address" }), 400 if len(wallet_addresses) > 1: return jsonify({ "message": "Please select an address to place your order.", "wallet_addresses": wallet_addresses }), 200 # 单个地址 wallet_address = wallet_addresses[0] order_id, create_timestamp = order_service.create_order(quant, wallet_address) return jsonify({"orderID": order_id, "amount": quant, "orderCreateTimestamp": create_timestamp, "orderExpirationTime": config.order.lifetime}), 200 order_status = config.order.order_status @app.route('/finishOrder', methods=['GET']) def finish_order(): data = request.get_json() order_id = data.get('orderID', None) status = order_service.finish_order(order_id) return jsonify({"order_id": order_id, "status": status, "msg": order_status[status]}), 200 def run_gunicorn(): # Gunicorn 的命令和参数 command = [sys.executable, '-m', 'gunicorn', 'app:app'] # 启动 Gunicorn subprocess.run(command) if __name__ == '__main__': if os.name == 'nt': app.run(debug=True, port=5000, host='0.0.0.0') elif os.name == 'posix': run_gunicorn()