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

大家好,上一篇咱们说了微信开发授权中的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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容