java微信公众号开发,实现微信扫码签到功能

  • Post author:
  • Post category:java


  • 最近项目有做微信公众号开发,将开发步骤记录下来,以便日后查阅,也希望能帮到有需求的童鞋!
  • 项目需求:管理系统会议模块涉及到会议扫码签到功能,1、扫描二维码判断用户是否关注公众号,如果没关注跳转关注页面,给用户推送绑定消息;2、如果关注了判断用户是否绑定<PC端与微信端用户信息绑定>,如果没绑定跳转绑定页面;3、最后再做签到实现!!!
  • 如果有相同或类似端需求,可以参考我的实现
  • ————————————————


    微信扫码跳转自己服务器,并带参数


    ——————————————————————————

    1、二维码生成,前后端都可以生成,我用的是将二维码信息存数据库,前端直接用qrcode工具类生成展示,图片不是重点,重点是图片里的***二维码信息***,后端也可以生成后将路径保存数据库;二维码的生成这里不做详解,可百度!

    2、下面就开始微信公众号的开发,

    微信公众号官方文档


    微信公众号官方文档

    如果是初次接触公众号的开发童鞋,强烈建议把开发前必读看一遍,花不了多少时间,可以对微信公众号开发有个初步认识,利于后期开发~!

3、

网页授权


二维码信息
阅读完第一步可以找到网页授权端url,这就是***二维码中的信息***

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

参数详解:APPID为公众号的唯一标识;REDIRECT_URI为授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理<我没有对回调路径处理,未发现啥问题>;response_type:返回类型,请填写code;state:这个参数带你后台需要的参数,我这里带的是会议id<通过不同的会议id辨别不同的会议做处理>

4、第3步中的参数涉及到微信公众号的参数配置,开发期间建议直接用测试账号


测试账号申请


在这里插入图片描述

进入测试号页面下翻找到<网页服务-网页账号>修改回调域名,这个域名和REDIRECT_URI回调路径的域名一致,这样扫码后微信就会把请求发送到你的服务器;

开发阶段可能没有正式的域名,或者公司内网微信服务器无法访问的,可以用***内网穿透工具***,我用的是NATAPP,有免费版的,不了解的可以百度下

!!! <测试号网页回调域名好像可以直接用ip,>

								------------以上内容实现微信扫码跳转自己服务器,下面就是业务逻辑的编写--------------
  • ———————————————————


    判断是否关注微信公众号


    ——————————————————————————

    1、在REDIRECT_URI回调路径的api的方法中获取code和state

    code:用于获取openId<用户在微信公众号的唯一识别号>,

    state:自己的参数
	/**
     * 扫码签到
     * @return
     */
    @CrossOrigin(origins = "*")
    @GetMapping(value = "/sign")
    public String sign(HttpServletRequest request, HttpServletResponse response) {
   
        ResultInfo resultInfo = new ResultInfo();
        MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
        String code = (String) request.getParameter("code");
        String meetingId = (String) request.getParameter("state");//会议id  

2、获取openId


获取网页授权access_token


在这里插入图片描述



这个access_token和下面获取的access_token<基础支持中的access_token>不同,这个只用于网页授权,这里我们用不到,只需要获取openId就够了

 		/**
         * 获取openid
         */
        Object openidObj = redisService.get("open:wechat:code:" + code);
        if (openidObj == null) {
   
            String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appID + "&secret=" + appsecret + "&code=" + code + "&grant_type=authorization_code";
            ResponseEntity<Map> forEntity1 = restTemplate.getForEntity(url, Map.class);
            Map body = forEntity1.getBody();
            openidObj = body.get("ope



版权声明:本文为weixin_41564011原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。