Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
api
com.fivestars.interfaces.bbs.api.UC
2
api
/api/uc.php
4:配置config.properties
PHP
1
2
3
4
5
UC_API = http://localhost/discuz/uc_server
UC_IP =
UC_KEY =x2ydu036Ubtf55gfyf2bR7Mc62v2a7J7rcrdA9Ncx259B323wegb87P5l7CaYd34
UC_APPID = 2
UC_CONNECT =
UC_API就是ucenter的路径
UC_IP可以不填,会自动根据域名解析该IP
UC_KEY就是通讯密钥
UC_APPID就是ucenter添加应用的ID
配好就可以,通讯就应该成功了.
如果不成功,请添加ip.还有注意config.properties的路径,我是自己修改了名字和路径..修改路径的话记得去Client.java里修改路径,因为它这里会读取config.properties
接下来就是关于discuz-api-for-java的一些api
1:同步注册
Java
1
2
3
4
5
6
7
8
9
10
11
Client discuzClient = new Client();
discuzClient.uc_user_register("zhangsan","password","zouhao619@gmail.com");
/**
-1 : 用户名不合法
-2 : 包含不允许注册的词语
-3 : 用户名已经存在
-4 : email 格式有误
-5 : email 不允许注册
-6 : 该 email 已经被注册
>1 : 表示成功,数值为 UID
*/
2:同步登陆
Java
1
2
3
4
5
6
Client discuzClient = new Client();
String loginResult = discuzClient.uc_user_login("zhangsan","password");//根据账户密码获取用户相关信息
LinkedList userInfo=XMLHelper.uc_unserialize(loginResult);
uid=Integer.valueOf(userInfo.get(0));//获取用户的ID
String $ucsynlogin = discuzClient.uc_user_synlogin(uid);//根据ID进行同步登陆
response.getWriter().print($ucsynlogin);//把$ucsynlogin输出到页面上就行了.这样就实现了同步登陆,实际上就是一个script标签可以进行跨域的功能
注意事项:
1:ucenter->注册设置->是否允许同一个email注册多个用户根据自己的实际情况来决定
2:同步注册后,需要到discuz登录一次,才能实现同步登录.如果进行同步注册后,账户没有登录,那么也无法实现同步登录,如果你要实现同步注册后,就能登录.就修改uc_server/model/user.php第129行左右的add_user($username, $password, $email, $uid = 0, $questionid = ”, $answer = ”, $regip = ”)方法
修改为如下内容:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function add_user($username, $password, $email, $uid = 0, $questionid = '', $answer = '', $regip = '') {
$regip = empty($regip) ? $this->base->onlineip : $regip;
$salt = substr(uniqid(rand()), -6);
$password = md5(md5($password).$salt);
$sqladd = $uid ? "uid='".intval($uid)."'," : '';
$sqladd .= $questionid > 0 ? " secques='".$this->quescrypt($questionid, $answer)."'," : " secques='',";
$this->db->query("INSERT INTO ".UC_DBTABLEPRE."members SET $sqladd username='$username', password='$password', email='$email', regip='$regip', regdate='".$this->base->time."', salt='$salt'");
$uid = $this->db->insert_id();
$this->db->query("INSERT INTO ".UC_DBTABLEPRE."memberfields SET uid='$uid'");
//begin
$this->db->query("INSERT INTO `discuz`.dz_common_member SET uid='$uid', username='$username', password='$password', email='$email', adminid='0', groupid='10', regdate='".$this->base->time."', credits='0', timeoffset='9999'");
$this->db->query("INSERT INTO `discuz`.dz_common_member_status SET uid='$uid', regip='$regip', lastip='$regip', lastvisit='".$this->base->time."', lastactivity='".$this->base->time."', lastpost='0', lastsendmail='0'");
$this->db->query("INSERT INTO `discuz`.dz_common_member_profile SET uid='$uid'");
$this->db->query("INSERT INTO `discuz`.dz_common_member_field_forum SET uid='$uid'");
$this->db->query("INSERT INTO `discuz`.dz_common_member_field_home SET uid='$uid'");
$this->db->query("INSERT INTO `discuz`.dz_common_member_count SET uid='$uid', extcredits1='0', extcredits2='0', extcredits3='0', extcredits4='0', extcredits5='0', extcredits6='0', extcredits7='0', extcredits8='0'");
//end
return $uid;
}
在添加到ucenter的同时添加到discuz表中.
3:如果你要实现同步登录,在页面输出discuzClient.uc_user_synlogin(uid),他其实是一段script,用来跨域访问的.但是有可能由于网络原因,你还没有发出这个请求,你就先跳转页面了.所以造成无法同步登录.
我用的方法是,用jquery.$.script()方法来加载这个js,由于是跨域,$.script()无法有返回,这个时候需要在php服务器端设置
PHP
1
header("Access-Control-Allow-Origin:*"); //允许任何访问(包括ajax跨域)
详细代码如下:
JavaScript
1
2
3
4
5
6
7
$(function(){
$.getScript('script的目标url', function(){
location.href='bbs路径';
});
});
确定执行完了这个js同步登录后,在执行location进行跳转