基于PHP实现短信验证码接口(容联运通讯)

2018-10-15 16:57

阅读:545

自己也是刚刚研究,希望对也在研究的伙伴有帮助。

步骤:

1、登录荣联运通讯注册获取ACCOUNT SID、AUTH TOKEN、Rest URL(生产)、AppID(默认);

2、注册测试用手机号码(先注册测试号码方可使用);

3、下载demo示例,并将代码放到项目中(最好单独建文件夹存储)。

代码区:

一、新建test.app.php(测试用控制器)

<?php /* * 短信接口测试 */ class TestApp extends ShoppingbaseApp{ public function index(){ $this->display(test.html); } public function get_info() { include_once(ROOT_PATH./includes/rly_message/rest.app.php);//引入模板文件 //主帐号,对应开官网发者主账号下的 ACCOUNT SID $accountSid = ; //主帐号令牌,对应官网开发者主账号下的 AUTH TOKEN $accountToken = ; //应用Id,在官网应用列表中点击应用,对应应用详情中的APP ID //在开发调试的时候,可以使用官网自动为您分配的测试Demo的APP ID $appId =; //请求地址 //沙盒环境(用于应用开发调试)://生产环境(用户应用上线使用): $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 } } /** * 发送模板短信 * @param to 手机号码集合,用英文逗号分开 * @param datas 内容数据 格式为数组 例如:array(Marry,Alon),如不需替换请填 null * @param $tempId 模板Id,测试应用和未上线应用使用测试模板请填写1,正式应用上线后填写已申请审核通过的模板ID */ public function sendTemplateSMS($to,$datas,$tempId,$accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion) { // 初始化REST SDK $rest = new RestApp($serverIP,$serverPort,$softVersion); $rest->setAccount($accountSid,$accountToken); $rest->setAppId($appId); // 发送模板短信 echo Sending TemplateSMS to $to <br/>; $result = $rest->sendTemplateSMS($to,$datas,$tempId); if($result == NULL ) { echo result error!; exit(); } if($result->statusCode!=0) { echo error code : . $result->statusCode . <br>; echo error msg : . $result->statusMsg . <br>; //TODO 添加错误处理逻辑 }else{ echo Sendind TemplateSMS success!<br/>; // 获取返回信息 $smsmessage = $result->TemplateSMS; echo dateCreated:.$smsmessage->dateCreated.<br/>; echo smsMessageSid:.$smsmessage->smsMessageSid.<br/>; //TODO 添加成功处理逻辑 } } }

二、模板文件(rest.app.php可根据自己使用的框架重新命名,也可直接使用demo原先的名字)

<?php class RestApp { 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); } function RestApp($ServerIP,$ServerPort,$SoftVersion) { $this->Batch = date(YmdHis); $this->ServerIP = $ServerIP; $this->ServerPort = $ServerPort; $this->SoftVersion = $SoftVersion; $this->Handle = fopen($this->Filename, a); } /** * 设置主帐号 * * @param AccountSid 主帐号 * @param AccountToken 主帐号Token */ function setAccount($AccountSid,$AccountToken){ $this->AccountSid = $AccountSid; $this->AccountToken = $AccountToken; } /** * 设置应用ID * @param AppId 应用ID */ function setAppId($AppId){ $this->AppId = $AppId; } /** * 打印日志 * * @param log 日志内容 */ function showlog($log){ if($this->enabeLog){ fwrite($this->Handle,$log.\n); } } /** * 发起HTTPS请求 */ function curl_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 = <?xml version=\1.0\ encoding=\UTF-8\ standalone=\yes\?><Response><statusCode>172001</statusCode><statusMsg>网络错误</statusMsg></Response>; } } curl_close($ch); return $result; } /** * 发送模板短信 * @param to 短信接收彿手机号码集合,用英文逗号分开 * @param datas 内容数据 * @param $tempId 模板Id */ function sendTemplateSMS($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(request body = .$body); // 大写的sig参数 $sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch)); // 生成请求URL $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(response body = .$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 = new stdClass(); // $datas->statusCode = 172003; // $datas->statusMsg = 返回包体错误; // } //重新装填数据 if($datas->statusCode==0){ if($this->BodyType==json){ $datas->TemplateSMS =$datas->templateSMS; unset($datas->templateSMS); } } return $datas; } /** * 主帐号鉴权 */ function accAuth() { if($this->ServerIP==){ $data = new stdClass(); $data->statusCode = 172004; $data->statusMsg = IP为空; return $data; } if($this->ServerPort<=0){ $data = new stdClass(); $data->statusCode = 172005; $data->statusMsg = 端口错误(小于等于0); return $data; } if($this->SoftVersion==){ $data = new stdClass(); $data->statusCode = 172013; $data->statusMsg = 版本号为空; return $data; } if($this->AccountSid==){ $data = new stdClass(); $data->statusCode = 172006; $data->statusMsg = 主帐号为空; return $data; } if($this->AccountToken==){ $data = new stdClass(); $data->statusCode = 172007; $data->statusMsg = 主帐号令牌为空; return $data; } if($this->AppId==){ $data = new stdClass(); $data->statusCode = 172012; $data->statusMsg = 应用ID为空; return $data; } } } ?>

三、前台模板代码(test.html)

<div style=height:100px;border:1px solid gray;text-align:center;padding-top:20px;> <form action= method=post> 请输入手机号码:<input type=text name=phone_mob ><input type=button name=btn value=点击获取验证码><br /> 输入验证码:<input type=text name=yzm value=><br /> <input type=submit name=sbt value=提交> </form> </div>

四、js代码

<script type=text/javascript> $(function(){ $(input[name=btn]).on(click,function(){ var phone_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实现短信验证码接口(容联运通讯),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!


评论


亲,登录后才可以留言!