程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 短信驗證碼接口(容聯運通訊),驗證碼聯運

短信驗證碼接口(容聯運通訊),驗證碼聯運

編輯:關於PHP編程

短信驗證碼接口(容聯運通訊),驗證碼聯運


自己也是剛剛研究,希望對也在研究的伙伴有幫助。

步驟: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 >
       <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>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved