前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信企业号登录授权Java实现获取员工userid根据userid换openid

微信企业号登录授权Java实现获取员工userid根据userid换openid

作者头像
小帅丶
发布2018-02-09 17:25:21
3.9K0
发布2018-02-09 17:25:21
举报
文章被收录于专栏:XAIXAI
微信企业号登录授权Java实现获取员工userid根据userid换openid 2016年1月8日

为了方便测试 。debug 建议大家搞个花生壳或者其他的可以映射公网IP的软件。

貌似涨价了8元一个。鄙人捡了个便宜1元买的。还是个二级域名

1.设置一个菜单调用授权接口的URL (https://open.weixin.qq.com/和这个网站的是不一样的东西)获取code

https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECTURI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect

2.写一个方法接收上图中reurl 获取code 与 access_token

代码语言:javascript
复制
    public String execute() throws Exception {
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        String code = request.getParameter("code");
        if(!"authdeny".equals(code)){
            String access_token =  WeixinUtil.getAccessToken(您的企业号corpId,您的企业号secret).getToken();
            String UserID = oAuth2Service.getUserID(access_token, code, "2"); //第3步
            request.setAttribute("UserId", UserID);
        }
        request.getRequestDispatcher("/index.jsp").forward(request,response);
        return null;
    }

3.getUserID获取员工userid 这个id并不是用户openid 

如果第二次请求失败了。看看请求的URL是不是有static修饰

微信企业号获取用户信息错误 {"errcode":40029,"errmsg":"invalid code"}

代码语言:javascript
复制
/**
* 获取员工信息的接口地址
**/
public  String CODE_TO_USERINFO = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE&agentid=AGENTID";


/**
     * 根据code获取成员信息
     * @param access_token 调用接口凭证
     * @param code   通过员工授权获取到的code,每次员工授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期
     * @param agentid   跳转链接时所在的企业应用ID 管理员须拥有agent的使用权限;agentid必须和跳转链接时所在的企业应用ID相同
     * */
    public  String getUserID(String access_token, String code, String agentid) {
        String UserId = "";
        CODE_TO_USERINFO = CODE_TO_USERINFO.replace("ACCESS_TOKEN", access_token).replace("CODE", code).replace("AGENTID", agentid);
        JSONObject jsonobject = WeixinUtil.httpRequest(CODE_TO_USERINFO, "GET", null);
        if (null != jsonobject) {
            UserId = jsonobject.getString("UserId");
            if (!"".equals(UserId)) {
                System.out.println("获取信息成功,o(∩_∩)o ————UserID:" + UserId);
            } else {
                int errorrcode = jsonobject.getInt("errcode");
                String errmsg = jsonobject.getString("errmsg");
                String error = "错误码:" + errorrcode + "————" + "错误信息:" + errmsg;
                log.error(error);
            }
        } else {
            log.error("获取授权失败了");
        }
        return UserId;
    }

4.再根据第2步的转发 将获取的数据传递到页面 测试是否正确

4.1 首先点击微信企业号里面有授权菜单的应用 的菜单

4.2 走第2步的Action 获取code、 access_token 换取userid 并转发到指定页面

整个过程就是这样的简单!

5.根据userid换取openid 需要第三步里面的方法。自己拼接json格式。或者直接返回第三步里面的JSONObject 测试代码的json格式是只有userid的。

代码语言:javascript
复制
/***
     * 根据userid 换取openid
     * @param access_token 根据企业号的id 和密钥得到
     * @param param 需要的json数据。{\"userid\": \"zhangsan\"}
     * @return
     */
     
     测试的数据 String param = "{\"userid\": \"zongxiaoshuai\"}";
    public  String getOpenId(String access_token,String param) {
        String OpenId = "";
        USERID_TO_OPENID = USERID_TO_OPENID.replace("ACCESS_TOKEN", access_token);
        JSONObject jsonobject = WeixinUtil.httpRequest(USERID_TO_OPENID, "GET", param);
        System.out.println(jsonobject);
        if (null != jsonobject) {
            OpenId = jsonobject.getString("openid").toString();
            if (!"".equals(OpenId)) {
                System.out.println("获取信息成功,o(∩_∩)o ————OpenId:" + OpenId);
            } else {
                int errorrcode = jsonobject.getInt("errcode");
                String errmsg = jsonobject.getString("errmsg");
                System.out.println("错误码:" + errorrcode + "————" + "错误信息:" + errmsg);
            }
        } else {
            System.out.println("获取OpenId失败了,●﹏●,自己找原因。。。");
        }
        return OpenId;
    }

正常返回

代码语言:javascript
复制
{"errcode":0,"errmsg":"ok","openid":"ov88GjwZWGL7PiFc6MLhagoNzQ94"}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
弹性公网 IP
弹性公网 IP(Elastic IP,EIP)是可以独立购买和持有,且在某个地域下固定不变的公网 IP 地址,可以与 CVM、NAT 网关、弹性网卡和高可用虚拟 IP 等云资源绑定,提供访问公网和被公网访问能力;还可与云资源的生命周期解耦合,单独进行操作;同时提供多种计费模式,您可以根据业务特点灵活选择,以降低公网成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档