uc.php介面調試,ucenter整合對接自己的系統的方法及Authracation has expiried原因

來源:互聯網
上載者:User

特別注意,整合前,一定要進dz論壇的後台-----站長----ucenter設定,把免啟用設定下,否則,你在測試向論壇同步註冊並登入時,可能會一直登入不成功.又找不到原因.

一,關於從論壇向你的網站中同步.

我們的系統,比如織夢系統,如果要接收來自論壇等其它系統發來的會員資訊,並同步登入或註冊,就需要我們的系統中有一個介面, 

這個介面就是本系統根目錄中的api/uc.php,他是ucenter與我們的系統通訊的核心檔案.

如果要調試,比如你們的系統網址為 www.123.com 那麼,www.123.com/api/uc.php ,這個開啟,就可以調試了.

但是uc.php檔案需要注釋掉一些資訊,才方法調試.

uc.php的上面,通常有這麼一段.

 

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', 'DELETE user', '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);}


 有這一段,顯示沒法調試.

 

我們可以把他簡化為下面這種,就可以直接存取uc進行調試了.注意先備份原檔案

 

 

if(!defined('IN_UC')) {defined('MAGIC_QUOTES_GPC') || define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());$DBModel = new db_model();$get = $post = array();$get['uid']=2;//uc伺服器發來get請求,使用者id       $get['username']='121212';//假如這是發來的使用者名稱    $get['email']='1@163.com';//郵箱include_once DISCUZ_ROOT.'./uc_client/lib/xml.class.php';$post = xml_unserialize(file_get_contents('php://input')); $uc_note = new uc_note(); //去掉參數.並$get['action']修改為上面的任何一個.比如test,deleteuser,然後重新整理uc.php就可以直接存取api/uc.php來測試了,比如echo $uc_note->synlogout($get, $post);       //或echo $uc_note->synlogin($get, $post);exit();} else {exit;}

 

另外,uc.php裡面的代碼,即恢複後,進行實際部署時,可能會遇到一些小錯誤.

 

 

if(!defined('IN_UC')) {

//這是你上面簡化的代碼需要恢複成原來的.

}

 

,在實際測試具體的登入效果時,可能會出現這種錯誤,Authracation has expiried

出現這個原因一般是本應用中的api/uc.php 沒有get到對方應用或論壇的uc_client發過來的資料.具體可以查看對方應用的\uc_client\data\cache\apps.php 這個檔案.開啟看下裡面有幾個應用.如果只有論壇這一個應用.沒 有你的系統對應的應用,那麼,就算是後台提示通訊成功.依然沒法從論壇同步到你的網站中.裡面的內容應該是類似這樣的,才正常

 

<?php$_CACHE['apps'] = array (  1 =>   array (    'appid' => '1',//這是裡論壇應用.如果只有這一個,則沒法同步登入    'type' => 'DISCUZX',    'name' => 'Discuz! Board',    'url' => 'http://www.discuz2.com',    'ip' => '',    'viewprourl' => '',    'apifilename' => 'uc.php',    'charset' => '',    'dbcharset' => '',    'synlogin' => '1',    'recvnote' => '1',    'extra' => false,    'tagtemplates' => '',    'allowips' => '',  ),    2=>   array (    'appid' => '2',//另一個應用,這裡是你的網站應用程式id,在uc後台查看    'type' => '其它',    'name' => '另一個應用網站',    'url' => 'http://www.viq.com',//你的網站首頁網址    'ip' => '',    'viewprourl' => '',    'apifilename' => 'uc.php',    'charset' => '',    'dbcharset' => '',    'synlogin' => '1',//1表示自動登入功能開啟    'recvnote' => '1',    'extra' => false,    'tagtemplates' => '',    'allowips' => '',  ),);?>

 

 

 

 

 

如果這裡存在你的應用,還是沒法把會員同步到本地系統中,則可以這樣調試.

1,先用對方應用測試網址,比如是你的論壇的網址進行登入測試,假如是 www.234.com,那麼,

先修改論壇目錄中的,這個檔案,\uc_client\client.php  找到uc_user_synlogin 函數,在return $return;的前面增加這一句print_r($return);exit;

然後

開啟,

www.234567.com/member.php?mod=logging&action=login ,則直接開啟上面的這個地址,如果開啟的是空白.右右鍵查看源碼,就能看到返回同步登入代碼了.代碼可能是這樣的

 

<script type="text/javascript" src="http://www.viq.com/api/uc.php?
time=1473493067&cFZXnemDwjNj1UQRQgARt5bqUMwCp38i5Myk6g" 
reload="1"></script>


然後找到src=""裡面的網址,直接開啟,就能看到uc.php 中提示的內容

 

如果沒有內容.可以注釋掉uc.php中的error_reporting(0); 

並且在下面這個代碼的下面增加一個輸出列印功能,即print_r($get);exit; 效果如下

 

if(MAGIC_QUOTES_GPC) { $get = _stripslashes($get);}
print_r($get);exit;

 

 

 

 二,從你的網站應用程式向uc及discuz論壇同步時,怎麼測試.

一個簡單方法是,在你的應該的根目錄中,建立一個test.php檔案,裡面的內容為

使用者名稱及密碼為121212 這個是你事先註冊好的.可以直接測試登入問題.用你的網域名稱運行/test.php後右鍵查看源碼,就以看到應用測試網站,直接開啟,就能在論壇的/api/uc.php中列印結果調試

<?phprequire_once('root/config/uc.php');//這是從ucenter中複製的資料庫連接配置 require_once 'uc_client/client.php';//這個是本網站應該中的uc用戶端  list($status_id, $uc_username, $uc_password, $uc_email) = uc_user_login(121212,121212 , 0);//0,使用者名稱登入uc if($status_id>=1){//成功登入uc                                   echo $synlogin=uc_user_synlogin($status_id);//同步登入其它應用//var_dump(uc_user_synlogin($status_id));exit;//print_r(uc_user_synlogin($status_id));exit;                    //$this->jump(-1);//成功,跳轉     } if($status_id==-2){ //echo 'uc密碼錯誤,建議修改';                    print_r(-2);exit;                }if($status_id==-1){//uc中使用者名稱不存在,則插入uc,並更新ucid                   print_r(-1);exit;                           }  /* End of file index.php *//* Location: ./index.php */


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.