微信小程序 - 登录获取openid和用户信息(适配getUserProfile)

article/2025/9/30 6:10:43

GitHub Demo 地址: jh-weapp-demo 实现一些常用效果、封装通用组件和工具类

小程序码

jh-weapp-demo

微信小程序中如果需要使用微信的用户信息建立自己的用户体系,需拿到唯一标识openid,然后通过getUserProfile(基础库2.10.4以上可用)或者getUserInfo(基础库2.10.4以下可用)获取用户信息,进而通过微信的用户信息建立自己的用户体系。

如果不需要登录体系,只是单纯展示用户头像昵称,可直接通过开放能力的open-data获取

注意:

·2022年5月9日发布了新的公告小程序用户头像昵称获取规则调整公告·

1、获取openid

1.1、通过云函数获取

openid通过云函数获取比较简单方便,我起的云函数方法名为login,代码实现记得文件夹右击选择 “创建并部署”
小程序云函数获取用户唯一标识官方文档

云函数代码

// 云函数模板
// 部署:在 cloud-functions/login 文件夹右击选择 “上传并部署”const cloud = require('wx-server-sdk')// 初始化 cloud
cloud.init({// API 调用都保持和云函数当前所在环境一致env: cloud.DYNAMIC_CURRENT_ENV
})/*** 这个示例将经自动鉴权过的小程序用户 openid 返回给小程序端* * event 参数包含小程序端调用传入的 data* */
exports.main = async (event, context) => {console.log(event)console.log(context)// 可执行其他自定义逻辑// console.log 的内容可以在云开发云函数调用日志查看// 获取 WX Context (微信调用上下文),包括 OPENID、APPID、及 UNIONID(需满足 UNIONID 获取条件)等信息const wxContext = cloud.getWXContext()return {event,openid: wxContext.OPENID,appid: wxContext.APPID,unionid: wxContext.UNIONID,env: wxContext.ENV,}
}

云函数调用

res中返回openidunionidenv等信息

  //云函数登录cloudLogin() {return new Promise((resolve, reject) => {wx.cloud.callFunction({name: 'login'}).then(res => {return resolve(res)}).catch(err => {return reject(err)});})},

1.2、调用微信接口获取微信用户唯一标识

按照下面流程说明的2步骤,即可获取用户唯一标识
官方流程文档

在这里插入图片描述
流程说明:

1.调用 wx.login() 获取 临时登录凭证code,并回传到开发者服务器。
2.调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 、用户在微信开放平台帐号下的唯一标识UnionID(若当前小程序已绑定到微信开放平台帐号) 和 会话密钥 session_key
之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。

注意事项:

1.会话密钥 session_key 是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。
2.临时登录凭证 code 只能使用一次

相关接口官方文档:

获取临时登录凭证code,有效期五分钟(可调用wx.checkSession检查登录态是否过期)
登录凭证校验(成功返回用户唯一标识 OpenID)

2、小程序端获取用户相关信息

获取用户信息(包含:微信名、性别、头像、省市区,国家)官方文档
2021年04月15日,微信发布了一条公告:小程序登录、用户信息相关接口调整说明,推出了新的获取用户信息的接口getUserProfile(基础库2.10.4以上可用),2021年4月28日24时后发布的小程序新版本需要进行适配

因此获取用户信息需要使用两个方法:
基础库2.10.4以上使用:getUserProfile
基础库2.10.4以下使用:getUserInfo

在这里插入图片描述
注意事项:

1.需要配合button按钮调用
2.需要做版本适配,基础库 2.10.4以上使用wx.getUserProfile,以下使用wx.getUserInfo
3.getUserProfile调用必须为直接调用,不能通过其他函数回调调用
否则会报getUserProfile:fail can only be invoked by user TAP gesture.错误

调用时机处理:

