基于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实现短信验证码接口(容联运通讯),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!