File size: 1,949 Bytes
1fadf37
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from flask import Flask, request, jsonify
import hmac
import hashlib
import requests
import time
from datetime import datetime

app = Flask(__name__)

# Configuration (to be moved to environment variables in production)
API_BASE_URL = "https://open-api.bingx.com"
API_KEY = ""  # Replace with environment variable or secure storage
API_SECRET = ""  # Replace with environment variable or secure storage

# Generate Signature
def generate_signature(api_secret, params_str):
    return hmac.new(api_secret.encode("utf-8"), params_str.encode("utf-8"), hashlib.sha256).hexdigest()

# Parse Parameters
def parse_params(params):
    sorted_keys = sorted(params.keys())
    param_pairs = [f"{key}={params[key]}" for key in sorted_keys]
    params_str = "&".join(param_pairs)
    return params_str + "&timestamp=" + str(int(time.time() * 1000)) if params_str else "timestamp=" + str(int(time.time() * 1000))

# Proxy Endpoint for API Requests
@app.route('/api/proxy', methods=['GET'])
def proxy_api():
    try:
        endpoint = request.args.get('endpoint')
        params = {key: value for key, value in request.args.items() if key != 'endpoint'}
        params['recvWindow'] = params.get('recvWindow', '5000')

        params_str = parse_params(params)
        signature = generate_signature(API_SECRET, params_str)
        url = f"{API_BASE_URL}{endpoint}?{params_str}&signature={signature}"

        headers = {
            'X-BX-APIKEY': API_KEY,
            'Content-Type': 'application/json'
        }

        response = requests.get(url, headers=headers)
        response.raise_for_status()
        return jsonify(response.json())

    except requests.exceptions.RequestException as e:
        return jsonify({"error": str(e), "status_code": e.response.status_code if e.response else 500}), 500
    except Exception as e:
        return jsonify({"error": str(e)}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=7860, debug=True)