zno2

网页授权获取用户基本信息

https://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

 

这个应用是 在微信客户端中访问第三方网页时,如果想要获取用户的一些信息,可以通过这个授权方式获取。

如果不想获取用户的一些信息,则不需要授权。

 

授权分为两种:一种是静默方式(snsapi_base),另一种是需要提示用户进行点击(snsapi_userinfo )

静默方式获取的用户信息少,仅有openid

另一种方式获取的用户信息多,比如性别、昵称等

静默方式可以直接进入到业务页面,体验较好,如果事先关注过公众号,则可以用这种方式(可以用openid自行查询其他信息)

 

一个实际应用中的例子:

在微信公众号中有一个菜单,对应链接为

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc37d78660d2a1328&redirect_uri=http://wx.hehe120.com/wxplatform/menu2quickConsult.html?response_type=code&scope=snsapi_base&state=gh_045a258c1199&connect_redirect=1#wechat_redirect

 

redirect_uri 对应的就是授权回调域名

如果设置 wx.hehe120.com

是可以对下面的路径进行授权的http://wx.hehe120.com/wxplatform/

 

参数是否必须说明
appid 公众号的唯一标识
redirect_uri 授权后重定向的回调链接地址,请使用urlencode对链接进行处理
response_type 返回类型,请填写code
scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息
state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
#wechat_redirect 无论直接打开还是做页面302重定向时候,必须带此参数

实际当中的步骤

1. 点击这个菜单

2. 这个是静默授权方式,会返回一个 code 

3. 拿着这个code 和微信公众号的一些信息获取token

请求:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

响应:

{
   "access_token":"ACCESS_TOKEN",
   "expires_in":7200,
   "refresh_token":"REFRESH_TOKEN",
   "openid":"OPENID",
   "scope":"SCOPE",
   "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

 

下面这个是实际项目中如何解析出上面的结果的openid

    public static String getOpenID(SysWx sysWx, String code) {

        // 用户同意授权
        String url = WxConstants.AUTHORIZE_URI + "appid=" + sysWx.getAppId() + "&secret=" + sysWx.getSecret() + "&code="
                + code + "&grant_type=authorization_code";

        String jsonStr = HttpUtils.get(url);
        JSONObject jsonObject = null;
        try {
            jsonObject = JSONObject.fromObject(jsonStr);
        } catch (JSONException e) {
            logger.error("获取用户opendId 失败");
        }
        String openid = null;
        if (jsonObject != null && jsonObject.containsKey("openid")) {
            openid = jsonObject.getString("openid");
        }
        if (openid == null) {
            logger.error("获取微信openid 失败,null");
        } else {
            logger.info("获取微信openid:" + openid);
        }
        return openid;
    }

 

拿到openid 之后就万事大吉了!

posted on 2023-06-01 16:22  zno2  阅读(97)  评论(0编辑  收藏  举报

导航