微信网页授权

268 阅读1分钟

我也是摸索了很多次,初次尝试成功,作为一个新手,发表一下自己摸索出来的新得。 我这边用的是静默授权,以snsapi_base为scope的网页授权,就静默授权的,用户无感知 具体而言,网页授权流程分为四步: 1、引导用户进入授权页面同意授权,获取code

2、通过code换取网页授权access_token(与基础支持中的access_token不同)

3、如果需要,开发者可以刷新网页授权access_token,避免过期

4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

默认拥有scope参数中的snsapi_base和snsapi_userinfo) 废话不多说,附上代码 // 微信授权 toWXAuthorize(webUrl){ let appid = config.appId let redirect_uri = webUrl ? encodeURIComponent(webUrl) : encodeURIComponent(config.webSiteUrl) //appid 自己去配置,redirect 自己去配置 window.location.href = "open.weixin.qq.com/connect/oau…"; }, 授权成功可以获取code,传入code可以获取openid,传入openid可以获取用户信息,完成了一系列操作,不过获取code的时候会报错,可以看他的错误码进行分析 获取用户信息后,通过localStorage.setItem()存储信息 //获取url入参 getQueryString(name){ let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); let r = window.location.search.substr(1).match(reg); if (r != null) { return decodeURI(r[2]); } return ""; }, 此方法是获取url入参的方法 具体可以参考这个链接地址blog.csdn.net/zengyonglan… 这里要注意的是 redirect 的配置问题,具体可以参考文档 很多情况会报10003的错误码,这个就需要看看你的配置是不是不对,可以参考一下这个解释 blog.csdn.net/haoxuexiaol…

 ** 总结,页面一加载的时候,你先要判断之前有没有已经登录过(有木有用户信息),如果等如果,直接获取用户信息==>调用后端获取用户信息的接口**
   isAuthorize(){
    // 1、先判断缓存中是否已存在用户信息
    let userId =  localStorage.getItem("userId"); 
    if(userId) {
      this.initUserInfo();
      return;
    }
    如果没有用户信息,看有无code,如果有code,直接获取用户openid,在调用用户信息接口,如果没有,进行授权,获取code
    // 2、获取微信返回的code
    let code = this.getQueryString("code"); 
    if(code == ""){
      // 未获取到code时进行微信授权
      let webUrl = window.location.href;
      this.toWXAuthorize(webUrl);
    } else {
      // 已经获取到code时,换取openid
      this.getWxAuth(code)      
    }
  },
  //如何通过code换取openid的方法在此
   获取openid
  getWxAuth(code){
    let _this = this
    request({
      url: '/wx/xjjkt/xcUser/getWxAuth',
      data: {
          code: code
      }
    }).then(res => {
      if (res.code != 200) {
        console.log("获取openid失败==》", res);
        return;
      }
      _this.setStorage(res.data);
    }).catch(err=>{
        console.log(err)
    })
  },
  //获取url入参数
   getQueryString(name){
    let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); 
    let r = window.location.search.substr(1).match(reg); 
    if (r != null) {
      return decodeURI(r[2]);
    }
    return "";
  },
  
  
  以上就是我的分享,我是个新手,这是我慢慢琢磨的,如果有不对的地方,代码冗余的地方,欢迎大家指出来