欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
回答
1、对于已登录用户,通过 uni.getUserInfo 返回的 userInfo.openId,是否就是微信要的 openid?
不建议依赖此方式获取 openid。 根据官方文档,uni.getUserInfo 返回的 userInfo 参数中,openId 字段的平台差异说明标注为 App,即在微信小程序端不适用。微信小程序端不应通过 uni.getUserInfo 来获取 openid。
正确做法是通过 uni.login 获取登录凭证 code,再将 code 发送到 uniCloud 云函数,由云函数调用微信服务器接口换取 openid。
参考文档:
2、对于未登录用户(游客模式),是否可以拿到微信要的 openid?如何获取?
可以获取。 微信小程序的 uni.login 是静默授权,不需要用户手动同意,即使用户未登录业务系统(游客模式)也可以直接调用。
获取流程如下:
- 客户端调用 uni.login 获取 code
- 将 code 传给 uniCloud 云函数
- 云函数调用微信接口
https://api.weixin.qq.com/sns/jscode2session 换取 openid
注意:获取的 code 只能使用一次。
云函数示例代码:
'use strict';
exports.main = async (event, context) => {
let js_code = event.code
const appid = '你的小程序appid'
const secret = '你的小程序secret'
const loginUrl = 'https://api.weixin.qq.com/sns/jscode2session'
let res = await uniCloud.httpclient.request(loginUrl, {
data: {
appid: appid,
secret: secret,
js_code: js_code,
grant_type: 'authorization_code'
},
dataType: 'json'
})
let openid = res.data.openid
return openid
};
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
客户端调用示例:
uni.login({
provider: 'weixin',
success: (res) => {
uniCloud.callFunction({
name: '你的云函数名称',
data: { code: res.code }
}).then(res => {
console.log('openid:', res.result);
})
}
})
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
参考来源:
总结
无论用户是否登录业务系统,在微信小程序中获取 openid 的标准方式都是:uni.login 获取 code → 云函数用 code 换取 openid。不要依赖 uni.getUserInfo 返回的 openId 字段,该字段在微信小程序端不适用。
2 个回复
空白人吗 - 7年开发经验 可接APP 小程序 网页 后端 vx:wu1020yt
uni.login 是可以直接静默授权获取到 code 的 ,然后后端通过code 换取openid
Ask小助手
回答
1、对于已登录用户,通过 uni.getUserInfo 返回的 userInfo.openId,是否就是微信要的 openid?
不建议依赖此方式获取 openid。 根据官方文档,uni.getUserInfo 返回的 userInfo 参数中,openId 字段的平台差异说明标注为 App,即在微信小程序端不适用。微信小程序端不应通过 uni.getUserInfo 来获取 openid。
正确做法是通过 uni.login 获取登录凭证 code,再将 code 发送到 uniCloud 云函数,由云函数调用微信服务器接口换取 openid。
参考文档:
2、对于未登录用户(游客模式),是否可以拿到微信要的 openid?如何获取?
可以获取。 微信小程序的 uni.login 是静默授权,不需要用户手动同意,即使用户未登录业务系统(游客模式)也可以直接调用。
获取流程如下:
https://api.weixin.qq.com/sns/jscode2session换取 openid云函数示例代码:
客户端调用示例:
参考来源:
总结
无论用户是否登录业务系统,在微信小程序中获取 openid 的标准方式都是:uni.login 获取 code → 云函数用 code 换取 openid。不要依赖 uni.getUserInfo 返回的 openId 字段,该字段在微信小程序端不适用。
要回复问题请先登录或注册
公告
更多>相关问题