admin管理员组

文章数量:1558087

前言

  本文主要实现目的目标需求为:企业微信网页授权登录
  借鉴于:企业微信官方文档网页授权登录

概述

  企业微信提供了 OAuth 的授权登录方式,可以让从企业微信终端打开的网页获取成员的身份信息,从而免去登录的环节。
  企业应用中的 URL 链接(包括自定义菜单或者消息中的链接),均可通过 OAuth2.0 验证接口来获取成员的 UserId 身份信息。

使用前说明

  关于配置可信域名可以参考我的第一篇文章:企业微信开发:自建应用配置可信域名

OAuth2.0接入流程说明

请求连接:

https://open.weixin.qq/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&agentid=AGENTID&state=STATE#wechat_redirect

参数说明:
参数必须说明
appid企业的CorpID
redirect_uri授权后重定向的回调链接地址,请使用 urlencode 对链接进行处理
response_type返回类型,此时固定为:code
scope应用授权作用域。
snsapi_base:静默授权,可获取成员的的基础信息(UserId与DeviceId);
snsapi_userinfo:静默授权,可获取成员的详细信息,但不包含手机、邮箱;
snsapi_privateinfo:手动授权,可获取成员的详细信息,包含手机、邮箱
注意:企业自建应用可以根据userid获取成员详情,无需使用snsapi_userinfo和snsapi_privateinfo两种scope。
agentid企业应用的id。
当scope是snsapi_userinfo或snsapi_privateinfo时,该参数必填
注意redirect_uri的域名必须与该应用的可信域名一致。
state重定向后会带上state参数,企业可以填写a-zA-Z0-9的参数值,长度不可超过128个字节
#wechat_redirect终端使用此参数判断是否需要带上身份信息
注意事项:

  跳转的域名须完全匹配 access_token 对应应用的可信域名,否则会返回 50001 错误

代码片段

  获取 code 信息,也就是我们登录是需要调用的方法,例如:http://localhost:端口号/项目名称/oauth2

// 定义变量
private String CORPID = "xxxxxx";

/*企业微信 oauth2 认证*/
@RequestMapping("/oauth2")
public void oauth2(HttpServletResponse response) throws IOException {
    String url = Oauth2API.getOauth2Url(CORPID);
    //重定向请求
    response.sendRedirect(url);
    return;
}

  工具类:对应上方 getOauth2Url 方法

/**
 * @ClassName:Oauth2 API
 * @Description:TODO
 * @Author LinLuoChen
 * @Date 2020/8/13/15:55
 * @Version V1.0
 **/
public class Oauth2API {
    // 获取 oauth2 API
    private final static String qy_oauth2_url = "https://open.weixin.qq/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE#wechat_redirect";

    // 获取 oauth2 API
    public static String getOauth2Url(String CORPID){
    	// 替换回调地址
        return qy_oauth2_url.replaceAll("CORPID", CORPID).replace("REDIRECT_URI","跳转到你配置的可信域名的地方").replace("SCOPE","snsapi_base");
    }
}

  回调方法:执行成功之后回调条转的地址,用来接收 code 值

/*企业微信进入回调*/
@RequestMapping("/getUserCode")
public String getUserCode(HttpServletRequest request, HttpServletResponse response, HttpSession session, Model model) throws IOException, WxErrorException {
    // 获取 Code 值
    String code = request.getParameter("code");
}

  这样就可以成功的拿到我们的 code 参数了

本文标签: 网页企业