Java微信公众号开发之OAuth2.0网页授权

这里记录自己爬过的微信坑。。。。

切记切记,开发之前一定仔细看官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

我这里使用的是微信公众号-测试账号,比如微信端用户确认的页面没有出来(可能是测试号必须关注,但是关注的话确认页面就出不来。。。。),但是用户信息已经获取到了。。。。

做了以后发现OAuth2.0网页授权其实很简单的,废话少说,直接上代码了:

第一步:用户触发认证地址,我这里设置到了菜单里:


菜单中的设置:

CommonButton btn21 = new CommonButton();
        btn21.setName("更多体验");
        btn21.setType("view");
        btn21.setUrl("http://1.1.1.1/wechatServer/auth");

以上只是为了触发。。。

第二步:用户同意授权,获取code

 @RequestMapping(value = "/auth")
   	@ResponseBody
   	public void GuideServlet(HttpServletRequest request,HttpServletResponse response) throws Exception {
    	 // 设置编码
    	request.setCharacterEncoding("utf-8");
    	response.setContentType("text/html;charset=utf-8");
    	response.setCharacterEncoding("utf-8");
        /**
         * 第一步:用户同意授权,获取code:https://open.weixin.qq.com/connect/oauth2/authorize
         * ?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE
         * &state=STATE#wechat_redirect
         */
        String redirect_uri = URLEncoder.encode(
                "http://1.1.1.1/wechatServer/login", "UTF-8");// 授权后重定向的回调链接地址,请使用urlencode对链接进行处理(文档要求)
        // 按照文档要求拼接访问地址
        String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="
                + GlobalParams.APPID
                + "&redirect_uri="
                + redirect_uri
                + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
        response.sendRedirect(url);// 跳转到要访问的地址
        
    }

第三步:根据code获取access_token,根据access_token获取用户信息

 @ResponseBody
	@RequestMapping(value = "/login")
	public ModelAndView login(HttpServletRequest request) throws JSONException, IOException{
    	String code = request.getParameter("code");
    	System.out.println("终于获取到CODE了:"+code);
    	 /**
         * 第三步:通过code换取网页授权access_token
         */
        // 同意授权
        if (code != null) {
            // 拼接请求地址
            String url = "https://api.weixin.qq.com/sns/oauth2/access_token?"
                    + "appid=" + GlobalParams.APPID + "&secret="
                    + GlobalParams.APPSECRET
                    + "&code=" + code
                    + "&grant_type=authorization_code";
            JSONObject json =ReadUrlUtil.readJsonFromUrl(url, "");// 拿去返回值
            System.out.println("返回信息:"+json);
            AutoWebParams autoWebParams = (AutoWebParams) JSONObject.toBean(json, AutoWebParams.class);
            /**
             * 第四步:拉取用户信息(需scope为 snsapi_userinfo)001MeAlp01IRjp1LlKkp0zPLlp0MeAl-
             */
            String url3 = "https://api.weixin.qq.com/sns/userinfo?access_token="
                    + autoWebParams.getAccess_token()
                    + "&openid="
                    + autoWebParams.getOpenid() + "&lang=zh_CN";
            JSONObject json1 =ReadUrlUtil.readJsonFromUrl(url3, "");// 拿去返回值
//            UserInfo userInfo = (UserInfo) JSONObject.toBean(json1, UserInfo.class);
//            System.out.println("用户信息:"+userInfo.toString());
            System.out.println("用户信息:"+json1);
        }

每一步的内容其实都是按照官方文档里面的步骤,挨个设置参数,然后获取请求得到返回结果。。。。。

最后需要设置接口权限表中的网页授权获取用户基本信息

这里一定注意:地址不可以以http://开头,必须包含回调地址(虽然这里写的是设置回调地址....这个坑爬了好几天),例如我的回调地址是:http://1.1.1.1/wechatServer/login,设置的地址应该是:1.1.1.1 或 1.1.1.1/wechatServer/


最后获取到的用户信息:


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值