1、授权回调页面域名设置:

​ 1、在微信公众号管理平台首页中,点击左边导航栏:"设置" ---> "公众号设置" --->"功能设置"。
​ 2、点击网页授权域名给栏的设置按钮,进行域名设置
​ 3、此时会提示用户下载一个txt文件。将其下载后上传到服务器指定的位置,能通过url直接进行访问,让微信服务器可以访问进行字符串对比校验即可,配置成功。
​ 4、微信客户端网页开发的授权中,有两种授权范围:
​ 1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
​ 2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
​ 3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。

2、获取OpenId:

1、构造一个uri,例如:

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

2、其中需要改变的就是redirect_uri,重定向到我们自己的h5页面。以及appid

3、如果用户同意授权,那么页面就会跳转到自定义的uri,code的有限期只有5分钟

4、请求这个uri后,wx服务器端会返回一个code参数,重定向跳转到之前的自己配置的redirect_url中

5、根据code获取OpeanId的工具类

//发送请求,根据code获取openId
//code参数为上一步获得的code
//String code = request.getParaneter("code")
    public String getOpenId(HttpServletRequest request, HttpServletResponse response,String code) {
        
        String content = "";
        String openId = "";
        String unionId = "";
        //封装获取openId的微信API
        StringBuffer url = new StringBuffer();
        url.append("https://api.weixin.qq.com/sns/oauth2/access_token?appid=")
        .append(Constants.APPID)
        .append("&secret=")
        .append(Constants.APPSECRET)
        .append("&code=")
        .append(code)
        .append("&grant_type=authorization_code");
        
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            content = HttpClient.requestGet(url.toString());
            Map map = objectMapper.readValue(content, Map.class);
            openId = String.valueOf(map.get("openid"));
            unionId = String.valueOf(map.get("unionid"));
            
            log.info("获取的openID:" + openId);
            /*
             * 将openId保存到session中,当其他业务获取openId时,
             * 可先从session中获取openId.
             */
            //request.getSession().setAttribute("openId", openId);
        } catch (JsonParseException e) {
            log.error("json解析失败:", e);
        } catch (JsonMappingException e) {
            log.error("map转换成json失败:", e);
        } catch (Exception e) {
            log.error("http获取openId请求失败:", e);
        }
        return openId;
    }

3、判断用户是否关注公众号

1、首先需要获取全局的access_token

(access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效)

请求地址(GET请求):

 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

需要自己填写appid以及secrect

2、获取到access_token之后,就可以拿着access_token和第二步中获得的该用户的OpenId进行获取用户信息的操作

3、获取用户信息的时候,通过GET请求的方式,

https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

将access_token和该用户的openId构造进去,就能获得相应的Json字符串

{
    "subscribe": 1, 
    "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M", 
    "nickname": "Band", 
    "sex": 1, 
    "language": "zh_CN", 
    "city": "广州", 
    "province": "广东", 
    "country": "中国", 
    "headimgurl":"http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
    "subscribe_time": 1382694957,
    "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
    "remark": "",
    "groupid": 0,
    "tagid_list":[128,2],
    "subscribe_scene": "ADD_SCENE_QR_CODE",
    "qr_scene": 98765,
    "qr_scene_str": ""
}

参数说明:

参数说明
subscribe用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
openid用户的标识,对当前公众号唯一
nickname用户的昵称
sex用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
city用户所在城市
country用户所在国家
province用户所在省份
language用户的语言,简体中文为zh_CN
headimgurl用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
subscribe_time用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
unionid只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
remark公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注
groupid用户所在的分组ID(兼容旧的用户分组接口)
tagid_list用户被打上的标签ID列表
subscribe_scene返回用户关注的渠道来源,ADD_SCENE_SEARCH 公众号搜索,ADD_SCENE_ACCOUNT_MIGRATION 公众号迁移,ADD_SCENE_PROFILE_CARD 名片分享,ADD_SCENE_QR_CODE 扫描二维码,ADD_SCENE_PROFILE_LINK 图文页内名称点击,ADD_SCENE_PROFILE_ITEM 图文页右上角菜单,ADD_SCENE_PAID 支付后关注,ADD_SCENE_WECHAT_ADVERTISEMENT 微信广告,ADD_SCENE_OTHERS 其他
qr_scene二维码扫码场景(开发者自定义)
qr_scene_str二维码扫码场景描述(开发者自定义)

Q.E.D.


Hello welcome to my blog