Coinex API BASH下单curl无法解析主机与签名错误问题求助
问题原因排查
第一个报错(无法解析https主机)原因
- curl命令参数错误:
-X -POST多了多余的横杠,正确写法是-X POST - URL被额外包裹了单引号:
"'$get_url'"会把单引号也作为URL的一部分,导致解析失败,直接写$get_url即可 - 变量名不一致:POST参数里引用的
$market未定义,你实际定义的交易对变量是$marketpair,导致提交的交易对参数为空
第二个报错(Signature error签名错误)原因
- md5sum的输出包含多余后缀:
md5sum命令默认输出结果后会跟随空格和-(代表读取自标准输入),你直接转大写后把多余的-也带入了authorization头,从日志里能看到头的值末尾多了- - jq获取tonce时未去除引号:
jq .data.date默认会给数字结果包裹双引号,导致签名时使用的tonce和提交的tonce值不一致 - 签名参数和POST提交的参数不一致:签名用的交易对是
$marketpair,POST提交的是未定义的$market,参数不匹配导致签名校验失败 - authorization头多了多余单引号:你头的写法里给值加了单引号,导致提交的签名值包含多余的单引号字符
可行解决方案
下面是修正后的完整脚本:
#!/bin/bash # Coinex市价单提交脚本 # 配置信息 access_id="xxxx" secret_key="xxxx" request_url="https://api.coinex.com/v1/order/market" amount="100.0" marketpair="DOGEUSDT" market_type="sell" # 获取毫秒级时间戳,加-r去除jq返回的引号 tonce=$(curl -s https://api.coinex.com/v1/market/ticker/all | jq -r .data.date) # 生成签名,只取md5sum的第一列去除后缀,再转大写 sign_str="access_id=${access_id}&amount=${amount}&market=${marketpair}&tonce=${tonce}&type=${market_type}&secret_key=${secret_key}" authorization=$(echo -n "${sign_str}" | md5sum | awk '{print $1}' | tr '[:lower:]' '[:upper:]') # 提交下单请求 curl -v \ -H "authorization: ${authorization}" \ -H "Content-Type: application/json" \ -d '{"access_id":"'"${access_id}"'","amount":"'"${amount}"'","market":"'"${marketpair}"'","tonce":'"${tonce}"',"type":"'"${market_type}"'"}' \ -X POST \ "${request_url}"
额外注意事项
- 确保你的API密钥开通了交易权限
- 本地时间和服务器时间差不要超过60秒,避免tonce校验失败
- 市价卖单的amount是卖出币种的数量,买单的amount是计价币的数量,不要填错
内容的提问来源于stack exchange,提问作者mehdi shokati
相关产品推荐
相关产品推荐

