秒嘀短信(一)curl获取账户余额

之前在秒嘀云平台充了200,一直没用!

官网:https://sms.miaodiyun.com/

本篇文章是利用秒嘀的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  -