您的位置首页百科问答

创蓝短信验证码接口相关内容

创蓝短信验证码接口相关内容

的有关信息介绍如下:

创蓝短信验证码接口相关内容

短信验证码在各类App和网站中广泛使用,这里介绍一些技术对接中常用的接口以及相关实例为各位提供参考。

首先,预先提供短信模板,保证通道提供稳定服务,平台进行内容审核,而后方能使用通用发送接口发短信,该接口能够自动匹配已经审核通过的模板进行发送。调用模板发送接口时需要用POST或GET方式提交各类参数,如:tpl_id、tpl_value。在创蓝技术平台开发的接口包括:ASP,ASP.NET(C#),C(C++),GO,JAVA,PHP,PYTHON等,不同的接口语音中,在任意应用场景中,各类模板的使用方法基本类似,设置对应的模板id(tpl_id)和相关的变量值(tpl_value)即可。

以下专门挑出两大常见短信验证码接口语言进行实例说明:

一、JAVA语言文档

a)短信接口

packagecom.bcloud.msg.http;

importjava.io.ByteArrayOutputStream;

importjava.io.InputStream;

importjava.net.URLDecoder;

importorg.apache.commons.httpclient.HttpClient;

importorg.apache.commons.httpclient.HttpStatus;

importorg.apache.commons.httpclient.NameValuePair;

importorg.apache.commons.httpclient.URI;

importorg.apache.commons.httpclient.methods.GetMethod;

/**

*@authorBeyond

*/

publicclassHttpSender{

/**

*

*@paramurl应用地址,类似于http://ip:port/msg/

*@paramaccount账号

*@parampswd密码

*@parammobile手机号码,多个号码使用","分割

*@parammsg短信内容

*@paramneedstatus是否需要状态报告,需要true,不需要false

*@return返回值定义参见HTTP协议文档

*@throwsException

*/

publicstaticStringsend(Stringurl,Stringaccount,Stringpswd,Stringmobile,Stringmsg,

booleanneedstatus,Stringproduct,Stringextno)throwsException{

HttpClientclient=newHttpClient();

GetMethodmethod=newGetMethod();

try{

URIbase=newURI(url,false);

method.setURI(newURI(base,"HttpSendSM",false));

method.setQueryString(newNameValuePair[]{

newNameValuePair("account",account),

newNameValuePair("pswd",pswd),

newNameValuePair("mobile",mobile),

newNameValuePair("needstatus",String.valueOf(needstatus)),

newNameValuePair("msg",msg),

newNameValuePair("product",product),

newNameValuePair("extno",extno),

});

intresult=client.executeMethod(method);

if(result==HttpStatus.SC_OK){

InputStreamin=method.getResponseBodyAsStream();

ByteArrayOutputStreambaos=newByteArrayOutputStream();

byte[]buffer=newbyte;

intlen=0;

while((len=in.read(buffer))!=-1){

baos.write(buffer,0,len);

}

returnURLDecoder.decode(baos.toString(),"UTF-8");

}else{

thrownewException("HTTPERRORStatus:"+method.getStatusCode()+":"+method.getStatusText());

}

}finally{

method.releaseConnection();

}

}

/**

*

*@paramurl应用地址,类似于http://ip:port/msg/

*@paramaccount账号

*@parampswd密码

*@parammobile手机号码,多个号码使用","分割

*@parammsg短信内容

*@paramneedstatus是否需要状态报告,需要true,不需要false

*@return返回值定义参见HTTP协议文档

*@throwsException

*/

publicstaticStringbatchSend(Stringurl,Stringaccount,Stringpswd,Stringmobile,Stringmsg,

booleanneedstatus,Stringproduct,Stringextno)throwsException{

HttpClientclient=newHttpClient();

GetMethodmethod=newGetMethod();

try{

URIbase=newURI(url,false);

method.setURI(newURI(base,"HttpBatchSendSM",false));

method.setQueryString(newNameValuePair[]{

newNameValuePair("account",account),

newNameValuePair("pswd",pswd),

newNameValuePair("mobile",mobile),

newNameValuePair("needstatus",String.valueOf(needstatus)),

newNameValuePair("msg",msg),

newNameValuePair("product",product),

newNameValuePair("extno",extno),

});

intresult=client.executeMethod(method);

if(result==HttpStatus.SC_OK){

InputStreamin=method.getResponseBodyAsStream();

ByteArrayOutputStreambaos=newByteArrayOutputStream();

byte[]buffer=newbyte;

intlen=0;

while((len=in.read(buffer))!=-1){

baos.write(buffer,0,len);

}

returnURLDecoder.decode(baos.toString(),"UTF-8");

}else{

thrownewException("HTTPERRORStatus:"+method.getStatusCode()+":"+method.getStatusText());

}

}finally{

method.releaseConnection();

}

}

}

