> 技术文档 > uniapp:小程序获取用户信息_uniapp获取微信用户信息

uniapp:小程序获取用户信息_uniapp获取微信用户信息

在 UniApp 中实现微信小程序获取用户信息,主要涉及微信授权登录和调用相关 API。以下是详细步骤和示例代码,基于微信小程序的授权机制和 UniApp 的 API:

**1. **准备工作

  • 微信开发者平台配置
    • 登录微信公众平台,获取小程序的 AppIDAppSecret
    • 在小程序后台的“开发”->“开发设置”中,添加 https://api.weixin.qq.comrequest合法域名
    • 确保小程序已完成认证(部分功能如获取手机号需要企业认证)。
  • UniApp 项目配置
    • manifest.json 中配置小程序的 AppID(在 mp-weixin 节点下)。
    • 确保已安装微信开发者工具并配置好开发环境。

**2. **微信授权登录流程

微信小程序获取用户信息通常需要用户主动授权,涉及以下步骤:

  1. 调用 uni.login 获取临时登录凭证 code
  2. 使用 uni.getUserInfobutton 组件的 open-type=“getUserInfo” 获取用户信息(需用户授权)。
  3. code 发送到后端,换取 openidsession_key(通过微信的 auth.code2Session 接口)。
  4. 可选:后端解密加密数据(如手机号)。

**3. **代码实现

以下是一个完整的示例,展示如何在 UniApp 中实现微信小程序的授权登录并获取用户信息:

前端代码(Vue 页面)

vue景象

      昵称:{{ userInfo.nickName }} 头像:{{ userInfo.avatarUrl }}  export default { data() { return { isAuthorized: false, // 是否已授权 userInfo: {}, // 用户信息 }; }, methods: { // 检查用户是否已授权 checkAuth() { uni.getSetting({ success: (res) => { if (res.authSetting[\'scope.userInfo\']) { this.isAuthorized = true; // 已授权,直接获取用户信息 this.getUserInfo(); } else { this.isAuthorized = false; } }, }); }, // 获取用户信息 getUserInfo() { uni.getUserInfo({ provider: \'weixin\', success: (res) => { this.userInfo = res.userInfo; // 保存用户信息 this.isAuthorized = true; console.log(\'用户信息:\', res.userInfo); // 可将用户信息发送到后端保存 this.login(); }, fail: (err) => { console.error(\'获取用户信息失败:\', err); }, }); }, // 授权登录事件 onGetUserInfo(e) { if (e.detail.userInfo) { // 用户点击了“允许”授权 this.userInfo = e.detail.userInfo; this.isAuthorized = true; this.login(); } else { // 用户拒绝授权 uni.showToast({ title: \'授权失败\', icon: \'none\' }); } }, // 登录并获取 code,发送到后端 login() { uni.login({ provider: \'weixin\', success: (res) => { if (res.code) { // 将 code 发送到后端换取 openid uni.request({  url: \'https://your-backend.com/login\', // 替换为你的后端接口  method: \'POST\',  data: { code: res.code, userInfo: this.userInfo, // 可选:发送用户信息  },  success: (response) => { console.log(\'后端返回:\', response.data); // 假设后端返回 token 或 openid,保存到本地 uni.setStorageSync(\'token\', response.data.token);  },  fail: (err) => { console.error(\'请求后端失败:\', err);  }, }); } else { console.error(\'获取 code 失败:\', res.errMsg); } }, fail: (err) => { console.error(\'登录失败:\', err); }, }); }, }, onLoad() { // 页面加载时检查授权状态 this.checkAuth(); },};

后端代码(示例:Node.js)

后端需要调用微信的 auth.code2Session 接口,换取 openidsession_key。以下是一个简单的 Node.js 示例:

javascript

const express = require(\'express\');const axios = require(\'axios\');const app = express();app.use(express.json());app.post(\'/login\', async (req, res) => { const { code } = req.body; const appId = \'YOUR_APP_ID\'; // 替换为你的 AppID const appSecret = \'YOUR_APP_SECRET\'; // 替换为你的 AppSecret try { // 调用微信接口换取 openid 和 session_key const response = await axios.get(\'https://api.weixin.qq.com/sns/jscode2session\', { params: { appid: appId, secret: appSecret, js_code: code, grant_type: \'authorization_code\', }, }); const { openid, session_key } = response.data; if (!openid) { return res.status(400).json({ error: \'登录失败\' }); } // TODO: 保存 openid 到数据库,或生成 token 返回 res.json({ openid, token: \'your-generated-token\' }); } catch (error) { console.error(\'后端错误:\', error); res.status(500).json({ error: \'服务器错误\' }); }});app.listen(3000, () => { console.log(\'Server running on port 3000\');});

**4. **注意事项

  • 用户授权:微信小程序获取用户信息需要用户主动点击授权(如通过 buttonopen-type=“getUserInfo”)。自 2021 年 4 月起,微信已不再支持直接通过 wx.getUserInfo 获取用户敏感信息,需通过用户授权。
  • 手机号获取
    • 获取手机号需额外使用 button 组件的 open-type=“getPhoneNumber”,并由后端解密加密数据(需要 session_key)。

    • 示例:
      vue景象

      javascript

      onGetPhoneNumber(e) { if (e.detail.encryptedData) { // 将 encryptedData 和 iv 发送到后端解密 uni.request({ url: \'https://your-backend.com/decrypt\', method: \'POST\', data: { encryptedData: e.detail.encryptedData, iv: e.detail.iv, sessionKey: \'your-session-key\', // 从后端获取 }, success: (res) => { console.log(\'手机号:\', res.data.phoneNumber); }, }); } else { uni.showToast({ title: \'获取手机号失败\', icon: \'none\' }); }}
  • 权限限制:获取手机号功能仅限企业认证的小程序,个人小程序无法使用。
  • 调试:在微信开发者工具中调试时,可能需要真机测试(部分功能如手机号授权不支持模拟器)。
  • 安全性:敏感信息(如 AppSecret)应存储在后端,避免泄露。

**5. **参考资料

  • 微信小程序官方文档:登录、获取用户信息
  • UniApp 官方文档:uni.login、uni.getUserInfo
  • 社区教程:

**6. **常见问题

  • 授权失败:检查 manifest.json 中的 AppID 是否正确,确认用户是否拒绝授权。
  • 接口返回 undefined:确保 request合法域名 已配置,检查网络请求是否正确。
  • 手机号解密失败:确认 session_key 是否有效,检查后端解密逻辑是否正确。