getUserProfile每次调用会有一个获取用户信息弹框,因此关于获取用户信息的时机,博主的做法是在需要登录时,弹出登录弹框,里面有登录按钮,用户点击按钮,调用获取openid和用户信息的方法,然后把返回的openid和用户信息存到数据库中,下次登录重复此操作`

wxml关键代码:

  <block wx:if="{{canIUseGetUserProfile}}"><button class="loginBtn" type="primary" size="default" bindtap="getUserProfile">微信一键登录</button></block><block wx:else><button class="loginBtn" type="primary" size="default" open-type="getUserInfo" lang="zh_CN"bindgetuserinfo="getUserInfo">微信一键登录</button></block>

js关键代码:

   // 页面创建时执行this.setData({canIUseGetUserProfile: wx.getUserProfile ? true : false})
     //点击一键登录,基础库2.10.4 以上使用getUserProfile: function () {console.log('点击一键登录,基础库2.10.4 以上使用');let that = this;let p1 = this.cloudLogin()let p2 = this.promiseGetUserProfile()Promise.all([p1, p2]).then((res) => {if (res && res[0] && res[1]) {that.successHandle(res[0].result.openid, res[1].userInfo)} else {that.failHandle()}}).catch((err) => {that.failHandle(err)})},//获取用户的当前设置getSetting() {return new Promise((resolve, reject) => {wx.getSetting({withSubscriptions: true,success: function (res) {return resolve(res)},fail: function (err) {return reject(err)}})})},//云函数登录cloudLogin() {return new Promise((resolve, reject) => {wx.cloud.callFunction({name: 'login'}).then(res => {return resolve(res)}).catch(err => {return reject(err)});})},//获取用户信息 - 基础库2.10.4 以上使用promiseGetUserProfile() {return new Promise((resolve, reject) => {wx.getUserProfile({lang: 'zh_CN',desc: '获取您的昵称、头像、地区及性别', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写success: (res) => {return resolve(res)},fail: (err) => {return reject(err)},})})},//点击一键登录,基础库2.10.4 以下使用getUserInfo: function (e) {console.log('点击一键登录,基础库2.10.4 以下使用');// console.log(e.detail.userInfo);// console.log("用户信息--" + JSON.stringify(e.detail.userInfo))let that = this;that.cloudLogin().then(res => {that.getSetting().then(res2 => {if (res2.authSetting['scope.userInfo']) {that.successHandle(res.result.openid, e.detail.userInfo)} else {wx.showToast({title: '未授权',icon: 'none'})}}).catch(err => {that.failHandle(err)});}).catch(err => {that.failHandle(err)});},

然后在successHandle中把数据存到本地和数据库中即可


http://chatgpt.dhexx.cn/article/BqXmo2Ax.shtml

相关文章

【微信】微信授权获取openid

1. 介绍 页面加载之前先通过微信授权获取openid&#xff08;账号唯一标识&#xff09; 2. 公众号管理者授权 添加开发人员为该公众号的开发者和运营者 3. 使用测试账号 配置测试账号信息&#xff0c;可以使用本地 ip 测试公共号授权功能&#xff0c;192.168.xx.xx是本机局域…

获取微信用户OpenID

功能需求&#xff1a;获取用户openid ,实现微信公众号自动登录. 实现思路&#xff1a;用户访问公众号链接,获取到co de,用co de换取用户openid,将openid保存到session,每次登陆判断openid是否绑定用户,如果已经绑定了用户则直接登陆,如果openid没有绑定用户则进行登陆,用户登陆…

微信—前端获取openId方法和步骤

执行流程 前端 --> 后端服务 --> 微信服务&#xff08;openId/UnionID&#xff09; 微信公众号网页开发授权&#xff1a;https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html#0 <template><div></div> …

如何获取用户的openid

如何获取用户的openid 你是否还在烦恼通过微信API接口获得openid的步骤烦恼&#xff1f;哈哈&#xff0c;今日突然发现一个特别方便的小窍门&#xff0c;不费吹灰之力找到用户的openid&#xff0c;详情如下&#xff1a; - &#xff08;1&#xff09;首先登陆微信公众号后台&a…

小程序获取code 获取 openId

VX号: LJT-917 1.首先先看文档 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 如果你文档看的很明白 那么换openId 一看就懂 就不需要继续阅读本文章了&#xff0c;如果看了文档还是不懂&#xff0c;请继续阅读&#xff01; 2.前端调…

微信公众平台-测试号网页授权-获取openid方法

文章目录 1、创建自己的测试号2、测试号管理信息填写&#xff08;注意仔细一步步对照&#xff09;3、手动获取openid4、使用SDK获取openid 1、创建自己的测试号 通过申请链接&#xff1a;https://mp.weixin.qq.com/debug/cgi-bin/sandbox?tsandbox/login 微信扫码登录 2、测…

获取微信用户的openId

开发框架:struts2&#xff08;零配置&#xff09; 官方文档下载地址 https://mp.weixin.qq.com/paymch/readtemplate?tmp/business/course3_tmpl&langzh_CN PS&#xff1a;下列获取openid的代码可以在柳峰的《微信公众平台应用开发方法、技巧与案例》的第六章找到。但是…

微信公众号获取openid流程

说明 微信公众号获取openid&#xff0c;在官方文档中称为网页授权&#xff0c;授权有两种scope&#xff0c;snsapi_base和snsapi_userinfo&#xff0c;snsapi_base是静默授权&#xff0c;不需要用户同意&#xff0c;以下要说的就是静默授权。 关于网页授权的两种 scope 的区别…

微信公众号获取openId——开发阶段

1、注册测试号 微信公众平台 2、理解获取逻辑 获得微信的openid&#xff0c;需要先访问微信提供的一个网址来获取code。 再访问微信提供的另一网址从而获取openId。 两个链接分别为&#xff1a; https://open.weixin.qq.com/connect/oauth2/authorize?appidAPPID&redire…

openId -( 关注者Id )如何获取 open ID

作者&#xff1a;知乎用户 链接&#xff1a;https://www.zhihu.com/question/28101897/answer/157130437 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 程序小白&#xff0c;只懂简单代码的程度。为这个问题困扰了很…

获取微信用户openid的三种方法#ACCESS_TOKEN

本文介绍如何获得微信公众平台关注用户的基本信息&#xff0c;包括昵称、头像、性别、国家、省份、城市、语言。 在本文中&#xff0c;特别要注意的是有两个不同的Access Token&#xff0c;他们产生的方式不一样&#xff0c;一种是使用AppID和AppSecret获取的access_token&…

web元件库/axure元件库/常用web组件/常用表单/导航栏/边框/图标/日期时间选择器/评分组件/穿梭框/输入框/步骤条/

web元件库/axure元件库/常用web组件/常用表单/导航栏/边框/图标/日期时间选择器/评分组件/穿梭框/输入框/步骤条/ Axure原型演示及下载地址&#xff1a; Untitled Documenthttps://66uc7t.axshare.com axure元件库 axure元件库 axure 元件库 axure 元件库 axure 元件库 axur…

axure元件制作-常用开关

利用axure制作APP端常用图标-开关元件&#xff0c;并添加至元件库 步骤&#xff1a; 1、从iconfont 图标库中选中关闭按钮元件&#xff0c;复制至“axure”中&#xff0c;选中该“关闭按钮”元件&#xff0c;设置“交互样式-选中”&#xff0c;导入代表开启状态的元件图片&am…

Axure 自定义元件库

点击文件 -> 新建元件库 可以添加多个元件&#xff0c;并将期重命名 保存元件库 新建页面 添加元件&#xff0c;选择自建的元件库 导入后就会发现我的原件库 这样就可以使用我们自定义的元件库了

Axure9 导入元件库

将需要加载的元件库(*.rplib)放到Axure的安装目录DefaultSettings\Libraries下&#xff0c;重启Axure9即可。

Axure移动端通用元件库rplib格式包含安卓、苹果各种主流手机、平板线框图元件库、IOS系统图标、人物图标、导航和分页、表格元素、各种小图标、移动元件库、axure元件库、axure原型

Axure移动端通用元件库rplib格式包含安卓、苹果各种主流手机、平板线框图元件库、IOS系统图标、人物图标、导航和分页、表格元素、各种小图标等 移动端通用元件库、app通用元件库、数据展示、操作反馈、通用模板、数据录入、列表页、表单页、详情页、通用版布局、移动端手机模…

Axure添加官方元件库

前言 工作需要&#xff0c;领导非要说某些东西产品经理搞不定&#xff0c;要我来搞… 于是就拿起了Axure 我的版本号&#xff1a; 添加一些自己喜欢的、常用元件库 1. 下载元件库 通过Axure工具&#xff0c;跳转到官方网站&#xff0c;下载自己心仪的元件库 比如我这里下…

Axure导入元件库和使用

下载元件库 vant 元件库下载: Vant - Mobile UI Components built on Vue element UI 元件库下载:https://element.eleme.cn/#/zh-CN/resource 以vant示例&#xff0c;下载完成后解压 我们看到有.rp和.rplib格式的文件 rp文件可以理解为一个别人设计好的原型作品。 rplib是原…

Axure 9元件使用

1 元件的位置操作 直接单击选择某一个元件将其拖至画布(中间区域)中,也可以通过左上角的插入菜单选择其他形状的部件。 元件的移动&#xff1a;拖住元件并在画布上松开鼠标即可&#xff1b;也可以直接在X和Y中直接输入坐标。 1.1 同时定位多个元件 按住CTRL使用鼠标单击每个元…

WEB端后台常用Axure元件库及框架模版

原型预览链接 https://www.pmdaniu.com/storages/124048/3256710583c699e3cd26bed1dfb3aa19-105941/start.html#g1&p%E4%BD%9C%E5%93%81%E6%BC%94%E7%A4%BA 软件版本&#xff1a;Axure 8/9 当前版本&#xff1a;V1.0 作品类型&#xff1a;元件库 作品格式&…