1、UCenter建議使用GBK版本,原因是PHP4/5對UNICODE(UTF-8)的支持不足,分解出來的數字與其他支持UNICODE的語言不同,以至於authcode的時候將出現偏差,非拉丁文本將不匹配,即導致中文用戶名無法正常同步。但其他語言的API可以使用UTF-8,再在 authcode之前將文本轉換成GBK即可。
2、java下有一個UCenter的API,可以較方便的在Java環境下調用UCenter接口,地址是 http://code.google.com/p/discuz-ucenter-api-for-java/,創始人是ping.china。 Snow_Young也有重新開發一個API的想法,以更符合Java的開發習慣,同時希望可以找到途徑以解決UTF-8的問題。
3、登入、登出等操作的同步,使用post方式調用UCenter的API接口,如果成功,將返回一段代碼,其代碼輸出到頁面將達到跨域請求各應用,應用獲得請求後自行進行cookie或session的操作。
4、注冊等非同步操作,將不會自動進行同步操作,其他應用在調用數據前應先檢查UCenter時候存在更新信息,並將更新信息同步到自身數據庫中。例如注冊操作,如果用戶在例如Java端注冊,那麼Java端將告訴UCenter注冊信息,UCenter將信息存入UCenter數據庫中,此時將不進行同步。之後若用戶在Discuz!論壇登陸,Discuz!首先將查看自身數據庫,若沒有,再去請求UCenter獲得更新信息,並詢問用戶是否激活,待用戶確認後,才將用戶的資料寫入Discuz!論壇數據庫中。
5、關於UCenter的接口,請下載或直接在線訪問Discuz!論壇UCenter開發區置頂帖的API文檔。
6、UCenter API文檔中函數的調用方法:
integer uc_user_register(string username , string password , string email [, integer questionid , string answer])
以此為例,將函數名分解為user和register,我們可以調用UCenter的index.php,post內容為:
m : user
a : register
release : 1.5
inajax : 1(此參數若不存在,將出現一個跳轉div,僅限PHP,所以在此處隨意賦上一個值即可)
appid : 3(此為其他語言應用在UCenter中的id)
input : 將所有附加參數的鍵值對Map經過authcode之後得到的加密字符串
調用完後,此函數將返回注冊信息(是否成功、錯誤原因)的數字。然後我們這裡switch一下後采取各種策略。
7、不知是否是bug,或者是特意設計成這樣的,Discuz!新注冊用戶會自動登陸,但卻不會進行同步,即不通知其他應用,我建議還是通知一下比較好,呵呵,至少我的應用是這麼做的,用戶在我這裡注冊,然後轉到Discuz!後,已經進入待激活狀態,非常方便。
maxInteger、暫時總結這麼多,日後發現還會繼續補充,希望大家可以共同完善。