首頁  >  文章  >  php教程  >  簡訊驗證碼介面(容聯運通訊)

簡訊驗證碼介面(容聯運通訊)

PHP中文网
PHP中文网原創
2017-03-20 13:41:432120瀏覽

步驟:1、登入榮聯運通訊註冊取得ACCOUNT SID、AUTH TOKEN、Rest URL(生產)、AppID(預設);

   2、註冊測試用手機號碼(先註冊測試方可使用);

     3、下載demo範例,並將程式碼放到專案中(最好單獨建置資料夾儲存)。

程式碼區:

一、新建test.app.php(測試用控制器)

<?php
/*
 * 短信接口测试
 */
class TestApp extends ShoppingbaseApp{
    public function index(){
        $this->display(&#39;test.html&#39;);
    }
    public function get_info()
    {
        include_once(ROOT_PATH.&#39;/includes/rly_message/rest.app.php&#39;);//引入模板文件
        //主帐号,对应开官网发者主账号下的 ACCOUNT SID
        $accountSid = &#39;&#39;;
        //主帐号令牌,对应官网开发者主账号下的 AUTH TOKEN
        $accountToken = &#39;&#39;;
        //应用Id,在官网应用列表中点击应用,对应应用详情中的APP ID
        //在开发调试的时候,可以使用官网自动为您分配的测试Demo的APP ID
        $appId =&#39;&#39;;
        //请求地址
        //沙盒环境(用于应用开发调试):sandboxapp.cloopen.com
        //生产环境(用户应用上线使用):app.cloopen.com
        $serverIP =&#39;app.cloopen.com&#39;;
        //请求端口,生产环境和沙盒环境一致
        $serverPort =&#39;8883&#39;;
        //REST版本号,在官网文档REST介绍中获得。
        $softVersion =&#39;2013-12-26&#39;;
        //global $accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion;
        $phone_mob = isset($_GET[&#39;phone_mob&#39;]) ? $_GET[&#39;phone_mob&#39;] : &#39;&#39;;
        if($phone_mob){
            $this->sendTemplateSMS($phone_mob,array(&#39;3519&#39;,&#39;5&#39;),"1",$accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion);//手机号码,替换内容数组,模板ID
        }
    }
    
  /**
  * 发送模板短信
  * @param to 手机号码集合,用英文逗号分开
  * @param datas 内容数据 格式为数组 例如:array(&#39;Marry&#39;,&#39;Alon&#39;),如不需替换请填 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;       // =&#39;app.cloopen.com&#39;
    private $ServerPort ;    //=&#39;8883&#39;
    private $SoftVersion ;   // =&#39;2013-12-26&#39;
    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, &#39;a&#39;);
    }
    
   /**
    * 设置主帐号
    * 
    * @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==&#39;json&#39;){
                $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. "&#39;".$datas[$i]."&#39;,"; 
            }
            $body= "{&#39;to&#39;:&#39;$to&#39;,&#39;templateId&#39;:&#39;$tempId&#39;,&#39;appId&#39;:&#39;$this->AppId&#39;,&#39;datas&#39;:[".$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 = &#39;172003&#39;;
//            $datas->statusMsg = &#39;返回包体错误&#39;; 
//        }
        //重新装填数据
        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 = &#39;172004&#39;;
            $data->statusMsg = &#39;IP为空&#39;;
          return $data;
        }
        if($this->ServerPort<=0){
            $data = new stdClass();
            $data->statusCode = &#39;172005&#39;;
            $data->statusMsg = &#39;端口错误(小于等于0)&#39;;
          return $data;
        }
        if($this->SoftVersion==""){
            $data = new stdClass();
            $data->statusCode = &#39;172013&#39;;
            $data->statusMsg = &#39;版本号为空&#39;;
          return $data;
        } 
        if($this->AccountSid==""){
            $data = new stdClass();
            $data->statusCode = &#39;172006&#39;;
            $data->statusMsg = &#39;主帐号为空&#39;;
          return $data;
        }
        if($this->AccountToken==""){
            $data = new stdClass();
            $data->statusCode = &#39;172007&#39;;
            $data->statusMsg = &#39;主帐号令牌为空&#39;;
          return $data;
        }
        if($this->AppId==""){
            $data = new stdClass();
            $data->statusCode = &#39;172012&#39;;
            $data->statusMsg = &#39;应用ID为空&#39;;
          return $data;
        }   
   }
}
?>

三、前台模板程式碼(test.html)

 <p 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>
 </p>

四、js程式碼

<script type="text/javascript">
        $(function(){
            $(&#39;input[name=btn]&#39;).on(&#39;click&#39;,function(){
                var phone_mob = $(&#39;input[name=phone_mob]&#39;).val();
                $.ajax({
                    type: "GET",
                    url: "index.php?app=test&act=get_info",//请求后台的URL地址
                    dataType: "json",
                    data:{&#39;phone_mob&#39; : phone_mob},
                    success:function(data){
                        if(data.done && data.retval)
                        {   
                            //console.log(data.retval);
                            alert(&#39;成功!&#39;);
                        }
                    }
                });
            });    
        });
    </script>

相關文章:基於簡訊PHP整合發送手機簡訊驗證碼、語音驗證碼介面函數及使用方法

天翼開放平台免費簡訊驗證碼介面使用實例

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn