You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quotex券商API开发:基于Session连接WebSocket发送订单问题求助

问题排查及修复方案

1. Socket.io协议适配错误

你对接的是Socket.io v3协议的WebSocket接口,不能直接用原生websocket库裸发数据,Socket.io有固定的报文规则:

  • 连接建立后服务端会先返回0开头的握手报文,你需要先响应握手,不能直接发鉴权请求
  • 所有事件报文前缀42是Socket.io的消息类型标识,要严格遵循报文结构,避免手动拼接出错

2. 鉴权请求格式错误

你当前手动拼接鉴权字符串的方式容易出现JSON语法错误,比如session值包含特殊字符时会导致整个报文无效,正确的构造方式应该是先组装数据结构,序列化后再加固定前缀:

import json
auth_payload = ["authorization", {"session": session, "isDemo": 1}]
auth_msg = "42" + json.dumps(auth_payload)
ws.send(auth_msg)

3. 订单报文重复且错误

你定义的order已经是符合要求的42前缀事件报文,不需要再用json.dumps二次序列化,你发送的order2是把整个订单报文转成了转义后的JSON字符串,发送后服务端无法识别,直接删掉order2相关代码即可。

4. 时序逻辑错误

  • 不需要循环发送3次鉴权请求,单次发送即可
  • 必须在on_message回调中收到鉴权成功的响应后,再发送订单请求,不能固定等待1秒就发订单,会出现鉴权还未完成就发单的问题

修复后最简示例代码

import json
import websocket
import time

is_auth_success = False
session = "替换为你从Selenium获取到的session值"

def on_message(ws, message):
    global is_auth_success
    print("收到消息:", message)
    # 处理Socket.io握手
    if message.startswith("0"):
        # 构造鉴权报文
        auth_payload = ["authorization", {"session": session, "isDemo": 1}]
        ws.send("42" + json.dumps(auth_payload))
    # 识别鉴权成功的响应,可根据服务端实际返回的字段调整判断逻辑
    if "success" in message and "authorization" in message:
        is_auth_success = True
        # 鉴权成功后发订单
        order_payload = ["orders/open", {
            "asset": "AUDCAD_otc",
            "amount": 6,
            "time": 1637893200,
            "action": "put",
            "isDemo": 1,
            "requestId": int(time.time()),
            "optionType": 1
        }]
        order_msg = "42" + json.dumps(order_payload)
        ws.send(order_msg)
        print("订单已发送")

def on_error(ws, error):
    print("错误:", error)

def on_close(ws, close_status_code, close_msg):
    print("### 连接关闭 ###")

def on_open(ws):
    print("### 连接已打开 ###")

if __name__ == "__main__":
    urlsocket = "wss://ws.qxbroker.com/socket.io/?EIO=3&transport=websocket"
    ws = websocket.WebSocketApp(
        urlsocket,
        on_open=on_open,
        on_message=on_message,
        on_error=on_error,
        on_close=on_close
    )
    ws.run_forever()

内容的提问来源于stack exchange,提问作者Popping The Beat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:54:03