java发送http请求调用api 实现与discuz同步登陆、注册、登出、修改密码

由于公司需要在门户网站添加论坛模块,选择使用discuz!要求第三方应用与discuz实现同步登陆注册、修改密码,查找了好多文章,又根据自己的实践,捣鼓了一个类似与中间件的api 调度服务器,仅供参考。

1、我安装的是最新的discuz 32,里面包含了ucenter

这是我下载的discuz的压缩包:

链接: https://pan.baidu.com/s/1VRhVWOJjt9sAp2rV0omVJg 密码: 53ep

解压安装discuz 就不赘述了(此处省略10000字)

2、安装完成后,然后就是通信了,配置Ucenter:

    java发送http请求调用api 实现与discuz同步登陆、注册、登出、修改密码

是否同步登陆 选择 是

是否接受消息通知  是

3、配置完成,检测此时应该通信是失败的,OK,不要着急,接下来开始配置最关键的API了!

     “discuz-ucenter-api-for-java”相关api 需要去下载一下,地址:https://code.google.com/archive/p/discuz-ucenter-api-for-java/downloads

当然不能登陆google的可以从我的分享里拿一下:

链接: https://pan.baidu.com/s/1p3PdPJfvzsGMguhHjsSJ7Q 密码: d3ck

    我用的IDEA创建的restapi,容器用的tomcat.因为java水平有限,你们可根据自己的需求去操作!

    具体配置这块,借鉴其他大神的文章,转载于:https://www.cnblogs.com/MarsCheng/p/7245292.html

java发送http请求调用api 实现与discuz同步登陆、注册、登出、修改密码

java发送http请求调用api 实现与discuz同步登陆、注册、登出、修改密码

4、之后就是写api了

同步登录代码示例:
  1. Client e = new Client();
  2. String result = e.uc_user_login("username", "password");  
  3. LinkedList rs = XMLHelper.uc_unserialize(result);
  4.  if(rs.size()>0){  
  5.  int $uid = Integer.parseInt(rs.get(0));
  6. String $username = rs.get(1);
  7. String $password = rs.get(2);
  8. String $email = rs.get(3);
  9.  if($uid > 0) {  
  10. System.out.println("登录成功");
  11. System.out.println($username);
  12.  System.out.println($password);
  13.  System.out.println($email);  
  14. String $ucsynlogin = e.uc_user_synlogin($uid);
  15. System.out.println("登录成功"+$ucsynlogin);  
  16. //本地登陆代码 //TODO ... ....  
  17. } else if($uid == -1) {  
  18. System.out.println("用户不存在,或者被删除");  
  19. } else if($uid == -2) {  
  20. System.out.println("密码错");  
  21. } else {  
  22. System.out.println("未定义");  
  23. }  
  24. }else{  
  25. System.out.println("Login failed"); System.out.println(result);  
同步注册代码示例:
  1.         String $returns = uc.uc_user_register(user.getUsername(), "***", user.getEmail());  
  2.         int $uid = Integer.parseInt($returns);  
  3.         if ($uid <= 0) {  
  4.             if ($uid == -1) {  
  5.                 System.out.print("用户名不合法");  
  6.             } else if ($uid == -2) {  
  7.                 System.out.print("包含要允许注册的词语");  
  8.             } else if ($uid == -3) {  
  9.                 System.out.print("用户名已经存在");  
  10.             } else if ($uid == -4) {  
  11.                 System.out.print("Email 格式有误");  
  12.             } else if ($uid == -5) {  
  13.                 System.out.print("Email 不允许注册");  
  14.             } else if ($uid == -6) {  
  15.                 System.out.print("该 Email 已经被注册");  
  16.             } else {  
  17.                 System.out.print("未定义");  
  18.             }  
  19.         } else {  
  20.             System.out.println("OK:" + $returns);  
  21.         }

差不多就这意思吧!

修改密码:

java发送http请求调用api 实现与discuz同步登陆、注册、登出、修改密码

算了我这人太懒了,直接看我的分享吧:

链接: https://pan.baidu.com/s/15KLf8fp7PIhdLDEXFngBjA 密码: n6x1


对了通信成功后,还有一些需要注意的

1是在同步登录时返回的结果$ucsynlogin中,是一串包含两个script标签的字符串,需要先执行一下第一个script标签中的src之后才能同步登录成功,否则失败,原因是这段代码是为了向Discuz论坛里写入登录信息,至于以什么样的方式执行需要自己定义,我是直接解析到这段字符串到前台页面执行。
2是同步注册后的用户并没有直接添加到用户表了,而是需要用新注册的用户登录一下论坛进行一下**才能使用,可以通过修改UCenter的配置来解决这个问题,用管理员登录论坛进入管理中心选择站长选项,选择UCenter设置是否允许其他应用的会员在站点**:和是否允许直接**都选择是,然后提交就行。

看一下接口的截图啊(还是截图快,简单方便):

java发送http请求调用api 实现与discuz同步登陆、注册、登出、修改密码


太累了!反正就这样了~~~~~