YzmCMS-新增短信接口

YzmCMS是一款輕量級開源內容管理系統,它採用OOP(面向對象)方式自主開發的框架。基於PHP+Mysql架構,並採用MVC框架式開發的一款高效開源的內容管理系統,可運行在Linux、Windows、MacOSX、Solaris等各種平臺上。便於進行二次開發,小編對這款軟件還是比較瞭解的,小編今天就以新增短信接口爲例爲大家講解一下如何進行二次開發,我們使用的短信接口是短信寶短信羣發平臺的短信接口,短信寶短信羣發平臺非常穩定,發送速度快,註冊就送測試短信,推薦大家使用。

首先我們打開項目:application\admin\view\system_set.html文件,在237~256行增加短信寶配置代碼:

 <div class="tabCon"><div class="row cl">
     <label class="form-label col-xs-4 col-sm-2">短信寶用戶名:</label>
     <div class="formControls col-xs-8 col-sm-9">
      <input type="text" name="smsbao_user" value="<?php echo $data["smsbao_user"];?>"  class="input-text" style="width:50%">
     </div></div>
    <div class="row cl">
     <label class="form-label col-xs-4 col-sm-2">短信寶密碼:</label>
     <div class="formControls col-xs-8 col-sm-9">
      <input type="text" name="smsbao_pass" value="<?php echo $data["smsbao_pass"];?>"  class="input-text" style="width:50%">
     </div></div>
    <div class="row cl">
     <label class="form-label col-xs-4 col-sm-2">短信簽名:</label>
     <div class="formControls col-xs-8 col-sm-9">
      <input type="text" name="smsbao_sign" value="<?php echo $data["smsbao_sign"];?>"  class="input-text" style="width:50%">
     </div>
    </div>
   </div> 

接着打開項目:application\member\controller\index.class.php文件,替換register方法

