微信网页授权访问实现方式,根据授权获取微信openid_新维护

基于很多年前才开始研究微信公众号的时候写的微信鉴权,现在重新补一版本

1.引入微信API开发工具包

gradle:引入

compile group: 'com.github.binarywang', name: 'weixin-java-mp', version: '3.2.0'

这个是开源的微信开发工具包,封装了很多api,如果没有的接口也可以调用其get()和post()方法自己传url调用,此框架最大的好处是,调用接口只传入微信appid,开发工具包自动缓存了

token信息,不用本地缓存。

举例:网页授权的url组装

/**
     * 微信获取基本信息url
     * 时间:2018/8/10
     *
     * @param
     * @param
     * @return
     */
    @GetMapping(value = "/getInfo/{appid}")
    public ModelAndView createUrl(@PathVariable final String appid) {
        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        String url = "";
        try {
            if (servletRequestAttributes != null) {
                url = WxMpConfiguration.getMpServices().get(appid).oauth2buildAuthorizationUrl(String.format("%s/wx/redirect/%s/greet", redirectUrl, appid), WxConsts.OAuth2Scope.SNSAPI_USERINFO, System.currentTimeMillis() + "");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ModelAndView("redirect:" + url);

    }

菜单直接调用该方法,只需传入appid,主要是学会调用微信工具组装url的方法,所有的方法都是WxMpConfiguration.getMpServices().get(appid)的WxMpService接口开始调用的,比如组装网页授权地址就调用oauth2buildAuthorizationUrl(String redirectURI, String scope, String state)方法返回网页授权地址,此方法返回的url微信会向重定向的地址接口拼装code参数作为验证。本文跳转地址如下:

获取用户openid和昵称

@GetMapping("/greet")
    public void greetUser(@PathVariable final String appid, String code) {
        try {
            logger.info("重定向code:" + code);
            if (StringUtils.isBlank(code)) {
                logger.info("重定向code为null");
                return;
            }
            WxMpService mpService = WxMpConfiguration.getMpServices().get(appid);
            //获取token
            WxMpOAuth2AccessToken accessToken = mpService.oauth2getAccessToken(code);
            //获取用户信息包括openid
            WxMpUser user = mpService.oauth2getUserInfo(accessToken, null);

            logger.info("用户的openid:{}",user.getOpenId());
            logger.info("用户的昵称:{}",user.getNickname());

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

总结:微信用户鉴权到此结束,还要小程序,微信企业号,欢迎咨询探讨。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值