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),这样测试流程就可以走通了

  • 相关阅读:
    cf1009 D. Relatively Prime Graph
    cf1009 C. Annoying Present
    随机验证码(数字和字母组成)及toLowerCase() 字符串转小写方法和toUpperCase()字符串转大写方法
    js中new ActiveXObject("Scripting.FileSystemObject")等操作本地文件用法,
    上传文件 (图片),使用new FormData()
    jq分页插件(jquery.pagination.js)只有上一页下一页和跳转
    jq的分页插件(pagination.min.js)选择一页显示多少条数据
    左侧导航栏案例
    jQuery 事件总结
    WebSocket
  • 原文地址:https://www.cnblogs.com/sunjf/p/wechat_login.html
Copyright © 2011-2022 走看看