php 短信验证 容联短信验证

Php集成容联短信验证码功能

1.      准备工作:

单独建立一个容联短信验证的类RonglianApi.php,内容如下:

<?php

/*

 *  Copyright (c) 2014 The CCP project authors.All Rights Reserved.

 *

 *  Use of this source code is governed by aBeijing Speedtong Information Technology Co.,Ltd license

 *  that can be found in the LICENSE file in theroot of the web site.

 *

 *   http://www.yuntongxun.com

 *

 *  An additional intellectual property rightsgrant can be found

 *  in the file PATENTS.  All contributing project authors may

 *  be found in the AUTHORS file in the root ofthe source tree.

 */

 

 

class REST {

       private$AccountSid;

       private$AccountToken;

       private$AppId;

       private$ServerIP;

       private$ServerPort;

       private$SoftVersion;

       private$Batch;  //时间戳

       private$BodyType = "xml";//包体格式,可填值:json、xml

       private$enabeLog = true; //日志开关。可填值:true、

       private$Filename="./log.txt"; //日志文件

       private$Handle;

       function__construct($ServerIP,$ServerPort,$SoftVersion)      

       {

              $this->Batch= date("YmdHis");

              $this->ServerIP= $ServerIP;

              $this->ServerPort= $ServerPort;

              $this->SoftVersion= $SoftVersion;

   $this->Handle = fopen($this->Filename, 'a');

       }

 

   /**

    * 设置主帐号

    *

    * @paramAccountSid 主帐号

    * @paramAccountToken 主帐号Token

    */   

    functionsetAccount($AccountSid,$AccountToken){

     $this->AccountSid = $AccountSid;

     $this->AccountToken = $AccountToken;  

    }

   

   

   /**

    * 设置应用ID

    *

    * @paramAppId 应用ID

    */

    functionsetAppId($AppId){

      $this->AppId = $AppId;

    }

   

   /**

    * 打印日志

    *

    * @param log日志内容

    */

    functionshowlog($log){

     if($this->enabeLog){

        fwrite($this->Handle,$log."\n"); 

      }

    }

   

    /**

     * 发起HTTPS请求

     */

     functioncurl_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 短信接收彿手机号码集合,用英文逗号分开

    * @paramdatas 内容数据

    * @param$tempId 模板Id

    */      

    functionsendTemplateSMS($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;

    }

  

  /**

    * 主帐号鉴权

    */  

   functionaccAuth()

   {

      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;

        }  

   }

}

?>

2.      新建一个send.php文件,单独写一个发送函数:

function sendSMS($to, $datas, $tempId) {

//       require_once("../RonglianSms/RonglianApi.php");

//       include_once ('../RonglianSms/Ronglian_config.php');

       require_once("RonglianApi.php");

        global $accountSid, $accountToken, $appId,$serverIP, $serverPort, $softVersion;

        //主帐号,对应开官网发者主账号下的 ACCOUNT SID

       $accountSid = '8a48b55152a56fc20152f1d6d813597';

 

        //主帐号令牌,对应官网开发者主账号下的 AUTH TOKEN

       $accountToken = '24ba2f35da53433b962418c2ea33055';

 

        //应用Id,在官网应用列表中点击应用,对应应用详情中的APPID

        //在开发调试的时候,可以使用官网自动为您分配的测试Demo的APP ID

        $appId ='8a48b55152a56fc20152f1da900d598';

 

        //请求地址

        //沙盒环境(用于应用开发调试):sandboxapp.cloopen.com

        //生产环境(用户应用上线使用):app.cloopen.com

       $serverIP = 'sandboxapp.cloopen.com';

 

 

        //请求端口,生产环境和沙盒环境一致

       $serverPort = '8883';

 

        //REST版本号,在官网文档REST介绍中获得。

       $softVersion = '2013-12-26';

        // 初始化REST SDK

     

        $rest =new REST($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!";

           break;

        }

        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 添加成功处理逻辑

        }

}

3.      调用发送函数:

    publicfunction webSendSMS()

    {

 

        $tel =$_REQUEST['tel'];

        $type =$_REQUEST['type'] ?: 1;//1注册2忘记密码

 

        if(empty($tel)) {

            die('手机号未填写');

        }

 

        if(empty($type)) {

            die('类型未写');

        }

        $rand =rand(1000, 9999);

 

        $data =array('recode_telphone' => $tel,

           'recode_type' => $type,

           'recode_dateline' => date('Y-m-d H:i:s', time()),

           'recode_number' => $rand);

 

       $userInfo = $this->model->table('users')->where('user_tel =' .$tel)->find();

 

        if($userInfo) {

            die('用户已经注册');

        }

       $getrecodeinfo =$this->model->table('get_recode')->where("recode_telphone ='" . $tel . "' and recode_type ='" . $type ."'")->find();

 

        if($getrecodeinfo) {

 

           $this->model->table('get_recode')->data($data)->where("recode_id= '" . $getrecodeinfo['recode_id'] . "'")->update();

 

        } else {

           $this->model->table('get_recode')->data($data)->insert();

 

        }

//调用发送函数:

                $ip = "1";

        $this->sendSMS($tel, array($rand,'5'),$ip);

        die('1');

 

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值