基于PHP實現(xiàn)短信驗證碼接口(容聯(lián)運通訊)
自己也是剛剛研究,希望對也在研究的伙伴有幫助。
步驟:
1、登錄榮聯(lián)運通訊注冊獲取ACCOUNT SID、AUTH TOKEN、Rest URL(生產(chǎn))、AppID(默認(rèn));
2、注冊測試用手機號碼(先注冊測試號碼方可使用);
3、下載demo示例,并將代碼放到項目中(最好單獨建文件夾存儲)。
代碼區(qū):
一、新建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');//引入模板文件 //主帳號,對應(yīng)開官網(wǎng)發(fā)者主賬號下的 ACCOUNT SID $accountSid = ''; //主帳號令牌,對應(yīng)官網(wǎng)開發(fā)者主賬號下的 AUTH TOKEN $accountToken = ''; //應(yīng)用Id,在官網(wǎng)應(yīng)用列表中點擊應(yīng)用,對應(yīng)應(yīng)用詳情中的APP ID //在開發(fā)調(diào)試的時候,可以使用官網(wǎng)自動為您分配的測試Demo的APP ID $appId =''; //請求地址 //沙盒環(huán)境(用于應(yīng)用開發(fā)調(diào)試):sandboxapp.cloopen.com //生產(chǎn)環(huán)境(用戶應(yīng)用上線使用):app.cloopen.com $serverIP ='app.cloopen.com'; //請求端口,生產(chǎn)環(huán)境和沙盒環(huán)境一致 $serverPort ='8883'; //REST版本號,在官網(wǎng)文檔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);//手機號碼,替換內(nèi)容數(shù)組,模板ID } } /** * 發(fā)送模板短信 * @param to 手機號碼集合,用英文逗號分開 * @param datas 內(nèi)容數(shù)據(jù) 格式為數(shù)組 例如:array('Marry','Alon'),如不需替換請?zhí)?null * @param $tempId 模板Id,測試應(yīng)用和未上線應(yīng)用使用測試模板請?zhí)顚?,正式應(yīng)用上線后填寫已申請審核通過的模板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); // 發(fā)送模板短信 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可根據(jù)自己使用的框架重新命名,也可直接使用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; //日志開關(guān)??商钪担簍rue、 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'); } /** * 設(shè)置主帳號 * * @param AccountSid 主帳號 * @param AccountToken 主帳號Token */ function setAccount($AccountSid,$AccountToken){ $this->AccountSid = $AccountSid; $this->AccountToken = $AccountToken; } /** * 設(shè)置應(yīng)用ID * @param AppId 應(yīng)用ID */ function setAppId($AppId){ $this->AppId = $AppId; } /** * 打印日志 * * @param log 日志內(nèi)容 */ function showlog($log){ if($this->enabeLog){ fwrite($this->Handle,$log."\n"); } } /** * 發(fā)起HTTPS請求 */ function curl_post($url,$data,$header,$post=1) { //初始化curl $ch = curl_init(); //參數(shù)設(shè)置 $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\":\"網(wǎng)絡(luò)錯誤\"}"; } else { $result = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Response><statusCode>172001</statusCode><statusMsg>網(wǎng)絡(luò)錯誤</statusMsg></Response>"; } } curl_close($ch); return $result; } /** * 發(fā)送模板短信 * @param to 短信接收彿手機號碼集合,用英文逗號分開 * @param datas 內(nèi)容數(shù)據(jù) * @param $tempId 模板Id */ function sendTemplateSMS($to,$datas,$tempId) { //主帳號鑒權(quán)信息驗證,對必選參數(shù)進行判空。 //$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參數(shù) $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); // 生成授權(quán):主帳戶Id + 英文冒號 + 時間戳。 $authen = base64_encode($this->AccountSid . ":" . $this->Batch); // 生成包頭 $header = array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen"); // 發(fā)送請求 $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 = '返回包體錯誤'; // } //重新裝填數(shù)據(jù) if($datas->statusCode==0){ if($this->BodyType=="json"){ $datas->TemplateSMS =$datas->templateSMS; unset($datas->templateSMS); } } return $datas; } /** * 主帳號鑒權(quán) */ 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 = '應(yīng)用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實現(xiàn)短信驗證碼接口(容聯(lián)運通訊),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
深入剖析瀏覽器退出之后php還會繼續(xù)執(zhí)行么
覽器退出之后php還會繼續(xù)執(zhí)行么?下面小編就為大家介紹一下究竟覽器退出之后php還會不會繼續(xù)執(zhí)行。一起跟隨小編過來看看吧2016-05-05ThinkPHP 5 AJAX跨域請求頭設(shè)置實現(xiàn)過程解析
這篇文章主要介紹了ThinkPHP 5 AJAX跨域請求頭設(shè)置實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10Zend Framework實現(xiàn)自定義過濾器的方法
這篇文章主要介紹了Zend Framework實現(xiàn)自定義過濾器的方法,結(jié)合實例形式分析了Zend Framework自定義過濾器的簡單定義與使用方法,需要的朋友可以參考下2016-12-12ThinkPHP中url隱藏入口文件后接收alipay傳值的方法
這篇文章主要介紹了ThinkPHP中url隱藏入口文件后接收alipay傳值的方法,可實現(xiàn)針對第三方接口的URL地址中的?進行轉(zhuǎn)換處理,是非常實用的技巧,需要的朋友可以參考下2014-12-12