public function register(){ 
  $config = get_config();
  //檢查是否允許新會員註冊
  if($config['member_register'] == 0) showmsg('管理員關閉了新會員註冊!', 'stop');
  
  if(isset($_SESSION['_userid']) && $_SESSION['_userid']){
   showmsg(L('login_success'), U('member/index/init'), 1);
  }
   
   
  if(isset($_POST['dosubmit'])){
   
   if(empty($_SESSION['code']) || strtolower($_POST['code']) != $_SESSION['code']){
    $_SESSION['code'] = '';
    showmsg(L('code_error'), '', 1);
   }
   if (empty($_SESSION['mobile_code']) || strtolower($_POST['mobile_code']) != $_SESSION['mobile_code']) {
    $_SESSION['mobile_code'] = '';
    showmsg(L('手機驗證碼不正確'),'',1);
   }
   $_SESSION['code'] = '';
   
   $member = D('member');
   $data = array();
   $data['username'] = isset($_POST['username']) && is_username($_POST['username']) ? trim($_POST['username']) : showmsg(L('user_name_format_error'));  
   $data['password'] = isset($_POST['password']) && is_password($_POST['password']) ? trim($_POST['password']) : showmsg(L('password_format_error')); 
   $data['email'] = isset($_POST['email']) && is_email($_POST['email']) ? trim($_POST['email']) : showmsg(L('mail_format_error'));   
   $data['mobile'] = isset($_POST['mobile']) && is_mobile($_POST['mobile']) ? trim($_POST['mobile']) : showmsg(L('手機號不正確'));    
 
   $result = $member->where(array('username'=>$_POST['username']))->find();
   if($result) showmsg(L('user_already_exists'));
   $result = $member->where(array('email'=>$_POST['email']))->find();
   if($result) showmsg("郵箱已存在!");
   $results = $member->where(array('mobile'=>$_POST['mobile']))->find();
   if($results) showmsg("手機已存在");
   $data['nickname'] = $data['username'];
   $data["password"] = password($data['password']);
   $data['regdate'] = $data['lastdate'] = SYS_TIME;
   $data['regip'] = $data['lastip'] = getip();
   $data['groupid'] = '1';
   $data['amount'] = '0.00';
   $data['point'] = $data['experience'] = $config['member_point'];  //經驗和積分
   $data['status'] = ($config['member_check'] || $config['member_email']) ? 0 : 1;  
   $data['userid'] = $member->insert($data, true);  
   if(!$data['userid']) showmsg("註冊失敗!");
   
   D('member_detail')->insert($data, true, false); //插入附表
   
   if($config['member_email']){  //是否需要郵件驗證
    $mail_code = $_SESSION['mail_code'] = md5(microtime(true).$data['userid']);
    $_SESSION['userid'] = $data['userid'];
    $url = SITE_URL."index.php?m=member&c=index&a=register&mail_code=$mail_code&userid={$data['userid']}&verify=1";
    $message = '請點擊郵箱驗證地址:<a href="'. $url .'">'. $url .'</a>';
    $res = sendmail($data['email'], '會員郵箱驗證', $message);
    if(!$res) showmsg('郵件發送失敗,請聯繫網站管理員!', 'stop');
    showmsg('我們已將郵件發送到您的郵箱,請儘快完成驗證!');
   }elseif($config['member_check']){  //是否需要管理員審覈
    showmsg('註冊成功,由於管理員開啓審覈機制,請耐心等待!');
   }
   
   $_SESSION['_userid'] = $data['userid'];
   $_SESSION['_username'] = $data['username'];
   set_cookie('_userid', $data['userid']);
   set_cookie('_username', $data['username']);
   set_cookie('_nickname', $data['username']);
   set_cookie('_groupid', $data['groupid']);  
   showmsg('註冊成功!', U('member/index/init'), 1);   
   
  }else{
   if(!empty($_GET['verify'])) {
    $mail_code = isset($_GET['mail_code']) ? trim($_GET['mail_code']) : showmsg(L('illegal_operation'));
    $userid = isset($_GET['userid']) ? intval($_GET['userid']) : showmsg(L('illegal_operation'));
    if(isset($_SESSION['mail_code']) && $mail_code==$_SESSION['mail_code'] && $userid==$_SESSION['userid']){
     unset($_SESSION['mail_code'], $_SESSION['userid']);
     D('member')->update(array('status' => 1, 'email_status' => 1),array('userid'=>$userid));
     showmsg('郵箱驗證成功!', U('member/index/login'), 2);
    }else{
     showmsg('驗證失敗,可能是驗證時間已過期!', U('member/index/register'));
    }
   }
   include template('member', 'register');
  }  
  
 } 

接着打開項目:application\member\controller\reset.class.php文件,增加reset_mobile方法:

public function reset_mobile(){
  session_start();
  $_SESSION['step'] = isset($_SESSION['step']) ? $_SESSION['step'] : 1;
 
  if ($_SESSION['step']==1 && isset($_POST['dosubmit'])) {
   if(empty($_SESSION['code']) || strtolower($_POST['code']) != $_SESSION['code']){
    $_SESSION['code'] = '';
    showmsg(L('code_error'), '', 1);
  }
 
  $data = $this->_check($_POST['username']);
  if(empty($data['mobile'])) showmsg('您沒有綁定手機,請選擇其他方式找回密碼!', 'stop');
  $ret = sendsms($data['mobile']);
  if ($ret != 0) {
   showmsg('短信發送失敗,請聯繫網站管理員!');
  }
 
  $_SESSION['mobile'] = $data['mobile'];
  $_SESSION['userid'] = $data['userid'];
  $_SESSION['emc_times'] = 5;
  $_SESSION['step'] = 2;
 
 
  }elseif($_SESSION['step'] ==2 && isset($_POST['dosubmit'])){
   if($_SESSION['emc_times']=='' || $_SESSION['emc_times']<=0){
     $_SESSION['step'] = 1;
     showmsg("驗證次數超過5次,請重新獲取短信驗證碼!");
   }
   if(!empty($_SESSION['mobile_code']) && strtolower($_POST['mobile_code']) == strtolower($_SESSION['mobile_code'])){
     unset($_SESSION['emc_times']);
     $_SESSION['step'] = 3;
   }else{
     $_SESSION['emc_times'] = $_SESSION['emc_times']-1;
     showmsg('短信校驗碼錯誤!','',1);
   }
 
  }else if($_SESSION['step']==3 && isset($_POST['dosubmit'])){
   
   if(!isset($_POST['password']) || !is_password($_POST['password'])) showmsg(L('password_format_error'));
   
   D('member')->update(array('password' => password($_POST['password'])),array('userid'=>$_SESSION['userid']));
   unset($_SESSION['step'], $_SESSION['code'], $_SESSION['mobile_code'], $_SESSION['mobile'], $_SESSION['userid']);
   showmsg('更新密碼成功!', U('member/index/login'));
   
  }
 
  include template('member', 'reset_mobile');
 }

