必威体育Betway必威体育官网
当前位置:首页 > IT技术

微信公众号网页授权登录

时间:2019-06-14 11:41:04来源:IT技术作者:seo实验室小编阅读:93次「手机版」
 

微信公众平台登录页

微信公众网页授权登录:

前段时间做了一个微信公众号项目,就是微信公众号的菜单点击我的个人中心,就向用户授权登录

获取用户的信息,进行业务逻辑的操作,微信公众号官方文档,这是我写的文章,里面有很多微信的官方

文档,希望对大家有用:https://blog.csdn.net/qq_41971087/article/details/82466647

在微信公众号官方文档中,看到微信页面开发

这里写图片描述

点击微信网页授权,这里大家一定要仔细的去观看文档中的关于网页授权回调域名的说明

关于网页授权的两种scope的区别说明,关于网页授权access_token和普通access_token的区别

关于特殊场景下的静默授权,这里有些是需要在微信公众平台后台去配置路径,一定要仔细的去看文档,

还有就是微信公众号的页面放的路径,大家一定要去仔细的观看文档,不然会出现微信公众号,找不到页面

的问题,这里很重要,不然后面获取微信用户信息的接口会很吃力

这里写图片描述

当我们点击公众中的个人中心时,我们就调起微信公众号的授权登录,进行接口登录操作,当我们拿到用户信息,就

跳转到页面中,并且把用户的信息展示到页面中,在进行项目的业务操作,让我们用java实现这个功能:

首先创建菜单时,类型使用view代码实例如果有不会微信公众号创建菜单的请查看我的文章:

https://blog.csdn.net/qq_41971087/article/details/82499501

这里写图片描述

注意,这个接口是跳转到是我们controller层的业务接口出来最好是在线上去开发,测试这个功能,下面是Mvc的接口:

WXLoginController.java:

/**

* 微信公众号网页授权登录:

* @param request

* @param response

* @return

* @throws ParseException

*/

@RequestMAPPing(value = “/wxLoginss”, method = RequestMethod.GET)

public String wxLogin(HttpServletRequest request,HttpServletResponse response) throws ParseException {

    // 第一步:用户同意授权,获取code
    //WXAuthUtil.APPID 微信公众号的appenid 这个是微信公众号后台获取的
    String url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+WXAuthUtil.APPID
            + "&redirect_uri="+URLEncoder.encode("https://xxxxx/xxxxx/callBackss.do") //这个是我们回调的地址 在这里进行出来获取到用户的心
            + "&response_type=code"
            + "&scope=snsapi_userinfo"
            + "&state=123#wechat_redirect";

    logger.info("--forward重定向地址-------:" + url);
    return "redirect:"+url;//必须重定向,否则不能成功
}

/**

* 微信网页登录回调接口

* @param wechatUser

* @param modelMap

* @param req

* @param resp

* @return

* @throws ServletException

* @throws IOException

*/

@RequestMapping(value = “/callBackss”, method = RequestMethod.GET)

public String callBack(ModelMap modelMap,HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    //如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE
    //https://xxxxx/xxxxx/callBackss.do?code=CODE&state=STATE 
    //获取code  code作为换取access_token的票据
    String code =req.getparameter("code");
    System.out.println("授权返回code信息---------:"+code);
  //第二步:通过code换取网页授权access_token (获取openid接口)
    //WXAuthUtil.APPID 公众号的Appid
    //WXAuthUtil.APPSECRET 公众号的APPSECRET 可以在微信公众号后台获取
     String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+WXAuthUtil.APPID
            + "&secret="+WXAuthUtil.APPSECRET
            + "&code="+code
            + "&grant_type=authorization_code";

     //发送请求 get提交 拿code凭证去获取openid和access_token
    jsonobject jsonObject = WXAuthUtil.doGetJson(url);

    String openid = jsonObject.getString("openid");
    String access_token = jsonObject.getString("access_token");
    String refresh_token = jsonObject.getString("refresh_token");

    //拿到用户openid 和access_token 去获取用户信息
    //第五步,验证access_token是否过期
    String chickUrl="https://api.weixin.qq.com/sns/auth?access_token="+access_token+"&openid="+openid; 
    JSONObject chickuserInfo = WXAuthUtil.doGetJson(chickUrl);

    //由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权
    //如果发送错误,就有可能是access_token过期了 errcode 的值是 0 那么就是没有问题,access_token没有过期,不等于0就是过期,那么我们要去刷新access_token
    if(!"0".equals(chickuserInfo.getString("errcode"))){
        //第三步刷新access_token(刷新access_token接口)
        String refreshTokenUrl="https://api.weixin.qq.com/sns/oauth2/refresh_token?appid="+openid+"&grant_type=refresh_token&refresh_token="+refresh_token;

        JSONObject refreshInfo = WXAuthUtil.doGetJson(chickUrl);

        access_token=refreshInfo.getString("access_token");
    }

    //获取用户拿到openid 和access_token去获取用户信息,在页面中进行业务处理,获取存储在数据库中:
    //第四步(获取用户接口)
   String infoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token="+access_token
            + "&openid="+openid
            + "&lang=zh_CN";

    JSONObject userInfo = WXAuthUtil.doGetJson(infoUrl);

    System.out.println("userInfo------:"+userInfo.toString());  
    userInfo.getString("nickname");
    userInfo.getString("sex");
    userInfo.getString("country");
    userInfo.getString("province");
    userInfo.getString("city");
    userInfo.getString("headimgurl");
    userInfo.getString("language");
    userInfo.getString("privilege");
    userInfo.getString("openid");
    userInfo.getString("unionid");
    Map map=new HashMap();
    map.put("openId", userInfo.getString("openid"));
    modelMap.put("nickname", userInfo.getString("nickname"));//保存授权用户 
    return "wx/callBack";
}

添加的路径上面的.do是因为在SpringMvc中配置了后缀名事.do的配置,可以自己编写更改,

其实这个微信公众号网页登录的思路和流程:

第一步:获取到code凭证,

第二步:拿到code凭证去获取用户openid和access_token,refresh_token

第三步:刷新access_token,也是那openid和refresh_token

第四步:就是拿openid和access_token去获取用户信息

第五步:就是拿openid和access_token去获取用户信息,看能不能获取到,获取不到在调用刷新access_token的接口

在去调用第四步。

好了微信网页授权登录就到这里了,如果操作好的话应该是没有什么问题的,上面代码都有注释,不懂的或者是有

问题的可以在下发评论,我会及时的回复。

相关阅读

微信公众号的运营中一些操作推广方法

做微信公众账号,无论是个人账号还是公司账号,无论是订阅号码还是服务号码,目的都是为用户提供良好的服务,坚持用户,并通过这些用户为个

申请微信公众号要钱么?申请步骤详解

微信即是一个聊天工具也是一个企业或者个人展示自己的窗口,但是个人或企业想要展示自己比较权威的窗口就是公众号了,那么申请微信公

微信开发者工具首次登录,显示网络连接失败

微信开发者工具首次登录,显示网络连接失败首次打开是下面这样电脑是64位的操作系统,所以一直下的是64位的版本,查看网上的解决办法:删

产品案例:小程序的登录注册体系设计

小程序给世人的第一印象——高流量、易获客,冲击了一大波企业的肾上腺素,于是风风火火投入小程序生态的建设中,近乎无法自拔。腾讯微

拉勾网登录问题

拉钩登录问题,在参考别人的博客后,解决啦class lagouSpider(CrawlSpider): name = 'lagou' allowed_domains = ['www.lagou

分享到:

栏目导航

推荐阅读

热门阅读