首页 > 语言 > PHP > 正文

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

2024-05-04 23:49:35
字体:
来源:转载
供稿:网友

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

步骤:

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 ='';//请求地址//沙盒环境(用于应用开发调试):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}}/*** 发送模板短信* @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原先的名字)

<?phpclass 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 、xmlprivate $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="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/SMS/TemplateSMS?sig=$sig";$this->showlog("request 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实现短信验证码接口(容联运通讯),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对VeVb武林网网站的支持!


注:相关教程知识阅读请移步到PHP教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选