zoukankan      html  css  js  c++  java
  • 微信登录

    一、前期准备

    1、注册微信公众平台,开通服务号(必须,订阅号没有接口调用权限)

    2、注册开放平台,微信认证。认证后还需要做下面两个申请认证

         1)管理中心--》创建应用(必须,审核基本一天时间)

          

         2)帐号中心--》开发者资质认证,申请开发资质认证(必须,审核基本一天时间)

          

    二、开发流程

    微信登录开发指南

    1、获取二维码链接,即开发指南中的“第一步:请求CODE”

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

     代码如下:其中state是自己生成的验证码

    @RequestMapping(value = "/getCodeByAppIdAndScope")
        public void getCodeByAppIdAndScope(HttpServletResponse response) throws IOException {
            String redirect_uri = URLEncoder.encode(ServiceConfigUtil.getValue("redirect_uri"), "utf-8");//即下面的getAccessTokenByCode方法
    String state = System.currentTimeMillis() + ""; String request_url = "https://open.weixin.qq.com/connect/qrconnect" + "?appid=" + appid + "&scope=snsapi_login" + "&redirect_uri=" + redirect_uri + "&response_type=code" + "&state=" + state + "#wechat_redirect";//URl的拼接 response.sendRedirect(request_url);//进行网络的请求 }

        通过调用该链接会跳转二维码界面,用户扫描二维码确认后,微信后台会调用我们给定的redirect_uri,并且会有code和state参数,我们后台可以接收到code和state参数,这时可以进行指南中的“第二步:通过code获取access_token”,代码如下

    @RequestMapping(value = "/getAccessTokenByCode")
        public String getAccessTokenByCode(HttpServletRequest request,
                                           HttpServletResponse response,
                                           RedirectAttributes redirectAttributes,
                                           Model model) {
            String code = request.getParameter("code");
            String accessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token" +
                    "?appid=" + appid +
                    "&secret=" + secret +
                    "&code=" + code +
                    "&grant_type=authorization_code";//Url的拼接
            ResponseEntity result = RemoteJsonHelper.accessForEntityNoToken(HttpMethod.GET, accessTokenUrl, null);//这个是自己写的远程调用工具接口,没有的网上查查自己写一个即可
            JSONObject jb = JSONObject.fromObject(result.getBody());
    String accessToken = tokenObj.getString("access_token");//获取access_token
    getUserInfoByAccessToken(accessToken);//据accessToken获取用户信息
     }

        接着就是获取用户信息,代码如下

    private String getUserInfoByAccessToken(JSONObject tokenObj) {
            String accessToken = tokenObj.getString("access_token");//获取access_token
            String openId =tokenObj.getString("openid");//获取openid
            String userUrl = "https://api.weixin.qq.com/sns/userinfo" +
                    "?access_token=" + accessToken +
                    "&openid=" + openId;
            ResponseEntity result = RemoteJsonHelper.accessForEntityNoToken(HttpMethod.GET, userUrl, null);
            JSONObject jb = JSONObject.fromObject(result.getBody());
            String nickname = jb.getString("nickname");//普通用户昵称
            String headimgurl = jb.getString("headimgurl");//用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
            String openid = jb.getString("openid");//普通用户的标识,对当前开发者帐号唯一
            int sex = jb.getInt("sex");//普通用户性别,1为男性,2为女性
            String province = jb.getString("province");
            String city = jb.getString("city");
            String country = jb.getString("country");
            boolean index = 判断该用户是否授权过
    if(index) {//授权过直接登录 //登录 } else {
           //添加处理并登录
    }
    }

       到这里微信登录流程结束。

    三、开发中遇到问题

    1、 Scope参数错误或没有Scope权限解决方法

      需要微信号开通服务号及开发这资质认证

    2、redirect_uri 参数错误

      将本地域名设置成与应用授权回调域一样的域名,我发生这个错误是因为本地测试时redirect_uri 链接上有端口导致的,也就是说这个链接的域名后不能有端口

         这样回导致回调后报错,这时只要在地址栏中将配置的域名改成测试的域名即可(本地则为localhost:port),这样测试流程就可以走通了

  • 相关阅读:
    PAT Advanced 1008 Elevator (20) [数学问题-简单数学]
    PAT Advanced 1051 Pop Sequence (25) [栈模拟]
    PAT Basic 完美数列(25) [two pointers]
    PAT Basic 插⼊与归并(25) [two pointers]
    PAT Advanced 1089 Insert or Merge (25) [two pointers]
    第五章 数据的共享和保护
    第四章 面向对象程序设计的基本特点 课堂笔记
    第三章 函数 课堂笔记
    扫描线-Meteor UVALive
    贪心-Stall Reservations POJ
  • 原文地址:https://www.cnblogs.com/sunjf/p/wechat_login.html
Copyright © 2011-2022 走看看