秒嘀短信(一)curl获取账户余额
之前在秒嘀云平台充了200,一直没用!
本篇文章是利用秒嘀的api获取账户余额
秒嘀的api文档地址: https://www.miaodiyun.com/developer.html#smsBalanceQuery
余额查询的请求地址: https://openapi.miaodiyun.com/distributor/user/query
请求方式: POST
请求包头: Content-type:application/x-www-form-urlencoded
请求参数:
请求字段 | 是否必返 | 字段说明 |
---|---|---|
respDataType | 可选 | 响应数据类型,JSON 或 XML 格式。默认为JSON |
accountSid | 必填 | 开发者主账号(ACCOUNT SID)。开发者账号唯一标识符 |
timestamp | 必填 | 时间戳(毫秒),格式:1547005945480 |
sig | 必填 | 签名:MD5(ACCOUNT SID + AUTH TOKEN + timestamp)。共32位(小写) |
最终的shell脚本
[root@tomcat1 ~]# cat query.sh
URL="https://openapi.miaodiyun.com/distributor/user/query"
accountSid=2a51xxxxxxxxxxxxxxxxx0e
timestamp="$(date +%s)000"
auth_token="343fddcxxxxxxxxxxxxxxxxxxxxx9c"
sig=$(echo -n "${accountSid}${auth_token}${timestamp}" | md5sum - | awk '{print $1}')
curl -s -X "POST" "https://openapi.miaodiyun.com/distributor/user/query" \
-H "Content-type:application/x-www-form-urlencoded" \
-d "accountSid=${accountSid}" \
-d "timestamp=${timestamp}" \
-d "sig=${sig}"
执行效果:
当前账户还有146.040元,账户创建时间:2017年12月25日18:50,手机号:156xxxxxxxx,更新时间:2019年12月27日 18:00:43,还有accountSid,响应码0000,邮件地址:[email protected]
响应码参考:https://www.miaodiyun.com/developer.html#statuCode
[root@tomcat1 ~]# bash query.sh
{"respDesc":"请求成功。","balance":"146.040","createTime":"2017-12-25 18:50:37","mobile":"156xxxxxxxx","activationStatus":"2","updateTime":"2019-12-27 18:00:43","accountSid":"f8exxxxxxxxxxxxxxxxxxx","respCode":"0000","email":"[email protected]","status":"1"}
可以用jq工具格式化结果
[root@tomcat1 ~]# apt install jq -y
[root@tomcat1 ~]# bash query.sh | jq
{
"respDesc": "请求成功。",
"balance": "146.040",
"createTime": "2017-12-25 18:50:37",
"mobile": "156xxxxxxxx",
"activationStatus": "2",
"updateTime": "2019-12-27 18:00:43",
"accountSid": "daxxxxxxxxxxxxxxxxxxxxxx",
"respCode": "0000",
"email": "[email protected]",
"status": "1"
}


遇到的坑
1、timestamp问题
上面表中给的timestamp格式为1547005945480,长度为13,但是date +%s
输出的长度为10位,为何凭空多出三位呢?
看了下官方的python脚本
t = time.time();
timestamp = str((int(round(t * 1000))));
我自己执行了下才知道,python的time模块获取的时间戳可以保留到小数点后7位,而t * 1000
就是将小数点后三位也保留使用了,round方法则是返回浮点数的四舍五入值,t*1000
后这个数还有4位小数,然后通过round方法对小数四舍五入变成整数
qqq@tomcat1:~$ python3.6
>>> import time
>>> t = time.time();
>>> print (t)
1577446018.6473875
>>> timestamp = str((int(round(t * 1000))));
>>> print (timestamp)
1577446018647
2、MD5sum问题
查看文件的md5用md5sum filename
qqq@tomcat1:~$ md5sum /etc/passwd
50f142e4624e4f13b089beece8a9afd8 /etc/passwd
查看字符串的md5用管道
qqq@tomcat1:~$ echo -n 123456 | md5sum -
e10adc3949ba59abbe56e057f20f883e -