b)后台示例

importcom.bcloud.msg.http.HttpSender;

publicclassHttpSenderTest{

publicstaticvoidmain(String[]args){

Stringurl="http://222.73.117.158/msg/";//应用地址

Stringaccount="询问对接人";//账号

Stringpswd="询问对接人";//密码

Stringmobile="13800210021,13800138000";//手机号码,多个号码使用","分割

Stringmsg="亲爱的用户,您的验证码是123456,5分钟内有效。";//短信内容

booleanneedstatus=true;//是否需要状态报告,需要true,不需要false

Stringproduct=null;//产品ID

Stringextno=null;//扩展码

try{

StringreturnString=HttpSender.batchSend(url,account,pswd,mobile,msg,needstatus,product,extno);

System.out.println(returnString);

//TODO处理返回值,参见HTTP协议文档

}catch(Exceptione){

//TODO处理异常

e.printStackTrace();

}

}

}

二、PHP语言文档

a)账户配置信息

/**

*配置文件

*版本:1.2

*日期:2014-07-16

*说明:

*以下代码只是为了方便客户测试而提供的样例代码,客户可以根据自己网站的需要自行编写,并非一定要使用该代码。

*该代码仅供学习和研究接口使用,只是提供一个参考。

*/

//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

//创蓝发送短信接口URL,如无必要,该参数可不用修改

$chuanglan_config['api_send_url']='http://222.73.117.158/msg/HttpBatchSendSM';

//创蓝短信余额查询接口URL,如无必要,该参数可不用修改

$chuanglan_config['api_balance_query_url']='http://222.73.117.158/msg/QueryBalance';

//创蓝账号替换成你自己的账号

$chuanglan_config['api_account'] ='jiekou-clcs-07';

//创蓝密码替换成你自己的密码

$chuanglan_config['api_password'] ='Clwh2009';

//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

?>

b)短信接口

/**

*类名:ChuanglanSmsApi

*功能:创蓝接口请求类

*详细:构造创蓝短信接口请求,获取远程HTTP数据

*版本:1.3

*日期:2014-07-16

*说明:

*以下代码只是为了方便客户测试而提供的样例代码,客户可以根据自己网站的需要,按照技术文档自行编写,并非一定要使用该代码。

*该代码仅供学习和研究创蓝接口使用,只是提供一个参考。

*/

require_once("chuanglan_config.php");

classChuanglanSmsApi{

/**

*发送短信

*

*@paramstring$mobile手机号码

*@paramstring$msg短信内容

*@paramstring$needstatus是否需要状态报告

*@paramstring$product产品id,可选

*@paramstring$extno扩展码,可选

*/

publicfunctionsendSMS($mobile,$msg,$needstatus='false',$product='',$extno=''){

global$chuanglan_config;

//创蓝接口参数

$postArr=array(

'account'=>$chuanglan_config['api_account'],

'pswd'=>$chuanglan_config['api_password'],

'msg'=>$msg,

'mobile'=>$mobile,

'needstatus'=>$needstatus,

'product'=>$product,

'extno'=>$extno

);

$result=$this->curlPost($chuanglan_config['api_send_url'],$postArr);

return$result;

}

/**

*查询额度

*

*查询地址

*/

publicfunctionqueryBalance(){

global$chuanglan_config;

//查询参数

$postArr=array(

'account'=>$chuanglan_config['api_account'],

'pswd'=>$chuanglan_config['api_password'],

);

$result=$this->curlPost($chuanglan_config['api_balance_query_url'],$postArr);

return$result;

}

/**

*处理返回值

*

*/

publicfunctionexecResult($result){

$result=preg_split("/[,\r\n]/",$result);

return$result;

}

/**

*通过CURL发送HTTP请求

*@paramstring$url//请求URL

*@paramarray$postFields//请求参数

*@returnmixed

*/

privatefunctioncurlPost($url,$postFields){

$postFields=http_build_query($postFields);

$ch=curl_init();

curl_setopt($ch,CURLOPT_POST,1);

curl_setopt($ch,CURLOPT_HEADER,0);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields);

$result=curl_exec($ch);

curl_close($ch);

return$result;

}

