UCenter与其他语言的整合经验归纳

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、暂时总结这么多,日后发现还会继续补充,希望大家可以共同完善。

你可能感兴趣的:(PHP,Google)