准备步骤
- 申请注册企业微信;
- 企业注册后,需要申请微信服务商 企业微信服务商官网;
PS:上述不是本章的主要内容,不做过多详解 - 进入服务商后台 应用管理–> 登录授权–>设置登录授权发起域名和授权完成回调域名,如果需要使用通讯录权限,需要这个文件放到域名对应的服务器下,如果是boot项目存放到/resources/static文件夹下即可。
开发内容
新建一个页面内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>扫码登录授权页</title>
<body>
<div id="code" ></div>
<!--用于测试我就填了两个参数-->
<a href="https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid=CORPID&redirect_uri=REDIRECT_URI">
<img src="//wwcdn.weixin.qq.com/node/wwopen/wwopenmng/style/images/independent/brand/300x40_blue$cecbbc4e.png" srcset="//wwcdn.weixin.qq.com/node/wwopen/wwopenmng/style/images/independent/brand/300x40_blue_2x$c22687e4.png 2x" alt="企业微信登录"></a>
</body>
</html>
参数说明
参数 | 必须 | 说明 |
---|---|---|
appid | 是 | 服务商的CorpID |
redirect_uri | 是 | 授权登录之后目的跳转网址,需要做urlencode处理。所在域名需要与授权完成回调域名一致 |
state | 否 | 用于企业或服务商自行校验session,防止跨域攻击 |
usertype | 否 | 支持登录的类型。admin代表管理员登录(使用微信扫码),member代表成员登录(使用企业微信扫码),默认为admin |
这样即可产生想要的二维码
扫码结束后,跳转的链接后,通过解析URL可获得一个code,通过code即可进行下一步的操作。附上通过简单的ajax请求,通过code获取登录信息。
<script>
$(function(){
var code = GetUrlParam("auth_code");
$.ajax({
url:'../getUser',
dataType:'json',
type:'get',
async:'false',
data:{code:code},
success:function(data){
$("#userName").text(data.user_info.name);
$("#userId").text(data.user_info.userid);
$("#corpId").text(data.corp_info.corpid);
$("#avatar").attr('src',data.user_info.avatar);
}
});
})
function GetUrlParam(paraName) {
var url = document.location.toString();
var arrObj = url.split("?");
if (arrObj.length > 1) {
var arrPara = arrObj[1].split("&");
var arr;
for (var i = 0; i < arrPara.length; i++) {
arr = arrPara[i].split("=");
if (arr != null && arr[0] == paraName) {
return arr[1];
}
}
return "";
}
else {
return "";
}
}
</script>
后端Controller代码:
@ResponseBody
@RequestMapping("/getUser")
public String login(@RequestParam(value = "code")String code){
String providerToken = tokenCommon.getProviderToken();
WxResponseDTO loginInfo = userCommon.getLoginInfo(code, providerToken);
//将对象封装成JSON返回页面
String rsp = JSONObject.toJSONString(loginInfo);
return rsp;
}
至此就能成功拿到登录者信息。
PS:博客做为自己工作的一个记录,也希望帮助也需要的人。第一次写,如有不足,敬请谅解!有不解也可留言哦!