美文网首页程序员微信开发运营
微信 公众平台 开发(授权二)

微信 公众平台 开发(授权二)

作者: 瑶瑶小仙女 | 来源:发表于2017-02-27 21:35 被阅读281次

    大家好,上一篇咱们说了微信开发授权中的snsapi_base授权方式,这种方式呢只能是获取到用户的openId,openId是一个用户关注微信公众号之后的唯一标识,有了这个标识用户就会收到公众号推送过来的消息。但是需要展示用户昵称,头像等的更多的用户信息,就需要另外一种授权方式:snsapi_userInfo。这种方式需要用户点击授权页进行授权,用户点击授权页确认之后才能得到用户的死人信息。我们今天就来看一下用户的snsapi_userInfo授权方式。
    1.第一步还是需要配置服务器配置,就是那个回调的Url。
    2.在微信页打开授权连接,但是那个授权连接里面的一个参数scope就是需要snsapi_userInfo方式,进行授权。
    3.咱们在请求微信的api获取openId和access_token。
    4.根据openId和access_token获取微信用户的头像和昵称等信息。
    到此授权认证完毕。咱们来看一下代码实现。
    在上一篇中我们获取到了code,并且微信服务器也回调了我们的服务器地址,我们就可以获取到open_id和access_token,当然还有其他的参数其中之一就是refresh_token,这个参数看名字就知道意思了,他是用在更新咱们刚才得到的Access_token,因为access_token只有2个小时的有效期,2小时过之后就失效了,但是这个refresh_token有效期是 7天、30天、60天、90天,可以直接使用refresh_token刷新Access_token,具体的代码就是:

        /**
         * 根据refresh_token刷新access_token
         *
         * @param RefreshToken
         * @param weChatAppId
         * @param grantType
         * @return
         */
        private static final String REFRESH_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=%s&grant_type=%s&refresh_token=%s";
    
        public RefreshToken refreshAuthToken(String refresh, String weChatAppId, String grantType) {
            String url = String.format(REFRESH_TOKEN_URL, weChatAppId, grantType, refresh);
    
            RefreshToken refreshToken = null;
            try {
                LOGGER.info("根据refresh_token刷新access_token请求Url:{}", url);
                String result = HttpClientUtils.sendHttpGet(url);
                LOGGER.info("根据refresh_token刷新access_token,返回值:{}", result);
                refreshToken = GsonHolder.getGson().fromJson(refresh, RefreshToken.class);
            } catch (Exception ex) {
                LOGGER.error("根据refresh_token刷新access_token异常:", ex);
            }
            return refreshToken;
        }
    

    其中的参数就是weChatAppId:咱们公众服务号APPID,grantType是一个写死的值:refresh_token。refresh就是咱们在微信服务器回调之后获取到的值refresh_token。调用这个接口就会刷新access_token:

        @SerializedName("access_token")
        private String accessToken;
        @SerializedName("expires_in")
        private int expiresIn;
        @SerializedName("refresh_token")
        private String refreshToken;
        @SerializedName("openid")
        private String openId;
        private String scope;
    
    

    咱们得到了这个access_token之后来看一下怎么获取用户的昵称,头像等信息。
    还是老套路就是调用微信的API,都是微信的API.

        /**
         * 获取用户 头像,昵称 等信息
         */
        private static String WE_CHAT_USER_INFO = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=%s";
    
        WeChatUserInfo getWeChatUserInfo(String openId, String access_token, String responseLanguage) {
    
            String url = String.format(WE_CHAT_USER_INFO, access_token, openId, responseLanguage);
            WeChatUserInfo userInfo = null;
            try {
                LOGGER.info("查询用户所有详细信息请求url:{}", url);
                String result = HttpClientUtils.sendHttpGet(url);
                LOGGER.info("查询用户详细信息返回结果:{}", result);
                userInfo = GsonHolder.getGson().fromJson(result, WeChatUserInfo.class);
            } catch (Exception ex) {
                LOGGER.error("查询用户详细信息异常", ex);
            }
            return userInfo;
        }
    

    参数说明:openID就是咱们获取到的用户的唯一标示。access_token就是上一步获取的。responseLanguage就是返回的是那种语言,有简体和繁体等:zh_CN 简体,zh_TW 繁体,en 英语,咱们在大陆就使用简体就可以了。返回值在贴一下:

        @SerializedName("openid")
        private String openId;
        @SerializedName("nickname")
        private String nikeName;
        private int sex;
        private String province;
        private String city;
        private String country;
        @SerializedName("headimgurl")
        private String headimgUrl;
        private List<String> privilege;
        @SerializedName("unionid")
        private String unionId;
    

    通过字面意思就可以看懂这些返回值得意思了,头像啊,昵称,性别省份,城市等等,这些信息你拿到只有开发起来就可以更加人性化,服务化。好了接着上一篇的snsapi_base方式只能得到openId不同snsapi_userinfo方式得到的更多更全的信息。好了咱们今天就说微信的授权就完结了,大家可以自己开发试试,但是前提得有服务号哈,一般的订阅号是不能开发这些的。
    下一期咱们开始素材方面的整理,图文素材啊,模板消息等等。大家一起讨论学习。
    我们的文章集在:CodeInventor

    相关文章

      网友评论

        本文标题:微信 公众平台 开发(授权二)

        本文链接:https://www.haomeiwen.com/subject/ilmowttx.html