• php系统 骑士cms(74cms)个人版 整合UC


    1.安装74cms完成后登录总后台在菜单条工具选项中添加uc整合菜单。

      在admin/templates/sys/admin_left_tools.htm这个文件中添加

    <li >
    <a href="admin_uc_setting.php"  target="mainFrame"  >整合UCenter </a>
    </li>

    2.在admin目录下创建 admin_uc_setting.php这个文件,内容如下

    <?php
    define('IN_QISHI', true);
    require_once(dirname(__FILE__).'/../data/config.php');
    require_once(dirname(__FILE__).'/include/admin_common.inc.php');
    require_once(ADMIN_ROOT_PATH.'include/admin_uc_fun.php');
    $act = !empty($_REQUEST['act']) ? trim($_REQUEST['act']) : 'uc_install';
    check_permissions($_SESSION['admin_purview'],"UCenter");
    if($act=='uc_install')
    {
     //include('data/config.php');
     $UC_config=array(
                 'appid'=>UC_APPID,
        'ucapi'=>UC_API,
        'ucip'=>UC_IP,
        'uckey'=>UC_KEY,
        'ucconnect'=>UC_CONNECT,
        'ucdbhost'=>UC_DBHOST,
        'ucdbuser'=>UC_DBUSER,
        'ucdbpw'=>UC_DBPW,
        'ucdbname'=>UC_DBNAME,
        'ucdbtablepre'=>UC_DBTABLEPRE,
     );
     $smarty->assign('uc_config',$UC_config);
     $smarty->assign('pageheader',"74CMS 管理中心 - 整合UCenter");
     $smarty->display('uc/admin_uc_setting.htm');
    }
    else if($act=='uc_set_save')
    {
     //print_r($_POST['uc_config']);
     if(uc_write_config($_POST['uc_config'],dirname(__FILE__).'/../data/config.php')){adminmsg('修改成功!',2);}else{
      adminmsg('修改失败!');
     };
    }
    ?>
    
    3.创建admin_uc_setting.php这个文件中使用的函数文件admin_uc_fun.php,内容如下
    
    <?php
     if(!defined('IN_QISHI'))
     {
      die('Access Denied!');
     }
    function uc_open($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = true)
    {
     $return = '';
     $matches = parse_url($url);
     $host = $matches['host'];
     $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';
     $port = !empty($matches['port']) ? $matches['port'] : 80;
     if($post)
     {
      $out = "POST $path HTTP/1.0\r\n";
      $out .= "Accept: */*\r\n";
      $out .= "Accept-Language: zh-cn\r\n";
      $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
      $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
      $out .= "Host: $host\r\n";
      $out .= 'Content-Length: '.strlen($post)."\r\n";
      $out .= "Connection: Close\r\n";
      $out .= "Cache-Control: no-cache\r\n";
      $out .= "Cookie: $cookie\r\n\r\n";
      $out .= $post;
     }else{
      $out = "GET $path HTTP/1.0\r\n";
      $out .= "Accept: */*\r\n";
      $out .= "Accept-Language: zh-cn\r\n";
      $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
      $out .= "Host: $host\r\n";
      $out .= "Connection: Close\r\n";
      $out .= "Cookie: $cookie\r\n\r\n";
     }
        $fp = @fsockopen(($host ? $host : $ip), $port, $errno, $errstr, $timeout);
     if(!$fp)
     {
      return '';
     }else{
      stream_set_blocking($fp, $block);
      stream_set_timeout($fp, $timeout);
      @fwrite($fp,$out);
      $status = stream_get_meta_data($fp);
      if(!$status['timed_out'])
      {
       while (!feof($fp))
       {
        if(($header = @fgets($fp)) && ($header == "\r\n" ||  $header == "\n"))
        {
         break;
        }
       }
    
       $stop = false;
       while(!feof($fp) && !$stop)
       {
        $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));
        $return .= $data;
        if($limit)
        {
         $limit -= strlen($data);
         $stop = $limit <= 0;
        }
       }
      }
      @fclose($fp);
      return $return;
     }
    }
    function uc_write_config($config, $file)
    {
     $success = false;
     if(!empty($config)){
      foreach ($config as $key =>$value){
       $$key=$value;
      }
     }
     //list($appauthkey, $appid, $ucdbhost, $ucdbname, $ucdbuser, $ucdbpw, $ucdbcharset, $uctablepre, $uccharset, $ucapi, $ucip) = explode('|', $config);
     if($content = file_get_contents($file))
     {
      $content = trim($content);
      $content = substr($content, -2) == '?>' ? substr($content, 0, -2) : $content;
      $link = mysql_connect($ucdbhost, $ucdbuser, $ucdbpw, 1);
      $uc_connnect = $link && mysql_select_db($ucdbname, $link) ? 'mysql' : '';
      $content = uc_insert_config($content, "/define\('UC_CONNECT',\s*'.*?'\);/i", "define('UC_CONNECT', '$uc_connnect');");
      $content = uc_insert_config($content, "/define\('UC_DBHOST',\s*'.*?'\);/i", "define('UC_DBHOST', '$ucdbhost');");
      $content = uc_insert_config($content, "/define\('UC_DBUSER',\s*'.*?'\);/i", "define('UC_DBUSER', '$ucdbuser');");
      $content = uc_insert_config($content, "/define\('UC_DBPW',\s*'.*?'\);/i", "define('UC_DBPW', '$ucdbpw');");
      $content = uc_insert_config($content, "/define\('UC_DBNAME',\s*'.*?'\);/i", "define('UC_DBNAME', '$ucdbname');");
      $content = uc_insert_config($content, "/define\('UC_DBCHARSET',\s*'.*?'\);/i", "define('UC_DBCHARSET', 'GBK');");
      $content = uc_insert_config($content, "/define\('UC_DBTABLEPRE',\s*'.*?'\);/i", "define('UC_DBTABLEPRE', '$ucdbtablepre');");
      $content = uc_insert_config($content, "/define\('UC_DBCONNECT',\s*'.*?'\);/i", "define('UC_DBCONNECT', '0');");
      $content = uc_insert_config($content, "/define\('UC_KEY',\s*'.*?'\);/i", "define('UC_KEY', '$uckey');");
      $content = uc_insert_config($content, "/define\('UC_API',\s*'.*?'\);/i", "define('UC_API', '$ucapi');");
      $content = uc_insert_config($content, "/define\('UC_CHARSET',\s*'.*?'\);/i", "define('UC_CHARSET', 'gb2312');");
      $content = uc_insert_config($content, "/define\('UC_IP',\s*'.*?'\);/i", "define('UC_IP', '$ucip');");
      $content = uc_insert_config($content, "/define\('UC_APPID',\s*'?.*?'?\);/i", "define('UC_APPID', '$appid');");
      $content = uc_insert_config($content, "/define\('UC_PPP',\s*'?.*?'?\);/i", "define('UC_PPP', '20');");
      $content .= "\r\n".'?>';
      
      if(@file_put_contents($file, $content))
      {
       $success = true;
      }
     }
     return $success;
    }
    function uc_insert_config($s, $find, $replace)
    {
     if(preg_match($find, $s))
     {
      $s = preg_replace($find, $replace, $s);
     }else{
      $s .= "\r\n".$replace;
     }
     return $s;
    }
    ?>
    View Code

    将admin_uc_fun.php这个文件放到admin/include目录下。

    4.在admin/templates/下创建uc目录,并创建admin_uc_setting.htm这个文件,文件内容如下;

    {#include file="sys/admin_header.htm"#}
    <div class="admin_main_nr_dbox">
    <div class="toptip">
     <h2>提示:</h2>
     <p>
    整合UCenter完毕后自动生成以下配置信息,多数情况修无需编辑此信息。
    </p>
    </div>
    <div class="toptit">编辑UCenter整合信息</div>
     
     
     <table width="100%" border="0" cellspacing="0" cellpadding="4">
     
        <tr>
          <td style=" line-height:220%; color:#666666; padding-left:15px;">
         <form id="form1" name="form1" method="post" action="?act=uc_set_save">
         <table>
    <tr>
       <td colspan="2" align="left">应用ID:{#$uc_config.appid#}</td>
    </tr>
    <tr>
        <td><input type="text" name="uc_config[appid]" value="{#$uc_config.appid#}"  class="input_text_200" /></td>
        <td>填写UCenter添加应用的id。</td>
     </tr>
    <tr>
       <td colspan="2" align="left">服务端地址:</td>
    </tr>
    <tr>
       <td width="200"><input type="text" name="uc_config[ucapi]" value="{#$uc_config.ucapi#}"  class="input_text_200"/></td>
       <td>在您 UCenter地址或者目录改变的情况下,修改此项,一般情况请不要改动
          例如: http://www.site.com/ucenter (最后不要加'/')。</td>
    </tr>
    <tr>
        <td colspan="2" align="left">服务端 IP:</td>
    </tr>
    <tr>
        <td><input type="text" name="uc_config[ucip]" value="{#$uc_config.ucip#}"  class="input_text_200" /></td>
        <td>正常情况下留空即可。如果由于域名解析问题导致 UCenter 与该应用通信失败,请尝试设置为该应用所在服务器的 IP 地址。</td>
     </tr>
    <tr>
        <td colspan="2" align="left">通信密钥:</td>
     </tr>
     <tr>
        <td><input type="text" name="uc_config[uckey]"  value="{#$uc_config.uckey#}"  class="input_text_200"/></td>
        <td>只允许使用英文字母及数字,限 64 字节。应用端的通信密钥必须与此设置保持一致,否则该应用将无法与 UCenter 正常通信</td>
    </tr>
    <tr>
        <td colspan="2" align="left">连接方式:</td>
    </tr>
        <tr>
            <td>      
            <select name="uc_config[ucconnect]" onChange="if(this.value==''){document.getElementById('ucmysql').style.display = 'none';}else{document.getElementById('ucmysql').style.display = '';}" style=" 207px;font-size:12px;">
       <option value="mysql" {#if $uc_config.ucconnect eq 'mysql'#}selected="selected"{#/if#}> 数据库方式(MySQL) </option>
       <option value="" {#if $uc_config.ucconnect eq ''#}selected="selected"{#/if#}> 接口方式(fsockopen) </option>
            </select>
            </td>
            <td>请根据您的服务器网络环境选择适当的连接方式</td>
        </tr>
    
        <tr>
            <td colspan="2">
                <table id="ucmysql" >
                    <tr>
                        <td colspan="2" align="left">数据库服务器:</td>
                    </tr>
                    <tr>
                        <td width="200">
                        <input type="text"   name="uc_config[ucdbhost]" value="{#$uc_config.ucdbhost#}"  class="input_text_200"/>                  </td>
                        <td>默认:localhost, 如果 MySQL 端口不是默认的 3306,请填写如下形式:127.0.0.1:端口号</td>
                    </tr>
                    
                    <tr>
                        <td colspan="2" align="left">数据库用户名:</td>
                    </tr>
                    <tr>
                        <td>
                        <input type="text"   name="uc_config[ucdbuser]" value="{#$uc_config.ucdbuser#}" class="input_text_200"/> 
                        </td>
                        <td>登录uc服务端的数据库用户名</td>  
                    </tr>
                    
                    <tr>
                        <td colspan="2" align="left">数据库密码:</td>
                    </tr>                
                    <tr>
                        <td>
                        <input type="text" name="uc_config[ucdbpw]" value="{#$uc_config.ucdbpw#}" class="input_text_200"/> 
                        </td>
                        <td>登录uc服务端数据库使用的密码</td>  
                    </tr>
                    
                    <tr>
                        <td colspan="2" align="left">数据库名:</td>
                    </tr>                
                    <tr>
                        <td>
                        <input type="text"  name="uc_config[ucdbname]" value="{#$uc_config.ucdbname#}" class="input_text_200"/> 
                        </td>
                        <td>uc服务端的数据库名称。</td>  
                    </tr>
                    
                    <tr>
                        <td colspan="2" align="left">数据库表前缀:</td>
                    </tr>                
                    <tr>
                        <td>
                        <input type="text"   name="uc_config[ucdbtablepre]" value="{#$uc_config.ucdbtablepre#}" class="input_text_200"/> 
                        </td>
                        <td>uc服务端使用的数据库表前缀</td>  
                    </tr>
                </table>            
            </td>
        </tr>    
        
        <tr>
            <td colspan="2" align="left">正确的配置信息:</td>
        </tr>
        <tr>
            <td>
                <textarea  onFocus="this.select()" style="200px; height:100px; font-size:14px; font-family: Arial, Helvetica, sans-serif">
    define('UC_CONNECT', '{#$uc_config.ucconnect#}');
    define('UC_DBHOST', '{#$uc_config.ucdbhost#}');
    define('UC_DBUSER', '{#$uc_config.ucdbuser#}');
    define('UC_DBPW', '********');
    define('UC_DBNAME', '{#$uc_config.ucdbname#}');
    define('UC_DBCHARSET', '{#$uc_config.ucdbcharest#}');
    define('UC_DBTABLEPRE', '{#$uc_config.ucdbtablepre#}');
    define('UC_DBCONNECT', '0');
    define('UC_KEY', '{#$uc_config.uckey#}');
    define('UC_API', '{#$uc_config.ucapi#}');
    define('UC_CHARSET', '{#$uc_config.uccharest#}');
    define('UC_IP', '{#$uc_config.ucip#}');
    define('UC_APPID', '{#$uc_config.ucappid#}');
    define('UC_PPP', '20');
                </textarea>
            </td>
            <td>当应用的 UCenter 配置信息丢失时可复制左侧的代码到应用的配置文件中</td>
        </tr>
     <tr>
        <td height="88" colspan="2">
          <input name="save" type="submit" class="admin_submit"    value="修改"/></td>
      </tr>
    </table>
            </form>
       </td>
        </tr>
      </table>
    </div>
    {#include file="sys/admin_footer.htm"#}
    </body>
    </html>
    View Code

    5..在后台工具中配置ucenter的内容,如没出现选项,可更新缓存后。如图:

     6.在plus目录下ajax_user.php找到这个文件,在文件内容替换成

    <?php
    define('IN_QISHI', true);
    require_once(dirname(dirname(__FILE__)).'/include/plus.common.inc.php');
    include_once(QISHI_ROOT_PATH.'api/uc_client/client.php');//引入uc
    $act = !empty($_REQUEST['act']) ? trim($_REQUEST['act']) : '';
    //获取用户数据
    function getpassport($username, $password) {
     $passport = array();
     $ucresult = uc_user_login($username, $password);
     if($ucresult[0] > 0) {
      $passport['uid'] = $ucresult[0];
      $passport['username'] = $ucresult[1];
      $passport['email'] = $ucresult[3];
     }
     return $passport;
    }
    if($act =='do_login')
    {
     $username=isset($_REQUEST['username'])?trim($_REQUEST['username']):"";
     $password=isset($_REQUEST['password'])?trim($_REQUEST['password']):"";
     $expire=isset($_POST['expire'])?intval($_POST['expire']):"";
     $account_type=1;
     if (preg_match("/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/",$username))
     {
     $account_type=2;
     }
     elseif (preg_match("/^(13|15|18)\d{9}$/",$username))
     {
     $account_type=3;
     }
     $url=isset($_POST['url'])?$_POST['url']:"";
     if (strcasecmp(QISHI_DBCHARSET,"utf8")!=0)
     {
     $username=iconv("utf-8",QISHI_DBCHARSET,$username);
     $password=iconv("utf-8",QISHI_DBCHARSET,$password);
     }
     $captcha=get_cache('captcha');
     if ($captcha['verify_userlogin']=="1")
     {
      $postcaptcha=$_POST['postcaptcha'];
      if ($captcha['captcha_lang']=="cn" && strcasecmp(QISHI_DBCHARSET,"utf8")!=0)
      {
      $postcaptcha=iconv("utf-8",QISHI_DBCHARSET,$postcaptcha);
      }
      if (empty($postcaptcha) || empty($_SESSION['imageCaptcha_content']) || strcasecmp($_SESSION['imageCaptcha_content'],$postcaptcha)!=0)
      {
      unset($_SESSION['imageCaptcha_content']);
      exit("errcaptcha");
      }
     }
     require_once(QISHI_ROOT_PATH.'include/fun_user.php');
     if ($username && $password)
     {
      $user=get_user_inusername($username);
      if(empty($user)){
       //修改64-72行同步获取用户源
       if(!$passport = getpassport($username, $password)) {
        exit("login_failure_please_re_login");
       }else{
        user_register($passport['username'],$password,2,$passport['email'],true,$passport['uid']);
       }
      }
      $login=user_login($username,$password,$account_type,true,$expire);
      $url=$url?$url:$login['qs_login'];
      if ($login['qs_login'])
      {
       /*uc同步登录*/
       if(defined('UC_API')){
        $login['uc_login']=uc_user_synlogin($_SESSION['uid']);
       }
       exit($login['uc_login']."<script language=\"javascript\" type=\"text/javascript\">window.location.href=\"".$url."\";</script>");
      }
      else
      {
       exit("err");
      }
     }
     exit("err");
    }
    elseif ($act=='do_reg')
    {
     $captcha=get_cache('captcha');
     if ($captcha['verify_userreg']=="1")
     {
      $postcaptcha=$_POST['postcaptcha'];
      if ($captcha['captcha_lang']=="cn" && strcasecmp(QISHI_DBCHARSET,"utf8")!=0)
      {
      $postcaptcha=iconv("utf-8",QISHI_DBCHARSET,$postcaptcha);
      }
      if (empty($postcaptcha) || empty($_SESSION['imageCaptcha_content']) || strcasecmp($_SESSION['imageCaptcha_content'],$postcaptcha)!=0)
      {
      exit("err");
      }
     }
     require_once(QISHI_ROOT_PATH.'include/fun_user.php');
     $username = isset($_POST['username'])?trim($_POST['username']):exit("err");
     $password = isset($_POST['password'])?trim($_POST['password']):exit("err");
     $member_type = isset($_POST['member_type'])?intval($_POST['member_type']):exit("err");
     $email = isset($_POST['email'])?trim($_POST['email']):exit("err");
     if (strcasecmp(QISHI_DBCHARSET,"utf8")!=0)
     {
     $username=iconv("utf-8",QISHI_DBCHARSET,$username);
     $password=iconv("utf-8",QISHI_DBCHARSET,$password);
     }
     $register=user_register($username,$password,$member_type,$email);
     if ($register>0)
     { 
      $ucjs="";
      $login_js=user_login($username,$password);
      /*uc注册*/
      if(defined('UC_API')){
       $uid=uc_user_register($username,$password,$email);
       if($uid>0)$ucjs=uc_user_synlogin($uid);//uc登录通知
      }
      $mailconfig=get_cache('mailconfig');
      if ($mailconfig['set_reg']=="1")
      {
       dfopen($_CFG['site_domain'].$_CFG['site_dir']."plus/asyn_mail.php?uid=".$_SESSION['uid']."&key=".asyn_userkey($_SESSION['uid'])."&sendemail=".$email."&sendusername=".$username."&sendpassword=".$password."&act=reg");
      }
      //$ucjs=$login_js['uc_login'];
      $qsurl=$login_js['qs_login'];
      $qsjs="<script language=\"javascript\" type=\"text/javascript\">window.location.href=\"".$qsurl."\";</script>";
       if ($ucjs || $qsurl)
       {
           exit($ucjs.$qsjs);
       }
       else
       {
       exit("err");
       }
     }
     else
     {
     exit("err");
     }
    }
    elseif($act =='check_usname')
    {
     require_once(QISHI_ROOT_PATH.'include/fun_user.php');
     $usname=trim($_REQUEST['usname']);
     if (strcasecmp(QISHI_DBCHARSET,"utf8")!=0)
     {
      $usname=iconv("utf-8",QISHI_DBCHARSET,$usname);
     }
     if(defined('UC_API')){
      if(uc_user_checkname($usname)>0){
       exit("true");
      }else{
       exit("false");
      }
     }else{
      $user=get_user_inusername($usname);
      empty($user)?exit("true"):exit("false");
     }
    }
    elseif($act == 'check_email')
    {
     require_once(QISHI_ROOT_PATH.'include/fun_user.php');
     $email=trim($_REQUEST['email']);
     if (strcasecmp(QISHI_DBCHARSET,"utf8")!=0)
     {
     $email=iconv("utf-8",QISHI_DBCHARSET,$email);
     }
     if(defined('UC_API')){
      if(uc_user_checkemail($email)>0){
       exit("true");
      }else{
       exit("false");
      }
     }else{
      $user=get_user_inemail($email);
      empty($user)?exit("true"):exit("false");
     }
    }
    elseif ($act=="top_loginform")
    {
     $contents='';
     if ($_COOKIE['QS']['username'] && $_COOKIE['QS']['password'])
     {
      $tpl='../templates/'.$_CFG['template_dir']."plus/top_login_success.htm";
     }
     else
     { 
      $tpl='../templates/'.$_CFG['template_dir']."plus/top_login_form.htm";
     }
      $contents=file_get_contents($tpl);
      $contents=str_replace('{#$activate_username#}',$_SESSION['activate_username'],$contents);
      $contents=str_replace('{#$site_name#}',$_CFG['site_name'],$contents);
      $contents=str_replace('{#$username#}',$_COOKIE['QS']['username'],$contents);
      $contents=str_replace('{#$site_template#}',$_CFG['site_template'],$contents);
      $contents=str_replace('{#$user_url#}',url_rewrite('QS_login'),$contents);
      $contents=str_replace('{#$reg_url#}',$_CFG['site_dir']."user/user_reg.php",$contents);
      $contents=str_replace('{#$activate_url#}',$_CFG['site_dir']."user/user_reg.php?act=activate",$contents);
      if ($_SESSION['username'] && $_SESSION['uid'] && empty($_SESSION['uqqid']) && $_CFG['qq_apiopen']=="1")
      {
       $html="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src=\"{$_CFG['site_template']}images/75.gif\" align=\"absmiddle\"/>";
       $html.="<a href=\"{$_CFG['site_dir']}user/qqconnect.php?act=binding\" >绑定QQ帐号</a>";
       $contents=str_replace('{#$qqconnect#}',$html,$contents);
      }
      elseif (empty($_COOKIE['QS']['username']) && $_CFG['qq_apiopen']=="1")
      {
       $html="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src=\"{$_CFG['site_template']}images/75.gif\" align=\"absmiddle\"/>";
       $html.="<a href=\"{$_CFG['site_dir']}user/qqconnect.php\" >用QQ帐号登录</a>";
       $contents=str_replace('{#$qqconnect#}',$html,$contents);
      }
      else
      {
       $contents=str_replace('{#$qqconnect#}',"",$contents);
      }
      exit($contents);
    }
    elseif ($act=="loginform")
    {
     $contents='';
     if ($_COOKIE['QS']['username'] && $_COOKIE['QS']['password'])
     {
      $tpl='../templates/'.$_CFG['template_dir']."plus/login_success.htm";
     }
     else
     {
      $tpl='../templates/'.$_CFG['template_dir']."plus/login_form.htm";
     }
      $contents=file_get_contents($tpl);
      $contents=str_replace('{#$activate_username#}',$_SESSION['activate_username'],$contents);
      $contents=str_replace('{#$site_name#}',$_CFG['site_name'],$contents);
      $contents=str_replace('{#$username#}',$_COOKIE['QS']['username'],$contents);
      $contents=str_replace('{#$site_template#}',$_CFG['site_template'],$contents);
      $contents=str_replace('{#$user_url#}',url_rewrite('QS_login'),$contents);
      $contents=str_replace('{#$reg_url#}',$_CFG['site_dir']."user/user_reg.php",$contents);
      $contents=str_replace('{#$activate_url#}',$_CFG['site_dir']."user/user_reg.php?act=activate",$contents);
      exit($contents);
    }
    ?>
    View Code

    如有不同可查看代码仔细进行替换。

    7.在user目录下找到login.php的文件,在if($act == 'logout')27行后添加

    if(defined('UC_API')){
      $logoutjs.=uc_user_synlogout();
     }

    这个,以同步登出。

    8.在api目录下建立uc.php文件,如有此文件可,相应进行内容对比替换。内容如下

    <?php
    define('IN_QISHI', TRUE);
    include_once (dirname(__FILE__)."/../include/common.inc.php");
    require_once(QISHI_ROOT_PATH.'include/mysql.class.php');
    $qsdb = new mysql($dbhost,$dbuser,$dbpass,$dbname);
    unset($dbhost,$dbuser,$dbpass,$dbname);
    define('UC_CLIENT_VERSION', '1.5.0'); //note UCenter 版本标识
    define('UC_CLIENT_RELEASE', '20081031');
    define('API_DELETEUSER', 1);  //note 用户删除 API 接口开关
    define('API_RENAMEUSER', 1);  //note 用户改名 API 接口开关
    define('API_GETTAG', 1);  //note 获取标签 API 接口开关
    define('API_SYNLOGIN', 1);  //note 同步登录 API 接口开关
    define('API_SYNLOGOUT', 1);  //note 同步登出 API 接口开关
    define('API_UPDATEPW', 1);  //note 更改用户密码 开关
    define('API_UPDATEBADWORDS', 1); //note 更新关键字列表 开关
    define('API_UPDATEHOSTS', 1);  //note 更新域名解析缓存 开关
    define('API_UPDATEAPPS', 1);  //note 更新应用列表 开关
    define('API_UPDATECLIENT', 1);  //note 更新客户端缓存 开关
    define('API_UPDATECREDIT', 1);  //note 更新用户积分 开关
    define('API_GETCREDITSETTINGS', 1); //note 向 UCenter 提供积分设置 开关
    define('API_GETCREDIT', 1);  //note 获取用户的某项积分 开关
    define('API_UPDATECREDITSETTINGS', 1); //note 更新应用积分设置 开关
    define('API_RETURN_SUCCEED', '1');
    define('API_RETURN_FAILED', '-1');
    define('API_RETURN_FORBIDDEN', '-2');
    define('UC_CLIENT_ROOT', QISHI_ROOT_PATH.'api/uc_client');
    //note 普通的 http 通知方式
    if(!defined('IN_UC'))
    {
     error_reporting(0);
     set_magic_quotes_runtime(0);
     defined('MAGIC_QUOTES_GPC') || define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
    
     $_DCACHE = $get = $post = array();
    
     $code = @$_GET['code'];
    
     parse_str(_authcode($code, 'DECODE', UC_KEY), $get);
     
     if(MAGIC_QUOTES_GPC)
     {
      $get = _stripslashes($get);
     }
    
     $timestamp = time();
     if($timestamp - $get['time'] > 3600) {
      exit('Authracation has expiried');
     }
     if(empty($get)) {
      exit('Invalid Request');
     }
     $action = $get['action'];
    
     require_once UC_CLIENT_ROOT.'/lib/xml.class.php';
     $post = xml_unserialize(file_get_contents('php://input'));
    
     if(in_array($get['action'], array('test', 'deleteuser', 'renameuser', 'gettag', 'synlogin', 'synlogout', 'updatepw', 'updatebadwords', 'updatehosts', 'updateapps', 'updateclient', 'updatecredit', 'getcreditsettings', 'updatecreditsettings')))
     {
      $uc_note = new uc_note();
      exit($uc_note->$get['action']($get, $post));
     }else{
      exit(API_RETURN_FAILED);
     }
    //note include 通知方式
    } else {
    
     exit('Invalid Request');
    }
    
    class uc_note
    {
    
     var $dbconfig = '';
     var $db = '';
     var $appdir = '';
     var $tablepre = '';
     
     function _serialize($arr, $htmlon = 0)
     {
      if(!function_exists('xml_serialize'))
      {
       include_once UC_CLIENT_ROOT.'/lib/xml.class.php';
      }
      return xml_serialize($arr, $htmlon);
     }
    
     function uc_note()
     {
      $this->appdir = QISHI_ROOT_PATH;
      $this->dbconfig = QISHI_ROOT_PATH.'data/config.php';
      $this->db = $GLOBALS['qsdb'];
      $this->tablepre = $GLOBALS['pre'];
     }
    
     function test($get, $post)
     {
      return API_RETURN_SUCCEED;
     }
    
     function deleteuser($get, $post)
     {
      !API_DELETEUSER && exit(API_RETURN_FORBIDDEN);
      /* include_once(QISHI_ROOT_PATH.'api/uc_client/client.php');
      $uc_uid_arr=explode(",",$uids);
      foreach($uc_uid_arr as $uc_uid)
      {
      $uc_user_arr=uc_get_user(intval($uc_uid),1);
      $usname_arr[]=$uc_user_arr[1];
      }
      //file_put_contents("test.txt",  var_export($usname_arr, true), LOCK_EX);
      foreach($usname_arr as $usname)
      {
      $this->db->query("DELETE FROM ".table('members')." WHERE username='".$usname."'");
      } */
      return API_RETURN_SUCCEED;
     }
     function renameuser($get, $post) {
      $uid = $get['uid'];
      $usernameold = $get['oldusername'];
      $usernamenew = $get['newusername'];
      if(!API_RENAMEUSER) {
       return API_RETURN_FORBIDDEN;
      }
    
      return API_RETURN_SUCCEED;
     }
     
     function synlogin($get,$post)
     {
      global $QS_cookiedomain,$QS_cookiepath;
      $username = $get['username'];
      if(!API_SYNLOGIN)
      {
       return API_RETURN_FORBIDDEN;
      }
      //note 同步登录 API 接口\
      header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
      $result=$this->db->getone("SELECT * FROM ".$this->tablepre."members WHERE username='".$username."' LIMIT 1 ");
      if(is_array($result))
      {
       setcookie('QS[uid]',$result['uid'], time()+3600*24,$QS_cookiepath,$QS_cookiedomain);
       setcookie('QS[username]',$result['username'], time()+3600*24,$QS_cookiepath,$QS_cookiedomain);
       setcookie('QS[password]',$result['password'], time()+3600*24,$QS_cookiepath,$QS_cookiedomain);
      } 
      else
      {
      $_SESSION['activate_username']=$username;
      $_SESSION['uid'] = '';
      $_SESSION['username'] = '';
      $_SESSION['utype']='';
      setcookie('QS[uid]','', time()-3600,$QS_cookiepath,$QS_cookiedomain);
      setcookie('QS[username]','', time()-3600,$QS_cookiepath,$QS_cookiedomain);
      setcookie('QS[password]','', time()-3600,$QS_cookiepath,$QS_cookiedomain);
      setcookie('QS[utype]','', time()-3600,$QS_cookiepath,$QS_cookiedomain);
      file_put_contents("1.txt",  var_export($_SESSION, true), LOCK_EX);
      }
     }
     function synlogout($get, $post)
     {
      global $QS_cookiepath,$QS_cookiedomain;
      if(!API_SYNLOGOUT)
      {
       return API_RETURN_FORBIDDEN;
      }
      //note 同步登出 API 接口
      header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
      $_SESSION['uid'] = '';
      $_SESSION['username'] = '';
      $_SESSION['utype']='';
      setcookie('QS[uid]','', time()-3600,$QS_cookiepath,$QS_cookiedomain);
      setcookie('QS[username]','', time()-3600,$QS_cookiepath,$QS_cookiedomain);
      setcookie('QS[password]','', time()-3600,$QS_cookiepath,$QS_cookiedomain);
      setcookie('QS[utype]','', time()-3600,$QS_cookiepath,$QS_cookiedomain);
      $_SESSION['activate_username']="";
     }
     function updatepw($get, $post)//当用户更改用户密码时,此接口负责接受 UCenter 发来的新密码。
     {
      if(!API_UPDATEPW)
      {
       return API_RETURN_FORBIDDEN;
      }
      //note 修改密码 API 接口
      $username = $get['username'];
      $password = $get['password'];
      if ($username && $password)
      {
      $result=$this->db->getone("SELECT * FROM ".$this->tablepre."members WHERE username='".$username."' LIMIT 1 ");
      $md5password=md5(md5($password).$result['pwd_hash']);
      $this->db->query("UPDATE  ".$this->tablepre."members SET password='".$md5password."' WHERE username='".$username."' LIMIT 1 ");
      }
      return API_RETURN_SUCCEED;
     }
    
     function updatehosts($get, $post)//当 UCenter 的域名解析设置变更时,此接口负责通知所有应用程序更新后的域名解析设置内容。
     {
      if(!API_UPDATEHOSTS)
      {
       return API_RETURN_FORBIDDEN;
      }
      //note 理新HOST缓存 API 接口
      $cachefile = UC_CLIENT_ROOT.'/data/cache/hosts.php';
      $fp = fopen($cachefile, 'w');
      $s = "<?php\r\n";
      $s .= '$_CACHE[\'hosts\'] = '.var_export($post, TRUE).";\r\n";
      fwrite($fp, $s);
      fclose($fp);
      return API_RETURN_SUCCEED;
     }
    
     function updateapps($get, $post)//当 UCenter 的应用程序列表变更时,此接口负责通知所有应用程序更新后的应用程序列表。
     {
      if(!API_UPDATEAPPS)
      {
       return API_RETURN_FORBIDDEN;
      }
      $UC_API = $post['UC_API'];
    
      //note 写 app 缓存文件
      $cachefile = UC_CLIENT_ROOT.'/data/cache/apps.php';
      $fp = fopen($cachefile, 'w');
      $s = "<?php\r\n";
      $s .= '$_CACHE[\'apps\'] = '.var_export($post, TRUE).";\r\n";
      fwrite($fp, $s);
      fclose($fp);
    
      return API_RETURN_SUCCEED;
     }
    
     function updateclient($get, $post)//当 UCenter 的基本设置信息变更时,此接口负责通知所有应用程序更新后的基本设置内容。
     {
      if(!API_UPDATECLIENT)
      {
       return API_RETURN_FORBIDDEN;
      }
      $cachefile = UC_CLIENT_ROOT.'/data/cache/settings.php';
      $fp = fopen($cachefile, 'w');
      $s = '<?php'."\r\n";
      $s .= '$_CACHE[\'settings\'] = '.var_export($post, TRUE).";\r\n";
      fwrite($fp, $s);
      fclose($fp);
      
      return API_RETURN_SUCCEED;
     }
    
    }
    function _authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
     $ckey_length = 4;
    
     $key = md5($key ? $key : UC_KEY);
     $keya = md5(substr($key, 0, 16));
     $keyb = md5(substr($key, 16, 16));
     $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
    
     $cryptkey = $keya.md5($keya.$keyc);
     $key_length = strlen($cryptkey);
    
     $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
     $string_length = strlen($string);
    
     $result = '';
     $box = range(0, 255);
    
     $rndkey = array();
     for($i = 0; $i <= 255; $i++) {
      $rndkey[$i] = ord($cryptkey[$i % $key_length]);
     }
    
     for($j = $i = 0; $i < 256; $i++) {
      $j = ($j + $box[$i] + $rndkey[$i]) % 256;
      $tmp = $box[$i];
      $box[$i] = $box[$j];
      $box[$j] = $tmp;
     }
    
     for($a = $j = $i = 0; $i < $string_length; $i++) {
      $a = ($a + 1) % 256;
      $j = ($j + $box[$a]) % 256;
      $tmp = $box[$a];
      $box[$a] = $box[$j];
      $box[$j] = $tmp;
      $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
     }
    
     if($operation == 'DECODE') {
      if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
       return substr($result, 26);
      } else {
        return '';
       }
     } else {
      return $keyc.str_replace('=', '', base64_encode($result));
     }
    
    }
    
    function _stripslashes($string) {
     if(is_array($string)) {
      foreach($string as $key => $val) {
       $string[$key] = _stripslashes($val);
      }
     } else {
      $string = stripslashes($string);
     }
     return $string;
    }
    ?>
    View Code

    9.在目录下放uc_client文件夹。及内容。后可进行测试。

    版本测试通过define('QISHI_VERSION','3.2'),
    代码包下载地址
     
    此代码供参考,如有不能实现功能者可留言,共同研究探讨。

    注意如果74cms不能同步dzx2.5看看是不是禁止了cookie。

    转载 永不放弃

  • 相关阅读:
    caffe-ubuntu1604-gtx850m-i7-4710hq----bvlc_reference_caffenet.caffemodel
    anaconda2下面安装opencv2.4.13.4完成----解决默认安装的问题----Thefunction is not implemented. Rebuild the library with Windows, GTK+ 2.x orCarbon support. If you are on Ubuntu or Debian, install libgtk2.0‑dev and pkg
    caffe-ubuntu1604-gtx850m-i7-4710hq----VGG_ILSVRC_16_layers.caffemodel
    caffe-ubuntu1604-gtx850m-i7-4710hq----bvlc_reference_caffenet.caffemodel
    matlab中文显示乱码:控制台上的,编辑器的,图片中的
    模式识别,计算机视觉领域,期刊
    matlab2017b linux版分享
    国内开源镜像站点汇总
    condarc文件
    conda清华源 pip 清华源ubuntu 清华镜像 R代理以及包的安装
  • 原文地址:https://www.cnblogs.com/heheisme/p/2914099.html
Copyright © 2020-2023  润新知