(短信管理平台)接口说明书目录1.
1接口信息41.
2通用短信群发41.
3一对一短信群发61.
4状态报告推送91.
5短信状态拉取111.
6上行短信推送121.
7上行短信拉取131.
8请求示例141.
9php使用demo141.
10java使用demo151.
11c#使用demo171.
12Python使用demo221.
13关于线上短信被恶意刷的防范(接验证码必读)23版本号更改条款及内容更改日期V1.
0初始编制2016-03-30V1.
0完善响应状态码2016-04-26V1.
1添加常用语言demo2016-06-28V1.
2调整状态推送方式和添加上行短信推送2016-07-29V1.
3添加Python语demo及部分代码修正修改添加响应状态码及合批2016-12-06V1.
4增加状态、上行拉取2018-07-05V1.
4更新接口返回状态代码2018-08-09V1.
5更新114、124提交状态返回码2019-08-23短信发送接口信息键值POSTURLhttp://www.
qybor.
com:8500/shortMessage短信测试内容:【企业宝】您的验证码是[var],1分钟内有效,此短信为测试短信,请忽略.
通用短信群发通用短信群发接口是指多号码,内容相同的短信的发送(参数值以UTF-8格式请求).
包括普通短信、长短信.
接口参数如下:请求参数字段类型说明usernamestring必填参数,用户账号passwdstring必填参数,用户密码phonestring必填参数,合法的手机号码,号码间用英文逗号分隔msgstring必填参数,短信内容(包含签名)needstatusstring必填参数.
是否需要状态报告,取值true或falseportstring可选参数,扩展码,用户定义扩展码(不能超过三位)sendtimestring可选参数,发送时间(格式1900-01-0100:00:00)即时发送:参数不传或此时间小于等于平台服务器时间定时发送:需填写此参数并且大于平台服务器时间mergeridstring可选参数,合批ID(用途:将短时间内提交的内容相同的短信合批显示,精简发送记录显示列表.
适应范围:使用企业宝客户平台查看发送记录并且觉得发送记录太多的营销客户,不使用企业宝客户平台查看发送记录的客户直接忽略此参数.
生成规则:月日时分秒+三位毫秒+随机数(随机数范围1~999999999),整串ID最长不能超过22位)例:0819140230485123或0819140230485123456789其中0819140230对应08月19日14时02分30秒,485对应毫秒,剩下部分为随机数;随机数不一定要9位但需要保证mergerid不重复,如果不同内容使用同一个mergerid那么这两批短信将会合到同一批,造成数据显示混乱.
响应参数{"batchno":"1512251310258489512","respcode":"0","respdesc":"短信提交成功","logid":"2180809165007735048005"}注释:batchno-->短信提交成功后返回的批次号respcode-->短信提交响应状态码respdesc-->短信提交响应状态码说明响应状态码代码说明0提交成功100缺少必填参数101用户名错误102密码错误103手机号码超限(非审核短信单批小于5000,审核短信单批小于50000)104内容长度超限(单条内容最多支持536)105余额不足107IP地址校验错误(提交短信IP地址与绑定IP地址不一致)109签名错误110关键字错误113合批ID长度超过限制或含有非数字114扩展码错误(非数字或超过指定位数)115发送时间格式错误116无效的手机号117账号被禁用118没有检测到有效条数119无效的一对一JSON格式120获取CRM客户信息错误121内容包含乱码字符122签名未报备123系统错误124超过短信账号的每日额度限制200系统其他错误300编码格式错误,请使用UTF-8编码!
注:若响应状态码为120、200请联系技术支持;一对一短信群发一对一短信群发接口是指将不同的短信内容发送到不同的接收号码(参数值以UTF-8格式请求).
包括普通短信、长短信,仅针对营销客户提供使用,每次提交一对一短信条数不能超过5000条并且需要使用POST方法提交.
接口参数如下:请求参数字段类型说明usernamestring必填参数,用户账号passwdstring必填参数,用户密码phonestring必填参数,采用json封装(参考:phone字段json格式说明)msgstring必填参数,包含变量的短信内容(参考:msg字段格式说明)needstatusstring必填参数.
是否需要状态报告,取值true或falseportstring可选参数,扩展码,用户定义扩展码(不能超过三位)sendtimestring可选参数,发送时间(格式1900-01-0100:00:00)即时发送:参数不传或此时间小于等于平台服务器时间定时发送:需填写此参数并且大于平台服务器时间mergeridstring可选参数,合批ID(用途:将短时间内提交的内容相同的短信合批显示,精简发送记录显示列表.
适应范围:使用企业宝客户平台查看发送记录并且觉得发送记录太多的营销客户,不使用企业宝客户平台查看发送记录的客户直接忽略此参数.
生成规则:月日时分秒+三位毫秒+随机数(随机数范围1~999999999),整串ID最长不能超过22位)例:0819140230485123或0819140230485123456789其中0819140230对应08月19日14时02分30秒,485对应毫秒,剩下部分为随机数;随机数不一定要9位但需要保证mergerid不重复,如果不同内容使用同一个mergerid那么这两批短信将会合到同一批,造成数据显示混乱.
msg字段格式说明:msg:"尊敬的[A]您好!
您的手机号码是[B].
.
.
地址:[N].
【短信科技】"注:"[A]"、"[B]"、"[N]"代表变量phone字段json格式说明:{"params":[{"mobile":"13556001000","[A]":"张三","[B]":"13556001000",.
.
.
,(可继续增加多个变量)"[N]":"xxx"},.
.
.
,(此处每一个子json表示一条短信,可继续增加多条短信){"mobile":"13556001001","[A]":"李四","[B]":"13556001001",.
.
.
,(可继续增加多个变量)"[N]":"xxx"}]}json结构说明:params:固定key,必填mobile:接收短信的手机号码,必填;如果在短信内容msg需要用到接收短信的目标号码,不能直接使用mobile变量,为防止产生冲突要为它新增一个变量;如上面msg字段中使用的变量[B]为目标号码,则在phone字段的子json中应该添加变量"[B]":"13556001001"phone字段中的每一个子json代表一条短信,包含目标号码和参数{"mobile":"13556001001","[A]":"李四","[B]":"13556001001",.
.
.
,(可继续增加多个变量)"[N]":"xxx"}msg字段中"[A]"变量值为phone字段子json中"[A]"的值msg字段中"[B]"变量值为phone字段子json中"[B]"的值msg字段中"[N]"变量值为phone字段子json中"[N]"的值示例msg:"尊敬的[A]您好!
您的手机号码是[C].
现在时间是[B].
【短信科技】"phone:{"params":[{"mobile":"13556001000","[A]":"张三","[B]":"2000-06-0711:23:12","[C]":"13556001000"},{"mobile":"13556001001","[A]":"李四","[B]":"2000-06-0911:15:07","[C]":"13556001001"}]}按照上述msg字段和phone字段的内容提交将会发送两条短信:短信1:尊敬的张三您好!
您的手机号码是13556001000.
现在时间是2000-06-0711:23:12.
【短信科技】短信2:尊敬的李四您好!
您的手机号码是13556001001.
现在时间是2000-06-0911:15:07.
【短信科技】响应参数{"batchno":"1512251310258489512","respcode":"0","respdesc":"短信递交成功","logid":"2180809165016710048123"}响应状态码注:请参考1.
2中状态码说明状态报告推送群发接口状态报告推送,要求接口使用方提供一个有效的URL地址,由后台管理人员配置对应的账号信息,方能使用.
状态报告推送使用HTTPPOST方式推送(推送方式为键值推送,键为report,值为json内容),状态报告响应由batchno与phone确定唯一性,提供接口使用方唯一性索引的作用.
成功推送以接口使用方返回{"result":0}来判定状态报告JSON响应内容{"reports":[{"batchno":"1512251310258489512","phone":"13412345678","status":"DELIVRD","accesscode":"1532684","recvtime":"2016-04-1212:25:24"},{"batchno":"1512251310258489512","phone":"13412345678","status":"DELIVRD","accesscode":"1532684","recvtime":"2016-04-1212:25:24"}]}batchno-->短信提交时返回的批次号phone-->接收短信的手机号码status-->短信状态报告(DELIVRD代表发送成功)accesscode-->接入号(此参数由短信账号扩展码和客户自定义扩展码组成,此参数一般不用处理)recvtime-->状态报告返回时间短信状态拉取群发接口状态报告拉取,要求接口使用方提出需求,由后台管理人员配置对应的账号信息,方能使用.
拉取方式支持POST/GET方式(请求参数为如下).
状态报告响应由batchno与phone确定唯一性,提供接口使用方唯一性索引的作用.
接口使用方拉取请求间隔不能小于10ms,拉取报告的时效为6小时内,每次拉取最大1000,单线程拉取,否则拉取不成功.
请求的URL地址:http://www.
qybor.
com:5555/smsreport请求参数参数字段参数类型参数说明usernamestring账号名passwdstring账号密码:(密码+datatime)进行32位MD5加密datetimestring当前时间:格式为2018-05-2812:00:00numstring获取状态报告最大的数量(不超过系统设置的最大值)响应结果{"respcode":0,"respdesc":"校验成功","reports":[{"batchno":"1512251310258489512","phone":"13412345678","status":"DELIVRD","accesscode":"1532684","recvtime":"2016-04-1212:25:24"}]}上行短信推送群发接口上行推送,要求接口使用方提供一个有效的URL地址,由后台管理人员配置对应的账号信息,方能使用.
上行短信推送使用HTTPPOST方式推送(推送方式为键值推送,键为uplink,值为json内容),上行短信由port与phone确定唯一性,提供接口使用方唯一性索引的作用.
成功推送以接口使用方返回{"result":0}来判定.
json内容如下:{"uplinks":[{"port":"123","phone":"13412345678","accesscode":"1532684","recvtime":"2016-04-1212:25:24","msg":"T"},{"port":"123","phone":"13412345678","accesscode":"1532684","recvtime":"2016-06-1215:25:24","msg":"T"}]}上行短信拉取群发接口上行短信拉取,要求接口使用方提出需求,由后台管理人员配置对应的账号信息,方能使用.
拉取方式支持POST/GET方式(请求参数为如下).
上行短信由port与phone确定唯一性,提供接口使用方唯一性索引的作用.
接口使用方拉取请求间隔不能小于10ms,拉取的时效为6小时内,每次拉取最大1000,单线程拉取,否则拉取不成功.
请求的URL地址:http://www.
qybor.
com:5555/smsuplink请求参数参数字段参数类型参数说明usernamestring账号名passwdstring账号密码{32位MD5(账号密码+datatime)}datetimestring当前、时间:格式为2018-05-2812:00:00numstring获取状态报告最大的数量(不超过系统设置的最大值)响应结果{"respcode":0,"respdesc":"校验成功","uplinks":[{"port":"123","phone":"13412345678","accesscode":"1532684","recvtime":"2016-04-1212:25:24","msg":"T"}]}上行和状态拉取响应状态码代码说明0成功200系统错误201参数解析错误202参数不完整203账号认证错误204账号请求过于频繁205账号被禁用206IP地址认证错误207时间格式错误208账号状态处理方式不为拉取209获取状态报告错误210无状态报告211账号上行处理方式不为拉取212获取上行短信错误213无上行短信请求示例非一对一短信请求示例:http://www.
qybor.
com:8500/shortMessageusername=用户名&passwd=密码&phone=号码1,号码2,号码3&msg=短信内容【短信签名】&needstatus=true&port=&sendtime=一对一短信请求示例:http://www.
qybor.
com:8500/shortMessageusername=用户名&passwd=密码&phone={"params":[{"mobile":"13556001000","[A]":"张三","[B]":"2000-01-0110:10:10","[C]":"13556001000"},{"mobile":"13556001001","[A]":"李四","[B]":"2000-01-0112:12:12","[C]":"13556001001"}]}&msg=尊敬的[A]您好!
您的手机号码是[C].
现在时间是[B].
【短信科技】&needstatus=true&port=&sendtime=php使用demousername.
"&passwd=".
$this->passwd.
"&phone=".
$phone.
"&msg=".
urlencode($msg).
"&needstatus=true&port=".
$port.
"&sendtime=".
$sendtime;/**php5.
4或php6curl版本的curl数据格式为数组你们接入时要注意$post_data=array("username"="账号","passwd"="密码","phone"="手机号码1,号码2,号码3".
"msg"="您好,你的验证码:8888【企业宝】","needstatus"="true","port"='',"sendtime"='');**/curl_setopt($ch,CURLOPT_URL,"http://www.
qybor.
com:8500/shortMessage");curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_POST,1);curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);$file_contents=curl_exec($ch);curl_close($ch);returnjson_decode($file_contents);}}//使用例子$sendObj=newqybsms();$resultObj=$sendObj->sendMessage('1','你好,你的验证码:454546【企业宝】');//print_r($resultObj);if($resultObj->respcode==0){echo"发送成功";}else{echo"发送失败,失败原因:".
$resultObj->respdesc;}>Php文件java使用demoimportjava.
io.
UnsupportedEncodingException;importorg.
apache.
commons.
httpclient.
Header;importorg.
apache.
commons.
httpclient.
HttpClient;importorg.
apache.
commons.
httpclient.
NameValuePair;importorg.
apache.
commons.
httpclient.
methods.
PostMethod;importcom.
alibaba.
fastjson.
JSON;publicclassQybSms{privateStringusername这里设置帐号privateStringpasswd这里设置密码publicstaticvoidmain(String[]args){QybSmsqs=newQybSms();try{qs.
send("13760691541","验证码:54546【企业宝】");}catch(Exceptione){e.
printStackTrace();}}PublicvoidsendMsg(Stringphone,Stringmsg,Stringneedstatus,Stringport,Stringsendtime)throwsException{HttpClientclient=newHttpClient();PostMethodpost=newPostMethod("http://www.
qybor.
com:8500/shortMessage");post.
addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");//在头文件中设置转码NameValuePair[]data={newNameValuePair("username",this.
username),newNameValuePair("passwd",this.
passwd),newNameValuePair("phone",phone),newNameValuePair("msg",msg),newNameValuePair("needstatus",needstatus),newNameValuePair("port",port),NewNameValuePair("sendtime",sendtime)};post.
setRequestBody(data);client.
executeMethod(post);Header[]headers=post.
getResponseHeaders();intstatusCode=post.
getStatusCode();Stringresult=newString(post.
getResponseBodyAsString().
getBytes());System.
out.
println(result);//打印返回消息状态post.
releaseConnection();ResultObjgroup2=JSON.
parseObject(result,ResultObj.
class);//这里就是返回结果,你们跟进一步处理System.
out.
println(group2.
getBatchno());System.
out.
println(group2.
getRespcode());System.
out.
println(group2.
getRespdesc());}/***简单短信发送*@paramphone手机号码,多个*@parammsg短信内容*@throwsException*/Publicvoidsend(Stringphone,Stringmsg)throwsException{this.
sendMsg(phone,msg,"true"}}/***发送结果bean*/ClassResultObj{privateStringbatchno;privateStringrespcode;privateStringrespdesc;publicStringgetBatchno(){returnbatchno;}publicvoidsetBatchno(Stringbatchno){this.
batchno=batchno;}publicStringgetRespcode(){returnrespcode;}publicvoidsetRespcode(Stringrespcode){this.
respcode=respcode;}publicStringgetRespdesc(){returnrespdesc;}publicvoidsetRespdesc(Stringrespdesc){this.
respdesc=respdesc;}}Jar包下载c#使用demousingSystem;usingSystem.
Collections.
Generic;usingSystem.
ComponentModel;usingSystem.
Data;usingSystem.
Drawing;usingSystem.
IO;usingSystem.
Linq;usingSystem.
Net;usingSystem.
Text;usingSystem.
Threading.
Tasks;usingSystem.
Windows.
Forms;usingSystem.
Text.
RegularExpressions;namespaceqybdemo{PublicpartialclassForm1:Form{publicForm1(){InitializeComponent();}Privatevoidbutton1_Click(objectsender,EventArgse){qybsmsqyb=newqybsms();Stringstr=qyb.
send("13760691541","你好,你的验证码为:0000【企业宝】");//简单用字符串,尽量用json解释Regexreg=newRegex("\\d{15,23}");Regexreg1=newRegex(@"""\d{1,4}""");Regexreg2=newRegex(@"respdesc"Console.
WriteLine(str);//返回消息idConsole.
WriteLine(reg.
Match(str));//返回状态码Console.
WriteLine(reg1.
Match(str).
Value.
Replace(0成功,其它失败.
//返回描述Console.
WriteLine(reg2.
Match(str).
Value.
Replace("respdesc\}}Classqybsms{Stringusername="j";//配置短信帐号Stringpasswd="1";//配置短信密码/***发送短信*phone为手机号码,多个号码以","号隔开*msg为短信内容,须加上签名,例如"【微软科技】",短信内容为utf-8编码,有特殊符号请urlencode内容*needstatus是否需要推送短信值为true或false;*port端口,默认为空*sendtime发送时间,为空即马上发送,格式例如:"2016-12-1212:12:12"这样的标准格式**/PublicStringsendMsg(Stringphone,Stringmsg,Stringneedstatus,Stringport,Stringsendtime){Stringurl="http://www.
qybor.
com:8500/shortMessageusername="+this.
username+"&passwd="+this.
passwd+"&phone="+phone+"&msg="+msg+"&needstatus="+needstatus+"&port="+port+"&sendtime="+sendtime;StringstrRet="";Stringtargeturl=url.
Trim().
ToString();try{HttpWebRequesthr=(HttpWebRequest)WebRequest.
Create(targeturl);hr.
UserAgent="Mozilla/4.
0(compatible;MSIE6.
0;WindowsNT5.
1)";hr.
Method="GET";hr.
Timeout=30*60*1000;WebResponsehs=hr.
GetResponse();Streamsr=hs.
GetResponseStream();StreamReaderser=newStreamReader(sr,Encoding.
UTF8);strRet=ser.
ReadToEnd();}catch(Exceptionex){strRet="";}returnstrRet;}/***短信发送*phone号码*msg内容**/publicStringsend(Stringphone,Stringmsg){returnthis.
sendMsg(phone,msg,"true"}}}文件:Python使用demoGET提交#!
/usr/bin/python#-*-coding:utf-8-*-#本例属于GET提交,python3应用环境#username用户名#passwd密码#phone手机号#needstatusneedstatus必填#msg短信内容#sendtimeUNIX时间戳,不写为立刻发送#1、GBK编码提交的#首先urlencode短信内容(msg),然后在API请求时,带入encode=gbk##2、UTF-8编码的##将msg做urlencode编码后,带入encode=utf8或utf-8#http://www.
qybor.
com:8500/shortMessageusername=用户名&passwd=密码&phone=号码1,号码2,号码3&msg=短信内容【短信签名】&needstatus=true&port=&sendtime=##示例##ReturnCode#Description#success:msgid#提交成功,发送状态请见状态响应码#error:msgid提交失败#error:Missingusername用户名为空#error:Missingpasswd密码为空#error:Missingneedstatusneedstatus为true#error:Missingrecipient手机号码为空#error:Missingmessagemsg短信内容为空#error:Accountisblocked帐号被禁用#error:Unrecognizedencoding编码未能识别#error:needstatusorpasswderrorneedstatus或密码错误#error:UnauthorizedIPaddress未授权IP地址#error:Accountbalanceisinsufficient余额不足#error:Blackkeywordsis:党中央敏感字importurllib.
parseimporturllib.
requesturl='http://www.
qybor.
com:8500/shortMessage'#如连接超时,可能是您服务器不支持域名解析,请将下面连接中的:【www.
qybor.
com】修改为IP:【183.
36.
116.
118】user_agent='Mozilla/4.
0(compatible;MSIE5.
5;WindowsNT)'encode='UTF-8'#页面编码和短信内容编码为GBK.
重要说明:如提交短信后收到乱码,请将GBK改为UTF-8测试.
如本程序页面为编码格式为:ASCII/GB2312/GBK则该处为GBK.
如本页面编码为UTF-8或需要支持繁体,阿拉伯文等Unicode,请将此处写为:UTF-8username='账号'用户名passwd='密码'密码needstatus='true'phone='手机号'#手机号,只发一个号码:13800000001.
发多个号码:13800000001,13800000002,.
.
.
N.
使用半角逗号分隔.
msg='您好,您的验证码是:12345【企业宝】'#要发送的短信内容,特别注意:签名必须设置,网页验证码应用需要加添加【图形验证】.
values={'username':username,'passwd':passwd,'needstatus':needstatus,'phone':phone,'msg':msg,'encode':encode}headers={'User-Agent':user_agent}data=urllib.
parse.
urlencode(values)req=urllib.
request.
Request(url+''+data)response=urllib.
request.
urlopen(req)the_page=response.
read()print(the_page)POST提交#!
/usr/bin/python#-*-coding:utf-8-*-#本例属于POST提交,python3应用环境importurllib.
requestimporturllib.
parseurl='http://www.
qybor.
com:8500/shortMessage'#准备一下头headers={'User-Agent':'Mozilla/4.
0(compatible;MSIE5.
5;WindowsNT)'}#还有我们准备用Post传的值,这里值用字典的形式username='账号'passwd='密码'needstatus='true'phone='手机号'msg='您好,您的验证码是:12345【企业宝】'values={'username':username,'passwd':passwd,'needstatus':needstatus,'phone':phone,'msg':msg,}#转编码utf8data=urllib.
parse.
urlencode(values).
encode('utf-8')#提交需要内容参数request=urllib.
request.
Request(url,data,headers)response=urllib.
request.
urlopen(request).
read().
decode('utf-8')print(response)注:python文件格式编码也需要设置为utf-8关于线上短信被恶意刷的防范(接验证码必读)被恶意刷短信原理如上图所示,用户可以直接输入手机号码,点击获取验证码就可以直接促发验证短信发送,正因为这样,问题就来了,由于没有限制,就可以不停地输入号码,然后点击获取验证码,短信就会不停发给输入的手机号码!
数脉科技六月优惠促销发布了!数脉科技对香港自营机房的香港服务器进行超低价促销,可选择30M、50M、100Mbps的优质bgp网络。更大带宽可在选购时选择同样享受优惠,目前仅提供HKBGP、阿里云产品,香港CN2、产品优惠码续费有效,仅限新购,每个客户可使用于一个订单。新客户可以立减400元,或者选择对应的机器用相应的优惠码,有需要的朋友可以尝试一下。点击进入:数脉科技官方网站地址数脉科技是一家成...
全球领先的IDC服务商华纳云“美国服务器”正式发售啦~~~~此次上线的美国服务器包含美国云服务器、美国服务器、美国高防服务器以及美国高防云服务器。针对此次美国服务器新品上线,华纳云也推出了史无前例的超低活动力度。美国云服务器低至3折,1核1G5M低至24元/月,20G DDos防御的美国服务器低至688元/月,年付再送2个月,两年送4个月,三年送6个月,且永久续费同价,更多款高性价比配置供您选择。...
racknerd当前对美国犹他州数据中心的大硬盘服务器(存储服务器)进行低价促销,价格跌破眼镜啊。提供AMD和Intel两个选择,默认32G内存,120G SSD系统盘,12个16T HDD做数据盘,接入1Gbps带宽,每个月默认给100T流量,5个IPv4... 官方网站:https://www.racknerd.com 加密数字货币、信用卡、PayPal、支付宝、银联(卡),可以付款! ...