Java企业微信号开发之微信网页授权和获取用户信息

本片博客降解的网页授权分为两步,一是企业微信配置的自定义菜单,点击请求后台方法,该方法接收到请求,调用回调地址。二是再回调地址获取code,userid或openid、用户信息。完成授权流程,获取用户信息

一、准备工作

1、内网穿透

由于微信是本地开发,需要本地开发测试,准备一个内网穿透,将本地127.0.0.1:端口/项目名下所在的服务穿透到外网去,以便能与微信服务器通讯,开发调试;关于内网穿透的工具有很多,详细可以查看:可以实现内网穿透的几款工具,我个人比较推荐qydev,我使用的是qydev,qydev官网地址:https://www.qydev.com/ 

1.1开通内网穿透隧道

1.2内网穿透配置

1.3启动内网穿透

 

如有有问题,可参考qydev的官方教程

2、在企业微信配置可信域名

企业微信号在使用网页授权获取用户信息,开发者需要先到企业微信号先创建应用,在应用中设置可信域名

 

3、添加可信任的域名文件

找到【设置可信域名】点击,在弹窗点击【申请校验域名】,并将文件下载下来,上传到项目的根目录,一定要保证通过域名可以直接访问到下载的文件

下载域名验证文件

将文件放入到springboot里的static目录下,如果是用tomcat启动,直接放到root目录下即可

验证域名文件是否成功,直接输入域名+文件名称,查看是否有返回结果

4、配置自定义菜单请求的路径

 

二、企业微信对接流程和业务代码

2.1、对接流程

1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页  的。用户感知的就是直接进入了回调页(往往是业务页面) 
 2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权会产生一个授权页面,需要用户手动同意,在用户同意后,就可以通过获取用户基本信息的接口获取该用户的基本信息。 如用户的openid,昵称,性别,头像,所在地等。我们需要获取用户信息,这里选择就以snsapi_userinfo为scope发起的网页授权

具体而言,网页授权流程分为四步:

1、引导用户进入业务页面(方法),在这里调用回调方法,获取code

2、通过code换取网页授权access_token

3、如果需要,开发者可以刷新网页授权access_token,避免过期

4、通过网页授权access_token和userid或openid获取用户基本信息(企业微信通讯录有改用户获取的是userid,没有则是openid)

以上4步,请详细阅读:微信网页授权官方文档,这里不再累赘

2.2、对接操作步骤

1.打开企业微信,点击工作台,找到自建的应用

2.点击配置的自定义菜单

3.点击测试的时候,调用后台Java自定义的方法【http://520.free.qydev.com/api/wechat/auth  前面测试菜单配置的连接】

    //网页授权方式查看业务方法页面
    @GetMapping("/auth")
    public String auth()  {
        log.info("进入到微信页面自定义方法地址...");
        //拼接微信网页授权地址
        String redirectURL = String.format(WxConstant.WX_CONNECT_OAUTH2_AUTHORIZE_URL, WxConstant.WX_APP_ID, URIUtil.encodeURIComponent(WxConstant.REQUEST_URL),
                WxConstant.WX_SNSAPI_BASE, StringUtils.trimToEmpty(WxConstant.WX_STATE));
        log.info("【微信网页授权】获取redirectURL,redirectURL={}", redirectURL);
        return "redirect:" + redirectURL;
    }

4.在访问的方法里,定义了回调函数

5.重定向回调函数,获取code、userid、用户详细信息

    //回调地址调用
    @RequestMapping("/userinfo")
    public String userinfo(HttpServletRequest req){
        log.info("进入到回调地址...");
        String code=req.getParameter("code");
        log.info("【回调地址】获取的code值为{}",code);
        try {
            if(!"authdeny".equals(code)){
                //拼装获取access_token的url请求
                String tokenUrl = WxConstant.WX_GET_TOKEN_URL.replace("ID", WxConstant.WX_APP_ID).replace("SECRET", WxConstant.WX_SECRENT);
                //获取访问用户身份的access_token
                String access_token =  AuthUtil.doGetJson(tokenUrl).get("access_token").toString();
                log.info("【访问用户身份access_token】,access_token={}",access_token);

                //拼装获取访问用户身份的userid的url请求
                String useridURL = WxConstant.WX_GET_USERID_URL.replace("ACCESS_TOKEN", access_token).replace("CODE", code);
                //获取访问用户身份的基本信息(如userid)
                JSONObject obj=AuthUtil.doGetJson(useridURL);
                log.info("【访问用户身份基本信息】,obj={}",obj);

                //拼装获取访问用户身份详细信息的url请求
                String userurl = WxConstant.WX_GET_USERINFO_URL.replace("ACCESS_TOKEN", access_token).replace("USERID", obj.getString("UserId"));
                //获取访问用户身份的详细信息
                JSONObject userInfo=AuthUtil.doGetJson(userurl);
                log.info("【访问用户身份详细信息】,userInfo={}",userInfo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "/index";
    }

2.3测试验证

启动springboot项目(8080端口),打开企业微信找到【测试】应用,点击【测试】菜单

你会看到在回调函数里,获取了code、userid、用户详细信息

具体代码:链接:https://pan.baidu.com/s/1AfKH5J_5bHibcPYMeUMZeQ 
提取码:gi0n 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值