SQL Server调用Binance API传递API Key遇格式错误如何解决
SQL Server调用Binance API获取个人账户信息解决方案
可行性结论
该需求完全可实现,你遇到的{"code":-2014,"msg":"API-key format invalid."}错误是API Key传递格式不符合Binance规范导致的,不属于功能不可实现的问题。
现有代码的核心错误
- Binance要求
X-MBX-APIKEY必须放在HTTP请求头中传递,你当前将其封装为JSON放在GET请求的请求体中发送,完全不符合接口要求 - GET请求不需要携带
Content-Type: application/json请求头,额外添加会导致接口解析异常 - 你定义的
@Api_Key变量为JSON数组格式,不符合请求头参数的赋值规则
修正后可运行代码
DECLARE @Object AS INT; DECLARE @ResponseT AS VARCHAR(max); DECLARE @Response AS TABLE(Json_Table NVARCHAR(MAX)) -- 需自行生成正确的毫秒级时间戳,注意必须是13位数字 DECLARE @Timestamp_Value NVARCHAR(255) = '1638181223430' -- 需用你的API SECRET对 timestamp=xxx 做HMAC SHA256签名,输出十六进制字符串填到此处 DECLARE @Signature NVARCHAR(255) = 'XXXXXXXXXXXXXXXXXXXXXX' -- 替换为你自己的API Key DECLARE @Api_Key_Value varchar(255) = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY' DECLARE @Url NVARCHAR(1000) = 'https://api.binance.com/api/v3/account?'+'timestamp='+@Timestamp_Value+'&signature='+@Signature EXEC sp_OACreate 'MSXML2.ServerXMLHTTP', @Object OUT; EXEC sp_OAMethod @Object, 'open', NULL, 'get', @Url, 'false' -- 把API Key放到请求头里 EXEC sp_OAMethod @Object, 'setRequestHeader', NULL, 'X-MBX-APIKEY', @Api_Key_Value; -- GET请求不需要传请求体,send参数留空 EXEC sp_OAMethod @Object, 'send', null; EXEC sp_OAMethod @Object, 'responseText', @ResponseT OUTPUT INSERT INTO @Response (Json_Table) EXEC sp_OAGetProperty @Object, 'responseText' SELECT * FROM @Response EXEC sp_OADestroy @Object
额外注意事项
- 需确保你的SQL Server实例开启了OLE自动化存储过程权限,否则
sp_OACreate等存储过程无法调用 - 时间戳必须是毫秒级的13位整数,你原示例中的时间戳只有12位,会触发签名无效错误
- 签名必须严格按照Binance官方规则生成:将所有查询参数按ASCII码排序后拼接成字符串,用API Secret作为密钥做HMAC SHA256加密,输出小写十六进制字符串作为signature值
- 需确保你API Key的IP白名单配置包含SQL Server所在服务器的公网IP,否则接口会返回权限错误
内容的提问来源于stack exchange,提问作者rkapukaya
相关产品推荐
相关产品推荐

