短信接口(http协议)
一、单条短信发送(黑名单等拦截错误实时返回)
请求头Content-Type:application/x-www-form-urlencoded
请求方式:POST 返回值:JSON
参数
参数名 |
参数介绍 |
示例 |
必填 |
sp_id |
产品sp_id |
666666 |
是 |
mobile |
手机号 |
176xxxxxxxxx(支持aes) |
是 |
content |
短信内容 |
【测试】验证码123(支持aes) |
是 |
signature |
签名(和密码二选一即可,点击查看签名算法) |
a92569901189f2574effc957c096c432e2d47635 |
否 |
password |
密码(和签名二选一即可),通过sp_id的密码进行md5处理 |
666666 |
否 |
ext |
扩展号 |
123 |
否 |
返回值
参数名 |
参数介绍 |
示例 |
code |
详情见错误表 |
0 |
msg |
成功-success 错误-其他提示 |
success |
msg_id |
消息id,用来获取状态报告时候匹配是哪条消息,成功返回 |
17 |
data |
失败有返回,详情见错误表 |
WL:NMLJ |
二、批量短信发送(黑名单等拦截错误实时返回,一次最多提交一万条)
请求头Content-Type:application/x-www-form-urlencoded
请求方式:POST 返回值:JSON
参数
参数名 |
参数介绍 |
示例 |
必填 |
sp_id |
产品sp_id |
666666 |
是 |
mobiles |
手机号 |
176xxxxxxxxx,171xxxxxxxxx |
是 |
content |
短信内容 |
【测试】验证码123 |
是 |
signature |
签名(和密码二选一即可) |
a92569901189f2574effc957c096c432e2d47635 |
否 |
password |
密码(和签名二选一即可),通过sp_id的密码进行md5处理 |
666666 |
否 |
ext |
扩展号 |
123 |
否 |
返回值
参数名 |
参数介绍 |
示例 |
code |
详情见错误表 |
0 |
msg |
成功-success 错误-其他提示 |
success |
msg_id |
消息id,用来获取状态报告时候匹配是哪条消息,批量发送的时候msg_id和该批次中的手机号形成唯一标志,成功返回 |
17 |
failed_data |
发送号码中失败的号码对应的错误码,全部成功则为空数组 |
{"176xxxxxxxxx":"WL:CWHM","171xxxxxxxxx":"WL:CWHM"} |
三、变量短信发送(黑名单等拦截错误实时返回,一次最多提交一万条)
请求头Content-Type:application/x-www-form-urlencoded
请求方式:POST 返回值:JSON
参数
参数名 |
参数介绍 |
示例 |
必填 |
sp_id |
产品sp_id |
666666 |
是 |
params |
变量参数,多条短信以英文;分割,多个变量之间以英文,分割,变量前带上手机号 |
176xxxxxxxxx,822233;175xxxxxxxxx,656552 |
是 |
content |
短信内容 |
【测试】验证码${Text} |
是 |
signature |
签名(和密码二选一即可) |
a92569901189f2574effc957c096c432e2d47635 |
否 |
password |
密码(和签名二选一即可),通过sp_id的密码进行md5处理 |
666666 |
否 |
ext |
扩展号 |
123 |
否 |
返回值
参数名 |
参数介绍 |
示例 |
code |
详情见错误表 |
0 |
msg |
成功-success 错误-其他提示 |
success |
msg_id |
消息id,用来获取状态报告时候匹配是哪条消息,批量发送的时候msg_id和该批次中的手机号形成唯一标志,成功返回 |
17 |
failed_data |
发送号码中失败的号码对应的错误码,全部成功则为空数组 |
{"176xxxxxxxxx":"WL:CWHM","171xxxxxxxxx":"WL:CWHM"} |
四、一对一批量发送(黑名单等拦截错误实时返回,一次最多提交500条)
请求头Content-Type:application/x-www-form-urlencoded
请求方式:POST 返回值:JSON
参数
参数名 |
参数介绍 |
示例 |
必填 |
sp_id |
产品sp_id |
666666 |
是 |
params |
一对一参数,json格式key是手机号,value是内容 |
{"17655555555":"测试111","17666666666":"测试222"} |
是 |
signature |
签名(和密码二选一即可) |
a92569901189f2574effc957c096c432e2d47635 |
否 |
password |
密码(和签名二选一即可),通过sp_id的密码进行md5处理 |
666666 |
否 |
ext |
扩展号 |
123 |
否 |
返回值
参数名 |
参数介绍 |
示例 |
code |
详情见错误表 |
0 |
msg |
成功-success 错误-其他提示 |
success |
msg_id |
消息id,用来获取状态报告时候匹配是哪条消息,批量发送的时候msg_id和该批次中的手机号形成唯一标志,成功返回 |
17 |
failed_data |
发送号码中失败的号码对应的错误码,全部成功则为空数组 |
{"176xxxxxxxxx":"WL:CWHM","171xxxxxxxxx":"WL:CWHM"} |
五、获取状态报告(每条短信状态仅可获取一次)
请求方式:GET 返回值:JSON
运营商返回某条短信状态后,此接口就能拉取到,之后调用此接口将不会返回此条短信的状态,所以调用者拉到数据后需要根据 手机号+msg_id 将状态存在本地
参数
参数名 |
参数介绍 |
示例 |
必填 |
sp_id |
产品sp_id |
666666 |
是 |
signature |
签名(和密码二选一即可) |
a92569901189f2574effc957c096c432e2d47635 |
否 |
password |
密码(和签名二选一即可),通过sp_id的密码进行md5处理 |
666666 |
否 |
返回值
参数名 |
参数介绍 |
示例 |
code |
详情见错误表 |
0 |
msg |
成功-success 错误-其他提示 |
success |
data |
扩展号,调用发送接口返回的msg_id,手机号,状态,时间,售价 字段以,分隔 多条记录以|分隔 |
123,2,1762532xxxx,DELIVRD,2021-12-23 01:02:03,0.2|123,2,17862532xxxx,DELIVRD,2021-12-23 01:02:03,0.1 |
六、推送状态报告(每条短信仅推送一次)
注意事项:推送使用的是POST方式,utf8原始字节流
推送格式:扩展号,调用发送接口返回的msg_id,手机号,状态,时间,售价 字段以,分隔 多条记录以|分隔
内容示范:123,2,1762532xxxx,DELIVRD,2021-12-23 01:02:03,0.2|123,2,17862532xxxx,DELIVRD,2021-12-23 01:02:03,0.1
七、获取用户上行回复(比如退订等,每条短信状态仅可获取一次)
请求方式:GET 返回值:JSON
手机回复上行后,此接口就能拉取到上行数据,每个上行数据只能拉取到一次,所以调用者拉到上行后,需要将上行的内容存在本地,然后自行根据 msg_id,手机号 等信息匹配具体哪条短信产生的上行回复
参数
参数名 |
参数介绍 |
示例 |
必填 |
sp_id |
产品sp_id |
666666 |
是 |
signature |
签名(和密码二选一即可) |
a92569901189f2574effc957c096c432e2d47635 |
否 |
password |
密码(和签名二选一即可),通过sp_id的密码进行md5处理 |
666666 |
否 |
返回值
参数名 |
参数介绍 |
示例 |
code |
详情见错误表 |
0 |
msg |
成功-success 错误-其他提示 |
success |
data |
urlencode后的内容,手机号,调用发送接口返回的msg_id,扩展号,时间 字段以,分隔多条记录以|分隔 |
TD,158114xxxx,100000006,048842426601,20220325123304|退订,1891456xxxx,100000007,0615,20211115173903 |
八、推送用户上行回复(每条上行回复仅推送一次)
注意事项:推送的是POST方式,utf8原始字节流
推送格式:urlencode后的内容,手机号,扩展号,时间 字段以,分隔多条记录以|分隔
内容示范:TD,158114xxxx,048842426601,20220325123304|退订,1891456xxxx,0615,20211115173903
九、获取余额
请求方式:GET 返回值:JSON
参数
参数名 |
参数介绍 |
示例 |
必填 |
sp_id |
产品sp_id |
666666 |
是 |
signature |
签名(和密码二选一即可) |
a92569901189f2574effc957c096c432e2d47635 |
否 |
password |
密码(和签名二选一即可),通过sp_id的密码进行md5处理 |
666666 |
否 |
返回值
参数名 |
参数介绍 |
示例 |
code |
详情见错误表 |
0 |
msg |
成功-success 错误-其他提示 |
success |
data |
余额 |
{"balance": "99999.89"} |
十、模板报备
请求头Content-Type:application/x-www-form-urlencoded
请求方式:POST 返回值:JSON
参数
参数名 |
参数介绍 |
示例 |
必填 |
sp_id |
产品sp_id |
666666 |
是 |
signature |
签名(和密码二选一即可) |
a92569901189f2574effc957c096c432e2d47635 |
否 |
password |
密码(和签名二选一即可),通过sp_id的密码进行md5处理 |
666666 |
否 |
template |
模板内容 |
【测试】您的验证码是%不要告诉他人 |
是 |
返回值
参数名 |
参数介绍 |
示例 |
code |
详情见错误表 |
0 |
msg |
成功-success 错误-其他提示 |
success |
data |
模板id |
{"temp_id":123456} |
十一、获取模板审核状态
请求方式:GET 返回值:JSON
参数
参数名 |
参数介绍 |
示例 |
必填 |
sp_id |
产品sp_id |
666666 |
是 |
signature |
签名(和密码二选一即可) |
a92569901189f2574effc957c096c432e2d47635 |
否 |
password |
密码(和签名二选一即可),通过sp_id的密码进行md5处理 |
666666 |
否 |
temp_id |
模板id |
123456 |
是 |
返回值
参数名 |
参数介绍 |
示例 |
code |
详情见错误表 |
0 |
msg |
成功-success 错误-其他提示 |
success |
data |
"0"待审核 "1"审核通过 "2"被驳回 |
{status: "1"}} |
十二、签名报备
请求头Content-Type:application/x-www-form-urlencoded
请求方式:POST 返回值:JSON
参数
参数名 |
参数介绍 |
示例 |
必填 |
sp_id |
产品sp_id |
666666 |
是 |
signature |
签名(和密码二选一即可) |
a92569901189f2574effc957c096c432e2d47635 |
否 |
password |
密码(和签名二选一即可),通过sp_id的密码进行md5处理 |
666666 |
否 |
sign |
签名内容 |
【测试签名2】 |
是 |
返回值
参数名 |
参数介绍 |
示例 |
code |
详情见错误表 |
0 |
msg |
成功-success 错误-其他提示 |
success |
data |
签名id |
{"sign_id": 285229} |
十一、获取签名审核状态
请求方式:GET 返回值:JSON
参数
参数名 |
参数介绍 |
示例 |
必填 |
sp_id |
产品sp_id |
666666 |
是 |
signature |
签名(和密码二选一即可) |
a92569901189f2574effc957c096c432e2d47635 |
否 |
password |
密码(和签名二选一即可),通过sp_id的密码进行md5处理 |
666666 |
否 |
sign_id |
签名id |
285229 |
是 |
返回值
参数名 |
参数介绍 |
示例 |
code |
详情见错误表 |
0 |
msg |
成功-success 错误-其他提示 |
success |
data |
是否通过审核 "0"待审核 "1"审核通过 "2"审核未通过 |
{status: "1"}} |
错误码(code)
错误码 |
说明 |
10000 |
服务出错,请稍后再试 |
10001 |
参数错误,请确认 |
10008 |
账号被锁定,请联系管理员确认 |
10011 |
余额不足,请尽快充值 |
10100 |
签名校验失败 |
10101 |
您的ip不在白名单内,请确认 |
10102 |
密码错误,请确认 |
10200 |
产品sp_id必须填写 |
10201 |
手机号必须填写 |
10202 |
短信内容必须填写 |
10203 |
发送时间格式必须为UNIX时间戳 |
10208 |
短信进拦截,具体原因参考data字段 |
10209 |
触发防刷,请调整配置 |
错误码(data)
错误码 |
说明 |
WL:MBLJ |
短信内容匹配到了模板,并且此模板类型是拦截 |
WL:MBSH |
命中审核模板 |
WL:NMLJ |
短信内容没有匹配到模板,并且用户的模板审核方式是未匹配到就进拦截 |
WL:NMSH |
短信内容没有匹配到模板,并且用户的模板审核方式是未匹配到就进审核 |
WL:KHLJ |
命中空号,进拦截 |
WL:QHLJ |
命中用户签名黑名单,进拦截 |
WL:SHLJ |
命中用户SPID黑名单,进拦截 |
WL:CHLJ |
命中系统产品黑名单,进拦截 |
WL:CWHM |
错误号码 |
WL:QWBB |
签名未报备,进拦截 |
WL:MQM |
需要签名但没有,进拦截 |
WL:CS |
超过限速了 |
WL:ZJLJ |
不匹配任何模板,直接拦截 |
WL:CMT |
产品未配置相应通道,进拦截 |
WL:CDQC |
通道不支持该地区发送,进拦截 |
WL:CGMT |
产品通道池中没有相应通道,进拦截 |
WL:CNH |
所选的通道不健康,进拦截 |
WL:TCLJ |
不在发送时间段,进拦截 |
WL:TCSH |
不在发送时间段,进审核 |
WL:CPL |
超频限制 |
第一步:准备QueryString
- 将所有参数(除了signature)按照key排序(顺序)
- 将排序好的参数key和值进行URLEncode,之后再增加三种字符替换:加号(+)替换成 %20、星号(*)替换成 %2A、%7E 替换回波浪号(~)
- 将格式化后的key和值按照key + "=" + 值进行拼接成字符串QueryString,多个参数间用&连接,例:”a=%E5%93%88%E5%93%88&b=haha”
- 在上一步得到的QueryString前拼接上请求方式,生成新的QueryString,HTTPMethod + "&" + URLEncode("/") + "&" + QueryString
第二步:准备signature
- 将上面得到的QueryString进行HmacSHA1算法进行编码,HMAC生成信息摘时需要用您的产品密码作为密钥。
- 之后将上面加编码后的字符串进行base64编码,得到签名signature
注意:本文档的所有接口都不支持 curl的100 continue协议,如果接口响应过慢就关闭此协议,在Curl中加入curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect:"))即可
- aes加密发送,需要同时分别加密手机号字段和内容字段
- 发送地址在原来的地址加上-aes,地址:http://124.220.173.171:9511/api/send-sms-single-aes
- 先向客服索要加密key,然后自行生成iv,用AES-128-CBC将手机号或者内容进行加密,并对加密的数据进行base64处理获得字符串s1
- 将生成的iv也进行base64处理生成字符串s2
- 将两个字符串进行json处理生成如下的json字符串s3:"{"iv":"s2","value":"s1"}"
- 将上述得到的s3进行base64处理,然后放入相应post数据字段中代替未加密的数据
- php代码如下
$cipher = 'AES-128-CBC';
$iv = random_bytes(openssl_cipher_iv_length($cipher));
$value = openssl_encrypt($value, $cipher, $key, 0, $iv);
if ($value === false) {
throw new RuntimeException('Could not encrypt the data.');
}
$iv = base64_encode($iv);
$json = json_encode(compact('iv', 'value'), JSON_UNESCAPED_SLASHES);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new RuntimeException('Could not encrypt the data.');
}
return base64_encode($json);
下载php demo
下载java demo
第三方短信接口请联系客服确认