diff --git a/trading_system/binance_client.py b/trading_system/binance_client.py index b806581..dd25517 100644 --- a/trading_system/binance_client.py +++ b/trading_system/binance_client.py @@ -2037,12 +2037,22 @@ class BinanceClient: ws_params["apiKey"] = self.api_key if "timestamp" not in ws_params: ws_params["timestamp"] = int(time.time() * 1000) - # 计算签名(和 REST 一样的方式) + # 计算签名:币安要求参与签名的值格式与 REST 一致(布尔小写、空值不参与或为空串) if "signature" not in ws_params: import hmac import hashlib from urllib.parse import urlencode - query_string = urlencode(sorted([(k, str(v)) for k, v in ws_params.items() if k != "signature"])) + def _param_val_for_signature(v): + if v is True: + return "true" + if v is False: + return "false" + if v is None: + return "" + s = str(v).strip() + return s if s else "" + sign_params = [(k, _param_val_for_signature(v)) for k, v in ws_params.items() if k != "signature"] + query_string = urlencode(sorted(sign_params)) signature = hmac.new( self.api_secret.encode('utf-8'), query_string.encode('utf-8'),