记一次vue获取微信用户信息

使用vue静态页获取微信的用户信息,通过调取微信的接口进行实现。

注意:我写的代码判断了只有在微信浏览器打开才可以获取用户信息,别的还没有进行测试!!!!!!!!!!

第一步:获取code

    getCode(){  
      var _api_root = "";
      _api_root = "这里是你获取完code后,跳转到的地址";
      //获取地址参数
      var hrefAdd = window.location.href.split("?")[1];
      //当前url路径转base格式
      var baseUrl = _api_root + hrefAdd;//这个是你要跳转地址的完整路径
      var encode = encodeURI(baseUrl);
      var base64 = btoa(encode);
      //跳转后台路径 拼接base格式的url路径
      window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='+"你的appid"+'&redirect_uri='+ 
base64 +'&response_type=code&scope=snsapi_userinfo&state=wecedirect';



     }

        注意:这是微信官方给定的接口。

第二步:获取用户的openid

        注意:这里的process.env.VUE_APP_URL == ‘/api’

getWxUserInfo(code) {
            var that = this;
            var url = process.env.VUE_APP_URL+ "sns/oauth2/access_token?appid='小程序的APPID'&secret='用自己的'&code=" + code + "&grant_type=authorization_code";
            return new Promise((resolve, reject) => {
                axios.get(url).then(function (res) {
                    var access_token = res.data.access_token;
                    var openid = res.data.openid;
                    sessionStorage.setItem("openid", openid);
                    that.getWxUnionids(access_token, openid);//这个是获取unionid
                  })
            })
        },

        注意:这个官方接口是需要解决跨域问题,我这边是在nigex里边添加了以下代码

location /api {
           proxy_pass https://api.weixin.qq.com;  #代理的域名
           add_header 'Access-Control-Allow-Origin' '*';
           add_header 'Access-Control-AllowCredentials' 'true'; 
       }

第三步就是unionid

        注意:这里的process.env.VUE_APP_URL == ‘/api’

getWxUnionid(access_token, openid) {
            var that = this;
            var url = process.env.VUE_APP_URL+  "sns/userinfo?access_token=" +access_token + "&openid=" + openid + "&lang=zh_CN";
            return new Promise((resolve, reject) => {
                axios.get(url).then(
                    console.log("unionid结果",unionid);
                )
            })
        },

        注意:这个也需要跨域,不过因为在获取openid的时候已经加了代理,所以就不用再加了,因为他们的网站是一样的。

一次记录,不知道对你有没有帮助。如果有错误还希望大家可以提出来。

### 实现基于 Vue3 和若依框架的微信扫码登录 #### 配置微信公众平台应用信息 在项目根目录下的 `application.yml` 文件中添加微信公众平台的应用配置: ```yaml wechat: appid: wxxxxxxxxxxxxxxx # 微信公众平台分配给开发者的 App ID secret: xxxxxxxxxxxxxxxxxx # 开发者设置的安全密钥 Secret Key ``` 此部分配置用于后续获取访问令牌以及用户基本信息[^2]。 #### 安装并引入必要的库 为了支持二维码生成,在项目的前端部分安装 `vue-qr` 插件,并将其注册到全局组件列表内以便于页面调用。同时,还需从 API 接口模块导入相关函数来处理用户的认证逻辑。 ```bash npm install vue-qr --save ``` 接着修改 `main.js` 或相应的入口文件: ```javascript import { createApp } from 'vue' import App from './App.vue' // 导入所需API接口 import { sendCode, saveUser, updateUserPassword, getLoginUUid, uuidLogin } from '@/api/system/user' // 注册vue-qrcode插件 import VueQr from 'vue-qr'; const app = createApp(App); app.use(VueQr); app.mount('#app') ``` 上述操作完成后即可准备创建具体的业务逻辑[^1]。 #### 创建登录界面与交互逻辑 新建一个名为 `WeChatScanLogin.vue` 的单文件组件作为微信扫描码登录页的内容模板。在此处定义好表单结构、按钮事件处理器以及其他辅助方法等。 ```html <template> <div class="login-container"> <!-- 显示QR Code --> <img :src="qrcodeUrl" alt="scan me"/> <!-- 提交验证状态 --> <button @click="handleCheckStatus">点击确认</button> <!-- 错误提示框 (可选)--> <p v-if="errorMessage">{{ errorMessage }}</p> </div> </template> <script lang="ts"> export default defineComponent({ data() { return { qrcodeUrl: '', // 存储生成后的二维码链接 loginUUID: null, // 录当前会话唯一标识符 errorMessage: '' // 登录过程中可能出现错误的信息描述 } }, methods: { async generateQRcode(){ try{ const response = await getLoginUUid(); // 获取唯一的uuid this.loginUUID = response.data.uuid; let qrOptions={ text:`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${process.env.VUE_APP_WECHAT_APPID}&redirect_uri=http%3A%2F%2Fyourdomain.com&response_type=code&scope=snsapi_login&state=${this.loginUUID}`, margin:0, size:400 }; this.qrcodeUrl = window.URL.createObjectURL(new Blob([JSON.stringify(qrOptions)],{type:"application/json"})); }catch(error){ console.error('Failed to fetch UUID', error); this.errorMessage='无法加载二维码,请稍后再试'; } }, handleCheckStatus(){ if(!this.loginUUID){return;} setInterval(async ()=>{ try{ const result = await uuidLogin(this.loginUUID); switch(result.status){ case "SUCCESS": localStorage.setItem('token',result.token); location.href='/home'; break; case "PENDING":break; default : clearInterval(); throw new Error(`Unexpected status ${result.status}`); } } catch(e){ console.log(e.message); this.errorMessage=e.message; clearInterval(); } },3*1000)//每三秒轮询一次服务器端的状态 } }, mounted(){ this.generateQRcode(); } }) </script> ``` 这段代码实现了当页面装载完毕后自动生成带有回调地址参数的 QR code 图像供用户通过手机客户端扫瞄完成身份验证流程;与此同时设定定时器周期性的向后台请求查询授权进度直至成功返回 token 后跳转至首页结束整个过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值