基于PHP实现短信验证码接口(容联运通讯)
程序员文章站
2024-04-02 15:31:52
自己也是刚刚研究,希望对也在研究的伙伴有帮助。
步骤:
1、登录荣联运通讯注册获取account sid、auth token、rest url(生产)、appid...
自己也是刚刚研究,希望对也在研究的伙伴有帮助。
步骤:
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原先的名字)
<?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="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实现短信验证码接口(容联运通讯),希望对大家有所帮助