特別注意,整合前,一定要進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 */