美文网首页
微信授权

微信授权

作者: xuweiqiang | 来源:发表于2019-06-03 12:48 被阅读0次

    史上最简单:springboot对接微信授权登录接口

    请求的整体流程

    20190410110821.png

    一、测试账号

    去https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

    获取个测试号,将appID和appsecret记录到application.yum文件中,或者也可以配置到项目的常量接口中

    在体验接口权限列表中找到网页账号修改授权回调页面域名(本地开发环境,可使用ngrok、cpolar、向日葵等内网穿透软件)

    20190410111316.png

    填写好回调域名后yum配置如图:

    20190410111613.png

    java后台设置:

    前端页面就是几个简单的标签,在此没有贴出

    @Controller

    public class WXConntroller {

        @Value("${oauth.wx.appid}")

        private String appid;

        @Value("${oauth.wx.appsecret}")

        private String appsecret;

        @Value("${oauth.callback.http}")

        private String http;

        private String access_Token;

        private String openId;

        @GetMapping("/")

        public String wxlogin() {

            // 第一步:用户同意授权,获取code

            String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid +

                    "&redirect_uri=" + http +

                    "&response_type=code" +

                    "&scope=snsapi_userinfo" +

                    "&state=STATE#wechat_redirect";

            return "redirect:" + url;

        }

        @GetMapping("/wxcallback")

        public String wxcallback(String code, ModelMap map) throws IOException {

            // 第二步:通过code换取网页授权access_token

            String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appid +

                    "&secret=" + appsecret +

                    "&code=" + code +

                    "&grant_type=authorization_code";

            JSONObject jsonObject = HttpClientUtils.doGet(url);

            openId = jsonObject.getString("openid");

            access_Token = jsonObject.getString("access_token");

            System.out.println("access_Token"+access_Token);

            // 第四步:拉取用户信息(需scope为 snsapi_userinfo)

            url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_Token +

                    "&openid=" + openId +

                    "&lang=zh_CN";

            JSONObject userInfoJson = HttpClientUtils.doGet(url);

            System.out.println("UserInfo:" + userInfoJson);

            // 微信帐号做来一个关联,来关联我们的账号体系

            // 此处实现自己的保存用户信息逻辑

            return "redirect:/gohome?openid=" + openId;

        }

        @GetMapping("/gohome")

        public String gohome(String openid, ModelMap map) {

            WXUser userEntity = wxUserService.getModel(openid);

            if (StringUtils.isEmpty(userEntity.getPhone())) {

                return "redirect:/register?openid=" + openid; // 重定向到注册接口

            } else {

                map.put("openid", openid);

                return "/home";  // 打开首页

            }

        }

        @GetMapping("/register")

        public String register(String openid, ModelMap map) {

            map.put("openid", openid);

            return "/upload";  // 我这里是打开上传页面,可根据自己业务需要实际来跳转

        }

        @GetMapping("/success")

        public String register() {

            return "/success";  // 打开注册成功页面

        }

    }

    二、部署服务器后网页授权

    准备工具:

    域名(已备案)、服务器、微信服务账号

    开始工作:

    前往

    https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=1840226221&lang=zh_CN

    获取公众号开发信息

    20190410113249.png

    配置方法如测试账号一样配置

    回调地址需要进入 开发--接口权限--网页授权 修改网页授权域名

    20190410123116.png

    [个人服务器是用nginx代理,springboot项目部署服务器后使用一个端口,微信网页授权验证需要一个域名,将该域名映射到springboot项目端口即可]

    因为上传文件配置较繁琐,我直接将验证的txt文件信息写入到一个接口

    @Controller

    public class WXConntroller {

        @GetMapping("/这里写你txt文本名称.txt")  // 从微信网页授权下载的txt的文件名称

        @ResponseBody

        public String verify() {

            return "返回txt文本内容";  // 从微信网页授权下载的txt的文件内容

        }

    }

    到此,配置完成后 使用测试账号的代码即可运行

    相关文章

      网友评论

          本文标题:微信授权

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