接着打開項目:application\member\view\default\register.html,在127行增加以下代碼:

<script type="text/javascript">
 var time = 0;
 var res = null;
 
 function sendTime(){
  clearTimeout(res); // 先清空一下倒計時資源。
        time--; // 倒計時時間遞減。
 
        // 如果倒計時到達0時,則恢復按鈕原來的內容
        if (time <= 0) {
            time = "獲取驗證碼";
            $('.huoqu').text(time);
            clearTimeout(res);
            time = 0;
            return;
        }
 
        // 倒計時的內容寫到按鈕裏面
        $('.huoqu').text("剩餘" + time + "秒");
        res = setTimeout("sendTime()", 1000);
 }
 
 $(function(){
 
  var flg = true;
 
  $('.huoqu').on('click',function(){
   console.log(123);
                var mobile = $("#mobile").val();
                var code = $("#code").val();
                var reg = /^1[3,4,5,7,8]\d{9}$/;
                var ret = false;
                if (code == '') {layer.msg('請填寫驗證碼'); return ret;}
    if (!reg.test(mobile)) {layer.msg('手機號碼不正確');return ret;}
   if (0 == time) {
                var data = {"code" : code, "mobile" : mobile};
                var err = "";
 
                if (flg == true) {
                    flg = false;
                    // ajax提交請求
      $.ajax({   
     type: "post",   
     url: "{U('public_checksms')}",   
     dataType: "html",
     async: false, 
     data: data, 
     beforeSend: function(){
       $("#dosubmit").attr({ disabled: "disabled" });
     },    
     success: function(msg){  
      if(msg == '0'){
        time = 60;
        sendTime();
        layer.msg('短信發送成功!');        
        ret = true;         
      }else if(msg == '1'){
        layer.msg('驗證碼不正確');     
      }else if(msg == '2'){
        layer.msg('短信配置不正確');     
      }else{
        layer.msg(msg);
      }     
     } 
      });
                }
                $('.codeimg').click();
                return ret;
            }
  })
 
 })
</script> 

最後打開項目:common\function\system.func.php文件,增加sendsms方法

function sendsms($mobile)
{
 $config = get_config();
 $user = $config['smsbao_user'];
 $pass = $config['smsbao_pass'];
 $sign = $config['smsbao_sign'];
 if (empty($user) && empty($pass) && empty($sign)) {
  return 2;
 }
 $code = rand(1000,9999);
 $content = '【'.$sign.'】您的驗證碼爲:'.$code.'請妥善保存!';
 $url = 'http://api.smsbao.com/sms?u='.$user.'&p='.md5($pass).'&m='.$mobile.'&c='.$content;
 $result = file_get_contents($url);
 if ($result == 0) {
  $_SESSION['mobile_code'] = $code;
  return '0';
 }else{
  return $result;
 }
 
 
}

好了,經過以上的替換,短信寶的短信平臺已經替換成功了,可以正常使用了。我們進行測試發送。

報備一下短信寶的VIP模板,這樣就可以走短信寶的優質通道了,即便遇到敏感文字都不會人工審覈,短信內容3~5秒就可送達。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章