//魔术获取

publicfunction__get($name){

return$this->$name;

}

//魔术设置

publicfunction__set($name,$value){

$this->$name=$value;

}

}

?>

c)平台示例

/**

*功能:创蓝发送信息DEMO

*版本:1.3

*日期:2014-07-16

*说明:

*以下代码只是为了方便客户测试而提供的样例代码,客户可以根据自己网站的需要,按照技术文档自行编写,并非一定要使用该代码。

*该代码仅供学习和研究创蓝接口使用,只是提供一个参考。

*/

require_once'ChuanglanSmsHelper/ChuanglanSmsApi.php';

$clapi=newChuanglanSmsApi();

$result=$clapi->sendSMS('18516590414','您好,您的验证码是888888','true');

$result=$clapi->execResult($result);

if($result==0){

echo'发送成功';

}else{

echo"发送失败{$result}";

}

var_dump($result);

任何短信接口都是基于其相应语言开发的协议,所有用同种语言开发的程序都可以调用这个接口发送短信,通过其短信接口传递参数至创蓝短信的服务器,最终完成下发。其实短信接口测试之前,各位专业人士都明白,影响短信验证码速度和到达率的因素包含三个方面:

第一,机房的网络构架。IDG机房的质量参差不齐,从创蓝以往选择机房的经验来说,上海最好机房是目前我们所在的南汇机房。验证码是个持续不断的长期技术活,服务器的运转1分钟都不能断,如若服务商采用五星机房,配合BGP网络,自动识别用户提交短信的网络,再将移动号码分包到移动机房,再提交到移动网关,电信号码分包到电信机房,再提交到电信网关,这就解决了短信timeout的问题,保证验证码的到达率。同时,在多个重点城市进行中心机房布点,备份两条以上的链路,集群模式服务,防止任何时间的中断,保证验证码在任何一分钟都不会因为网络而出现延迟或者收不到。

第二,平台的发送机制的问题。若大家都是做App项目的,关于如何解决大批量延迟问题,都很好理解,对于事实发送创蓝采用:一,内存数据库技术,HASH散列存储,并采用二级索引进行快速排序,查找;二,在实时处理的信息时,按照大数概率和正态分布控制实时内存窗口,提高实时短信发送效率;第三,对于低优先级的数据,按照权重进行发送流速均衡分配;第四,短信流控采用令牌获取机制,做到原子操作,实现流速精确均衡控制。

第三,通道的带宽问题。10690时代,短信的通道资源非常珍贵。一家企业,注册资金1000万,只能申请1跟通道,并且从申请到能用的周期很长,超过2年。一根通道的流速上限是1000,也就是说一根通道每小时的发送量是360万,创蓝在单根通道上面的使用率控制在1/30,也就是一个通道,每个小时走的短信不会超过12万条,这样放的量越小,通道的压力越小。同时,为了保证验证码不断流,对每一位合作用户都采取双通道备份。这样以来,大大的提高了验证码的稳定性。

最后,由于端口的码号越短,质量越高,给用户使用的都是11位短码,也就是一个手机号的长度。降低了360等软件的拦截概率,也避免了各省运营商之间的相互屏蔽机制。从而在通道层面保证了短信的速度和成功率。