基于PHP实现短信验证码接口(容联运通讯)
自己也是刚刚研究,希望对也在研究的伙伴有帮助。
步骤:
1、登录荣联运通讯注册获取ACCOUNTSID、AUTHTOKEN、RestURL(生产)、AppID(默认);
2、注册测试用手机号码(先注册测试号码方可使用);
3、下载demo示例,并将代码放到项目中(最好单独建文件夹存储)。
代码区:
一、新建test.app.php(测试用控制器)
<?php
/*
*短信接口测试
*/
classTestAppextendsShoppingbaseApp{
publicfunctionindex(){
$this->display('test.html');
}
publicfunctionget_info()
{
include_once(ROOT_PATH.'/includes/rly_message/rest.app.php');//引入模板文件
//主帐号,对应开官网发者主账号下的ACCOUNTSID
$accountSid='';
//主帐号令牌,对应官网开发者主账号下的AUTHTOKEN
$accountToken='';
//应用Id,在官网应用列表中点击应用,对应应用详情中的APPID
//在开发调试的时候,可以使用官网自动为您分配的测试Demo的APPID
$appId='';
//请求地址
//沙盒环境(用于应用开发调试):sandboxapp.cloopen.com
//生产环境(用户应用上线使用):app.cloopen.com
$serverIP='app.cloopen.com';
//请求端口,生产环境和沙盒环境一致
$serverPort='8883';
//REST版本号,在官网文档REST介绍中获得。
$softVersion='2013-12-26';
//global$accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion;
$phone_mob=isset($_GET['phone_mob'])?$_GET['phone_mob']:'';
if($phone_mob){
$this->sendTemplateSMS($phone_mob,array('3519','5'),"1",$accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion);//手机号码,替换内容数组,模板ID
}
}
/**
*发送模板短信
*@paramto手机号码集合,用英文逗号分开
*@paramdatas内容数据格式为数组例如:array('Marry','Alon'),如不需替换请填null
*@param$tempId模板Id,测试应用和未上线应用使用测试模板请填写1,正式应用上线后填写已申请审核通过的模板ID
*/
publicfunctionsendTemplateSMS($to,$datas,$tempId,$accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion)
{
//初始化RESTSDK
$rest=newRestApp($serverIP,$serverPort,$softVersion);
$rest->setAccount($accountSid,$accountToken);
$rest->setAppId($appId);
//发送模板短信
echo"SendingTemplateSMSto$to<br/>";
$result=$rest->sendTemplateSMS($to,$datas,$tempId);
if($result==NULL){
echo"resulterror!";
exit();
}
if($result->statusCode!=0){
echo"errorcode:".$result->statusCode."<br>";
echo"errormsg:".$result->statusMsg."<br>";
//TODO添加错误处理逻辑
}else{
echo"SendindTemplateSMSsuccess!<br/>";
//获取返回信息
$smsmessage=$result->TemplateSMS;
echo"dateCreated:".$smsmessage->dateCreated."<br/>";
echo"smsMessageSid:".$smsmessage->smsMessageSid."<br/>";
//TODO添加成功处理逻辑
}
}
}
二、模板文件(rest.app.php可根据自己使用的框架重新命名,也可直接使用demo原先的名字)
<?php
classRestApp{
private$AccountSid;
private$AccountToken;
private$AppId;
private$ServerIP;//='app.cloopen.com'
private$ServerPort;//='8883'
private$SoftVersion;//='2013-12-26'
private$Batch;//时间戳
private$BodyType="xml";//包体格式,可填值:json、xml
private$enabeLog=true;//日志开关。可填值:true、
private$Filename="./log.txt";//日志文件
private$Handle;
function__construct($ServerIP,$ServerPort,$SoftVersion)
{
$this->RestApp($ServerIP,$ServerPort,$SoftVersion);
}
functionRestApp($ServerIP,$ServerPort,$SoftVersion)
{
$this->Batch=date("YmdHis");
$this->ServerIP=$ServerIP;
$this->ServerPort=$ServerPort;
$this->SoftVersion=$SoftVersion;
$this->Handle=fopen($this->Filename,'a');
}
/**
*设置主帐号
*
*@paramAccountSid主帐号
*@paramAccountToken主帐号Token
*/
functionsetAccount($AccountSid,$AccountToken){
$this->AccountSid=$AccountSid;
$this->AccountToken=$AccountToken;
}
/**
*设置应用ID
*@paramAppId应用ID
*/
functionsetAppId($AppId){
$this->AppId=$AppId;
}
/**
*打印日志
*
*@paramlog日志内容
*/
functionshowlog($log){
if($this->enabeLog){
fwrite($this->Handle,$log."\n");
}
}
/**
*发起HTTPS请求
*/
functioncurl_post($url,$data,$header,$post=1)
{
//初始化curl
$ch=curl_init();
//参数设置
$res=curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_POST,$post);
if($post)
{
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
}
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
$result=curl_exec($ch);
//连接失败
if($result==FALSE){
if($this->BodyType=='json'){
$result="{\"statusCode\":\"172001\",\"statusMsg\":\"网络错误\"}";
}else{
$result="<?xmlversion=\"1.0\"encoding=\"UTF-8\"standalone=\"yes\"?><Response><statusCode>172001</statusCode><statusMsg>网络错误</statusMsg></Response>";
}
}
curl_close($ch);
return$result;
}
/**
*发送模板短信
*@paramto短信接收彿手机号码集合,用英文逗号分开
*@paramdatas内容数据
*@param$tempId模板Id
*/
functionsendTemplateSMS($to,$datas,$tempId)
{
//主帐号鉴权信息验证,对必选参数进行判空。
//$auth=$this->accAuth();
//if($auth!=""){
//return$auth;
//}
//拼接请求包体
if($this->BodyType=="json"){
$data="";
for($i=0;$i<count($datas);$i++){
$data=$data."'".$datas[$i]."',";
}
$body="{'to':'$to','templateId':'$tempId','appId':'$this->AppId','datas':[".$data."]}";
}else{
$data="";
for($i=0;$i<count($datas);$i++){
$data=$data."<data>".$datas[$i]."</data>";
}
$body="<TemplateSMS>
<to>$to</to>
<appId>$this->AppId</appId>
<templateId>$tempId</templateId>
<datas>".$data."</datas>
</TemplateSMS>";
}
$this->showlog("requestbody=".$body);
//大写的sig参数
$sig=strtoupper(md5($this->AccountSid.$this->AccountToken.$this->Batch));
//生成请求URL
$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/SMS/TemplateSMS?sig=$sig";
$this->showlog("requesturl=".$url);
//生成授权:主帐户Id+英文冒号+时间戳。
$authen=base64_encode($this->AccountSid.":".$this->Batch);
//生成包头
$header=array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen");
//发送请求
$result=$this->curl_post($url,$body,$header);
$this->showlog("responsebody=".$result);
if($this->BodyType=="json"){//JSON格式
$datas=json_decode($result);
}else{//xml格式
$datas=simplexml_load_string(trim($result,"\t\n\r"));
}
//if($datas==FALSE){
//$datas=newstdClass();
//$datas->statusCode='172003';
//$datas->statusMsg='返回包体错误';
//}
//重新装填数据
if($datas->statusCode==0){
if($this->BodyType=="json"){
$datas->TemplateSMS=$datas->templateSMS;
unset($datas->templateSMS);
}
}
return$datas;
}
/**
*主帐号鉴权
*/
functionaccAuth()
{
if($this->ServerIP==""){
$data=newstdClass();
$data->statusCode='172004';
$data->statusMsg='IP为空';
return$data;
}
if($this->ServerPort<=0){
$data=newstdClass();
$data->statusCode='172005';
$data->statusMsg='端口错误(小于等于0)';
return$data;
}
if($this->SoftVersion==""){
$data=newstdClass();
$data->statusCode='172013';
$data->statusMsg='版本号为空';
return$data;
}
if($this->AccountSid==""){
$data=newstdClass();
$data->statusCode='172006';
$data->statusMsg='主帐号为空';
return$data;
}
if($this->AccountToken==""){
$data=newstdClass();
$data->statusCode='172007';
$data->statusMsg='主帐号令牌为空';
return$data;
}
if($this->AppId==""){
$data=newstdClass();
$data->statusCode='172012';
$data->statusMsg='应用ID为空';
return$data;
}
}
}
?>
三、前台模板代码(test.html)
<divstyle="height:100px;border:1pxsolidgray;text-align:center;padding-top:20px;"> <formaction=""method="post"> 请输入手机号码:<inputtype="text"name="phone_mob"><inputtype="button"name="btn"value="点击获取验证码"><br/> 输入验证码:<inputtype="text"name="yzm"value=""><br/> <inputtype="submit"name="sbt"value="提交"> </form> </div>
四、js代码
<scripttype="text/javascript">
$(function(){
$('input[name=btn]').on('click',function(){
varphone_mob=$('input[name=phone_mob]').val();
$.ajax({
type:"GET",
url:"index.php?app=test&act=get_info",//请求后台的URL地址
dataType:"json",
data:{'phone_mob':phone_mob},
success:function(data){
if(data.done&&data.retval)
{
//console.log(data.retval);
alert('成功!');
}
}
});
});
});
</script>
以上所述是小编给大家介绍的基于PHP实现短信验证码接口(容联运通讯),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
