Http接入协议
版本 | 制定者 | 更改内容 | 修改时间 | 变更原因 |
---|---|---|---|---|
V1.0.0 | frank | 1.定义了短信提交接口测试 2.定义了回执主动推送接口 |
2018-4-27 | 增加接口 |
一、短信下行
1. 请求
(1)请求地址: http://ip:port/sms/submit
注意:为了确保数据隐私和安全,用户需要通过Http Post方式请求,消息格式:json表达式。
(2)Http标准包头字段:
Accept:application/json;
Content-Type:application/json;charset=utf-8;
(3)请求包体:
属性 | 类型 | 约束 | 说明 |
---|---|---|---|
tradeNo | String | 必选 | 交易唯一流水号,请求方生成,最大60位; 如:当前时间戳+六位随机数; 注:该字段是本次交易的唯一标识 |
appid | String | 必选 | 帐号-6位,如:100000 |
mobile | String | 必选 | 发送手机号码,支持多号码,号码之间用英文逗号隔开,最多1000个。如:单个号码 13900000000 , 多个号码 13900000000,13900000001 |
content | String | 必选 | 【签名】+ 短信内容,UTF-8编码,短信内容最长500个字(包括英文字母),其中签名2-12个字(包括英文字母) |
extno | String | 可选 | 自扩展端口,1-4位,只能为数字,可以为空(注:请先询问当前账号是否支持自扩展端口,如果不支持,请填空) |
xid | String | 可选 | 用户透传ID, 随状态报告返回,最长60位 |
sign | String | 必选 | 动态签名:把mobile,content字段的值和平台分配的appkey值,一起用MD5加密,得到一个32位的加密签名。 算法如下:sign=MD5(mobile+content+appkey),如:3bc0cc96e65f4f202a562a05bce37532 |
注:
①extno字段用于客户传送由客户自行分配给子客户的扩展端口,用于上行短信回来与之对应。
如:某客户下有A、B、C三个子客户,并且该客户获得某通道两位自扩展,分别对其子客户自行分配的扩展端口依次为子客户A:01,子客户B:02,子客户C:03。
若子客户A在发送下行短信时将该扩展端口01填入此字段即可,上行短信将会把此字段的扩展端口01发给客户,用于客户区分哪个子客户的上行短信,子客户A可根据上行短信中的电话号码对应之前的下行手机号码。②xid字段是用户扩展字段,随状态报告带回,可用于传入用户自己平台的该短信交易的唯一号。
③sign字段把手机号码和短信内容一起加密,防止这2个字段值在传输过程中被篡改。
- (4)JSON请求示例:
{
tradeNo:20180428130412000001,
appid:100000,
mobile:13800138000,13800138001,19800138002,19800138003,
content:【短信宝】您的验证码为:1234,
extno:01,
xid:00,
sign:3bc0cc96e65f4f202a562a05bce37532
}
包头/包体 | 实例 | 备注 |
---|---|---|
Header | POST /sms/submit HTTP/1.1 Accept-Encoding:identity Content-Length:226 Host:IP:PORT Accept:application/json Content-Type:application/json;charset=utf-8 |
蓝色字体为可变部分,保证路径正确,采用HTTP的POST方式发送; |
Body | { “tradeNo”: “20180428130412000001”, “appid”: “100000”, “mobile”: “13800138000,13800138001,19800138002,19800138003”, “content”: “【短信宝】您的验证码为1234”, “extno”: “00”, “xid”: “00”, “sign”: “3bc0cc96e65f4f202a562a05bce37532” } |
蓝色字体为可变部分 |
2. 响应
- (1)响应包体 :
属性 | 类型 | 约束 | 说明 |
---|---|---|---|
tradeNo | String | 必选 | 交易唯一流水号,与请求消息tradeNo字段的值一致。 该字段唯一确认该响应消息是对哪个请求消息的回应。 备注:客户端异步提交的时候可以通过该字段配对到具体的请求消息。 |
result | String | 必选 | 短信请求响应返回码,参考“请求响应返回码”定义的返回码 |
desc | String | 必选 | 短信请求响应返回中文描述,参考“请求响应返回码”定义的中文描述 |
taskId | String | 必选 | 短信任务号,本次请求分配的唯一编号(通过该字段匹配到状态报告) 群发的话 可以通过taskId+mobile确认唯一一条状态报告 |
errPhones | String | 可选 | 群发场景下提交失败的号码(一般是号码不正确) 多个号码用英文逗号隔开 |
- (2)JSON响应示例 :
{
tradeNo:20180428130412000001,
result:P00000,
desc:提交成功,
taskId:db6b7d847b8c4ca99f167bde211abbd2,
errPhones:
}
包头/包体 | 实例 | 备注 |
---|---|---|
Header | HTTP/1.1 200 OK Accept-Encoding:identity Content-Length:133 Host:IP:PORT Accept:application/json Content-Type:application/json;charset=utf-8 |
蓝色字体为可变部分 |
Body | { “tradeNo”: “20180428130412000001”, “result”: “P00000”, “desc”: “提交成功”, “taskId”: “db6b7d847b8c4ca99f167bde211abbd2”, “errPhones”: “” } |
蓝色字体为可变部分 |
二、短信状态报告-推送方式
1. 请求
(1)请求地址 :
需要第三方自行配置URL地址,接受http post请求,消息格式:json表达式。
该接口一次最多推送1000个状态报告。
(2)请求包体 :
属性 | 类型 | 约束 | 说明 |
---|---|---|---|
taskId | String | 必选 | 短信下行的时候,平台分配的任务号 |
mobile | String | 必选 | 短信接收端手机号码 |
xid | String | 可选 | 用户透传ID,随状态报告返回 |
resultCode | String | 必选 | 状态报告指示短信发送结果,DEVILER(成功)/其他(失败) |
resultDesc | String | 必选 | 状态报告结果描述 |
deliverTime | Long | 必选 | 状态报告时间,1970年1月1日零时以来的毫秒数 |
sendTime | Long | 可选 | 用户提交时间,1970年1月1日零时以来的毫秒数 |
注:
①taskId字段返回内容和第一章第2节响应中的“短信任务号”一致,用于与之前下行短信的发送记录相对应;
②xid字段返回内容和第一章第2节响应中的“用户透传ID”一致,用于客户自定义扩展;
③resultCode表示短信是否成功投递到手机,“DELIVER”表示投递成功,其他表示失败;
④resultDesc字段是对resultCode结果值的具体描述。
通过taskId和mobile两字段可确定是哪个手机的下行短信状态报告;
通过resultCode和resultDesc字段可确定手机是否收到下行短信,并清楚下行短信投递状态;
通过deliverTime字段可确定下行短信的到达时间。
- (3)JSON请求示例 :
[
{
taskId:6df59d3c15914bbfbb6616baaeee8242,
mobile:13800138000,
xid:00,
resultCode:DELIVRD,
resultDesc:消息投递成功,
deliverTime: 1532603273000 ,
sendTime: 1532603273000
},
{
taskId:6df59d3c15914bbfbb6616baaeee8242,
mobile:13800138001,
xid:00,
resultCode:UNDELIV,
resultDesc:消息投递失败,
deliverTime:1532603273000,
sendTime:1532603273000
}
]
包头/包体 | 实例 | 备注 |
---|---|---|
Header | POST /xxx/xxx/xxx HTTP/1.1 Accept-Encoding:identity Content-Length:407 Host:IP:PORT Accept:application/json Content-Type:application/json;charset=utf-8 |
蓝色字体为可变部分,保证路径正确,采用HTTP的POST方式发送; |
Body | [{ “taskId”: “6df59d3c15914bbfbb6616baaeee8242”, “mobile”: “13800138000”, “xid”: “00”, “resultCode”: “DELIVRD”, “resultDesc”: “消息投递成功”, “deliverTime”:1532603273000, “sendTime”:1532603273000 }, { “taskId”: “6df59d3c15914bbfbb6616baaeee8242”, “mobile”: “13800138001”, “xid”: “00”, “resultCode”: “UNDELIV”, “desc”: “消息投递失败”, “deliverTime”:1532603273000, “sendTime”:1532603273000 }] |
蓝色字体为可变部分 |
2. 响应
- (1)响应包体:
属性 | 类型 | 约束 | 说明 |
---|---|---|---|
code | String | 必选 | 返回错误码,0:成功,其它失败 |
errmsg | String | 可选 | 返回错误详细描述 |
- (2)JSON响应示例:
成功:
{
code:0
}//成功
失败:
{
code:-1,
errmsg:ip limit
}//ip非法
包头/包体 | 实例 | 备注 |
---|---|---|
Header | HTTP/1.1 200 OK Accept-Encoding:identity Content-Length:13 Host:IP:PORT Accept:application/json Content-Type:application/json;charset=utf-8 |
蓝色字体为可变部分 |
Body | {“code”: “0”} 或 {“code”: “-1”,”errmsg”: “ip limit”} |
蓝色字体为可变部分 |
三、短信状态报告-拉取方式
1. 请求
- (1)请求地址 : http://ip:port/report/{用户帐号}/get
注意:为了确保数据隐私和安全,用户需要通过HttpPost方式请求,消息格式:json表达式。
(2)Http标准包头字段 :
Accept:application/json;
Content-Type:application/json;charset=utf-8;
(3)请求包体 :
属性 | 类型 | 约束 | 说明 |
---|---|---|---|
appid | String | 必选 | 帐号,6位,平台分配的appid 如:100000 |
sign | String | 必选 | 签名,平台分配的appkey 用MD5加密 如:81cefb4dbd7081baaaa92906514e708e |
- (4)JSON请求示例 :
{
appid:100000,
password:81cefb4dbd7081baaaa92906514e708e
}
包头/包体 | 实例 | 备注 |
---|---|---|
Header | POST /report/100000/get HTTP/1.1 Accept-Encoding:identity Content-Length:60 Host:ip:port Accept:application/json Content-Type:application/json;charset=utf-8 |
蓝色字体为可变部分,保证路径正确,采用HTTP的POST方式发送; |
Body | { “appid”: “100000”, “sign”: “81cefb4dbd7081baaaa92906514e708e” } |
蓝色字体为可变部分 |
2.响应
- (1)响应包体 :
属性 | 类型 | 约束 | 说明 |
---|---|---|---|
taskId | String | 必选 | 短信下行的时候,平台分配的任务号 |
mobile | String | 必选 | 短信接收端手机号码 |
xid | String | 可选 | 用户透传ID,随状态报告返回 |
resultCode | String | 必选 | 状态报告指示短信发送结果,DEVILER(成功)/其他(失败) |
resultDesc | String | 必选 | 状态报告结果描述 |
deliverTime | Long | 必选 | 状态报告时间,1970年1月1日零时以来的毫秒数 |
sendTime | Long | 可选 | 用户提交时间,1970年1月1日零时以来的毫秒数 |
- (2)JSON响应示例 :
[
{
taskId:6df59d3c15914bbfbb6616baaeee8242,
mobile:13800138000,
xid:00,
resultCode:DELIVRD,
resultDesc:消息投递成功,
deliverTime:1532603273000,
sendTime:1532603273000
},
{
taskId:6df59d3c15914bbfbb6616baaeee8242,
mobile:13800138001,
xid:00,
resultCode:UNDELIV,
resultDesc:消息投递失败,
deliverTime:1532603273000,
sendTime:1532603273000
}
]
包头/包体 | 实例 | 备注 |
---|---|---|
Header | 请求成功: HTTP/1.1 200 OK Accept-Encoding:identity Content-Length:407 Host:IP:PORT Accept:application/json Content-Type:application/json;charset=utf-8 请求失败: HTTP/1.1 404 Accept-Encoding:identity Content-Length:22 Host:IP:PORT Accept:text/plain Content-Type:text/plain;charset=utf-8 |
蓝色字体为可变部分,保证路径正确,采用HTTP的POST方式发送; |
Body | 请求成功: [{ “taskId”: “6df59d3c15914bbfbb6616baaeee8242”, “mobile”: “13800138000”, “xid”: “00”, “resultCode”: “DELIVRD”, “resultDesc”: “消息投递成功”, “deliverTime”: “2016-04-28 13:04:18”, “sendTime”: “2016-04-28 13:04:12” },{ “taskId”: “6df59d3c15914bbfbb6616baaeee8242”, “mobile”: “13800138001”, “xid”: “00”, “resultCode”: “UNDELIV”, “desc”: “消息投递失败”, “deliverTime”: “2016-04-28 13:04:13”, “sendTime”: “2016-04-28 13:04:12” }] 请求失败:传入参数sign错误 |
蓝色字体为可变部分 |
四、上行短信推送方式
1. 请求
- (1)请求地址 :
需要第三方自行配置URL地址,接受http post请求,消息格式:json表达式。
该接口一次最多推送1000条上行消息。
- (2)请求包体 :
属性 | 类型 | 约束 | 说明 |
---|---|---|---|
msg | String | 必选 | 上行的短信内容 |
mobile | String | 必选 | 上行手机号码 |
extno | Long | 可选 | 扩展号,用户下发时携带的参数 |
sendTime | Long | 可选 | 用户提交时间,1970年1月1日零时以来的毫秒数 |
- (3)JSON请求示例 :
[
{
msg:T,
mobile:13800138000,
extno:,
sendTime:1532603273000
}
{
msg:T,
mobile:13800138001,
extno:,
sendTime:1532603273000
}
]
包头/包体 | 实例 | 备注 |
---|---|---|
Header | POST /xxx/xxx/xxx HTTP/1.1 Accept-Encoding:identity Content-Length:207 Host:IP:PORT Accept:application/json Content-Type:application/json;charset=utf-8 |
蓝色字体为可变部分, 保证路径正确,采用HTTP的POST方式发送; |
Body | { “msg”: “T”,”mobile”: “13800138000”,”extno”:””, “sendTime”: “1532603273000”}, {“msg”:”T,”mobile”:”13800138001“,”xid”:””,”sendTime”:1532603273000}] } |
蓝色字体为可变部分 |
2. 响应
- (1)响应包体 :
属性 | 类型 | 约束 | 说明 |
---|---|---|---|
code | String | 必选 | 返回错误码, 0:成功,其它失败 |
errmsg | String | 可选 | 返回错误详细描述 |
- (2)JSON响应示例 :
成功:
{
code:0
}//成功
失败:
{
code:-1,
errmsg:ip limit
}//ip非法
包头/包体 | 实例 | 备注 |
---|---|---|
Header | HTTP/1.1 200 OK Accept-Encoding:identity Content-Length:13 Host:IP:PORT Accept:application/json Content-Type:application/json;charset=utf-8 |
蓝色字体为可变部分 |
Body | { {“code”:” 0“} 或 {“code”:”-1“,”errmsg”:”ip limit“} |
蓝色字体为可变部分 |
五、上行短信-拉取方式
1. 请求
- (1)请求地址 :
http://ip:port/mo/{用户帐号}/get
注意:为了确保数据隐私和安全,用户需要通过HttpPost方式请求,消息格式:json表达式。
(2)Http标准包头字段 :
Accept:application/json;
Content-Type:application/json;charset=utf-8;
(3)请求包体 :
属性 | 类型 | 约束 | 说明 |
---|---|---|---|
appid | String | 必选 | 帐号,6位,平台分配的appid 如:100000 |
sign | String | 必选 | 签名,平台分配的appkey 用MD5加密, 如:81cefb4dbd7081baaaa92906514e708e |
- (4)JSON请求示例 :
{
appid:100000,
password:81cefb4dbd7081baaaa92906514e708e
}
包头/包体 | 实例 | 备注 |
---|---|---|
Header | POST /report/100000/get HTTP/1.1 Accept-Encoding:identity Content-Length:60 Host:IP:PORT Accept:application/json Content-Type:application/json;charset=utf-8 |
蓝色字体为可变部分, 保证路径正确,采用HTTP的POST方式发送; |
Body | { {“appid”:”100000“,”sign”:”81cefb4dbd7081baaaa92906514e708e“} } |
蓝色字体为可变部分 |
2. 响应
- (1)响应包体 :
属性 | 类型 | 约束 | 说明 |
---|---|---|---|
msg | String | 必选 | 上行短信内容 |
mobile | String | 必选 | 上行手机号码 |
extno | String | 可选 | 扩展号,用户下发时携带的参数 |
sendTime | String | 可选 | 用户提交时间,1970年1月1日零时以来的毫秒数 |
- (2)JSON响应示例 :
[{
msg: T,
mobile: 13800138000,
extno: ,
sendTime: 1532603273000
},
{
msg: T,
mobile: 13800138001,
extno: ,
sendTime: 1532603273000
}
]
包头/包体 | 实例 | 备注 |
---|---|---|
Header | 请求成功: HTTP/1.1 200 OK Accept-Encoding:identity Content-Length:407 Host:IP:PORT Accept:application/json Content-Type:application/json;charset=utf-8 请求失败: HTTP/1.1 404 Accept-Encoding:identity Content-Length:22 Host:IP:PORT Accept:text/plain Content-Type:text/plain;charset=utf-8 |
蓝色字体为可变部分 |
Body | 请求成功: [{“msg”:”T“}”,”mobile”:”13800138000“,”extno”:”00“,”sendTime”:”2016-04-28 13:04:12“}, {“msg”:”T“,”mobile”:”13800138001“,”extno”:”00“,”sendTime”:”2016-04-28 13:04:12“}] 请求失败 传入参数sign错误 |
蓝色字体为可变部分 |
六、查询余额
1. 请求
- (1)请求地址 : http://ip:port /sms/getBalance
注意:为了确保数据隐私和安全,用户需要通过Http Post方式请求,消息格式:json表达式。
(2)Http标准包头字段 :
Accept:application/json;
Content-Type:application/json;charset=utf-8;
(3)请求包体 :
属性 | 类型 | 约束 | 说明 |
---|---|---|---|
tradeNo | String | 必选 | 交易唯一流水号,请求方生成,最大60位 如:当前时间戳+六位随机数 注:该字段是本次交易的唯一标识 |
appid | String | 必选 | 帐号,6位 如:100000 |
sign | String | 必选 | 签名 ,把appkey的值md5加密 算法如下:sign=MD5(appkey) 如:3bc0cc96e65f4f202a562a05bce37532 |
- (4)JSON请求示例 :
{
tradeNo:20180428130412000001,
appid:100000,
sign:3bc0cc96e65f4f202a562a05bce37532
}
包头/包体 | 实例 | 备注 |
---|---|---|
Header | POST /sms/getBalance HTTP/1.1 Accept-Encoding:identity Content-Length:93 Host:IP:PORT Accept:application/json Content-Type:application/json;charset=utf-8 |
蓝色字体为可变部分, 保证路径正确,采用HTTP的POST方式发送; |
Body | { “tradeNo”: “20180428130412000001”, “appid”: “100000”, “sign”: “3bc0cc96e65f4f202a562a05bce37532” } |
蓝色字体为可变部分 |
2. 响应
- (1)响应包体 :
属性 | 类型 | 约束 | 说明 |
---|---|---|---|
tradeNo | String | 必选 | 交易唯一流水号,与请求消息tradeNo字段的值一致。 该字段唯一确认该响应消息是对哪个请求消息的回应。 备注:客户端异步提交的时候可以通过该字段配对到具体的请求消息。 |
result | String | 必选 | 请求响应返回码, 参考“请求响应返回码”定义的返回码 |
desc | String | 必选 | 请求响应返回中文描述, 参考“请求响应返回码”定义的中文描述 |
balance | Decimal(10,4) | 必选 | 账号余额 |
- (2)JSON响应示例 :
{
tradeNo:20180428130412000001,
result:P00000,
desc:查询成功,
balance:1234.567
}
包头/包体 | 实例 | 备注 |
---|---|---|
Header | HTTP/1.1 200 OK Accept-Encoding:identity Content-Length:133 Host:IP:PORT Accept:application/json Content-Type:application/json;charset=utf-8 |
蓝色字体为可变部分 |
Body | { “tradeNo”: “20180428130412000001”, “result”: “P00000”, “desc”: “查询成功”, “balance”: “1234.5670 } |
蓝色字体为可变部分 |
七、返回码定义
1. 请求返回码
返回码 | 描述 | 适用类型 |
---|---|---|
P00000 | 提交成功/查询成功 | 短信下行,查询余额 |
P00001 | 参数错误 | 短信下行,查询余额 |
P00002 | 非法用户 | 短信下行,查询余额 |
P00003 | 鉴权失败 | 短信下行,查询余额 |
P00004 | 余额不足 | 短信下行 |
P00005 | 查询余额失败 | 查询余额 |
P00009 | 系统异常 | 短信下行,查询余额 |