discuz社区与java web的钉钉手机版整合(二)

来源:互联网 发布:surge for mac 破解 编辑:程序博客网 时间:2024/05/01 21:25

上一篇讲到如何绕开discuz的登录验证,使得在url传一个username的账号就可以自动登录。这篇主要讲的是钉钉的免登陆,由于官方网都有所以,一开始的在钉钉增加添加微应用这个就省略了。

这里有一个前提:即本来的系统(我公司的是erp系统)已经与钉钉整合了,即钉钉已经可以获取erp系统当前的登录账号。至于怎样弄,先忽略。

现在假设登录钉钉后就能通过钉钉接口获取登录账号,discuz属于第三个整合的系统。

总步骤:

1.在钉钉开通微应用(参考官方网站)

2.获取原来erp系统(javaweb系统)中coreID和corpSecret的值();注意:不是discuz的值


3.下载js-api免登陆的例子程序(钉钉官方的开发文档中有链接),解压,放在主机网站跟目录里面。

4.打开env.php,添加coreid和secret的值,这个值在前面可以获取,然后通过url访问,会发现可以运行:

[html] view plain copy
  1. define("CORPID", "dingb1694cc632dd706c");  
  2. define("SECRET", "g3rf9IV26TEH7VbkrSnhM04ZM-4azaFTI7FgKL2Obl2sC7iyBJPWi4aLUp9KDVs3");  
[html] view plain copy
  1. <span style="color:#ff0000;">注意:这个是需要php5.4才支持,5.3也能支持,前提是熟悉php版本特性,会根据版本的不同修改一些函数。</span>  
5.打开jsapi.php中的文件,发现引入了demo.js,免登陆需要用到这个js的 dd.runtime.permission.requestAuthCode()函数。修改函数如下:

[html] view plain copy
  1. dd.runtime.permission.requestAuthCode({  
  2.         corpId: _config.corpId,  
  3.         onSuccess: function (info) {  
  4.             //logger.i('authcode: ' + info.code);  
  5.             //alert("11"+ROOT_URL);  
  6.             window.location=ROOT_URL+"/userinfo.php?code=" + info.code;   
  7.               
  8.             /*  
  9.             $.ajax({  
  10.                 url: '/userinfo.php?code=' + info.code,  
  11.                 type: 'GET',  
  12.                 success: function (data, status, xhr) {  
  13.                  alert("3");  
  14.                     var info = JSON.parse(JSON.parse(data));  
  15.                     if (info.errcode === 0) {  
  16.                         logger.i('user id: ' + info.userid);  
  17.                     }  
  18.                     else {  
  19.                         logger.e('auth error: ' + data);  
  20.                     }  
  21.                 },  
  22.                 error: function (xhr, errorType, error) {  
  23.                     logger.e(errorType + ', ' + error);  
  24.                 }  
  25.                   
  26.                   
  27.             });*/  
  28.         },  
  29.         onFail: function (err) {  
  30.             //logger.e('fail: ' + JSON.stringify(err));  
  31.         }  
  32.     });  
  33. });  

6. 然后打开userinfo.php,会发现打印出json格式$userinfo.(如果出错,把php5.4高版本的json_encode(long,long)改成json_encode(onject)),这里回忆一下php的json处理函数json_encode($userInfo);这是把array对象en成json对象,json_decode()是把json对象转换成java对象。把$user = json_decode($userInfo,true);,然后用数组形式获取userid的值即可。

7.构建访问discuz论坛的免登陆路径,然后重定向:

[html] view plain copy
  1. $url = "http://192.168.203.199:8001/forum/member.php?mod=logging&action=login&app=ding&ding_username=".$user['userid'];   
  2. //echo "<script type=\"text/javascript\">alert(\"".$url."\") </script>";  
  3. echo "<script type=\"text/javascript\">window.location=\"".$url."\"</script>";  
8.注意可以访问但是不能登录的原因:可能是因为论坛本身还没有该erp系统或者钉钉提供的userid账号。
0 0
原创粉丝点击