微信开放接口getUserInfo、login、getUserProfile的爱恨情仇?

开发 前端
在小程序的启动事件onLaunch中进行wx.login通过code传递到后端获取openId,相当于用户登录操作,获取用户信息返回给前端。
  •  前言
    • 1.wx.login:
    • 2.wx.getUserInfo(应该是要废弃):
    • 3.wx.getUserProfile(重点推广,重点说明):
  • 总结

前言

虽然我是一个后端,但是是小程序刚出来的时候就开始学习并上线个人小程序的玩家,个人小程序有:小猪翻译、位置帮手、票票帮手 企业小程序:码农帮手、星家edu、飘飘诊断都是我个人开发的作品。小程序整个的体验确实比网页好,还能屏蔽操作系统,并且我个人的体会是特别适合后端程序员开发使用一些有用的工具。本篇我来介绍针对这半年至一年微信登录获取用户信息的调整,来帮助大家更好的梳理和完微信接口整改。

1.wx.login:

官网api说明地址: https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html 代码:

  1. wx.login({  success (res) {    if (res.code) {      //发起网络请求 
  2.       wx.request({        url: 'https://example.com/onLogin',        data: {          code: res.code 
  3.         } 
  4.       }) 
  5.     } else {      console.log('登录失败!' + res.errMsg) 
  6.     } 
  7.   } 
  8. }) 

这个是干什么呢?就是使用此方法拿到临时code去自己的服务器后台(appId+秘钥)获取openId等用户的私密信息,openId的唯一获取渠道。此接口经常被开发者滥用,我之前开发也是在页面当中onLoad、onShow、onReady中调用,这样其实做了很多无用功,现在小程序规范要求是在小程序初始化事件onLaunch中调用一次即可,然后通过getApp()的全局变量去维护用户信息就可以。

2.wx.getUserInfo(应该是要废弃):

官方api文档地址: https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.html 之前的代码调用:

  1. // 必须是在用户已经授权的情况下调用wx.getUserInfo({ 
  2.   success: function(res) {    var userInfo = res.userInfo 
  3.     var nickName = userInfo.nickName 
  4.     var avatarUrl = userInfo.avatarUrl 
  5.     var gender = userInfo.gender //性别 0:未知、1:男、2:女 
  6.     var province = userInfo.province 
  7.     var city = userInfo.city 
  8.     var country = userInfo.country 
  9.   } 
  10. }) 

官方最新的淘汰说明是:为?优化用户的使用体验,平台将进行以下调整:

2021年2月23日起,若小程序已在微信开放平台进行绑定,则通过wx.login接口获取的登录凭证可直接换取unionID 2021年4月28日24时后发布的小程序新版本,无法通过wx.getUserInfo与获取用户个人信息(头像、昵称、性别与地区),将直接获取匿名数据(包括userInfo与encryptedData中的用户个人信息),获取加密后的openID与unionID数据的能力不做调整。此前发布的小程序版本不受影响,但如果要进行版本更新则需要进行适配。新增getUserProfile接口(基础库2.10.4版本开始支持),可获取用户头像、昵称、性别及地区信息,开发者每次通过该接口获取用户个人信息均需用户确认。具体接口文档:《getUserProfile接口文档》 由于getUserProfile接口从2.10.4版本基础库开始支持(覆盖微信7.0.9以上版本),考虑到开发者在低版本中有获取用户头像昵称的诉求,对于未支持getUserProfile的情况下,开发者可继续使用getUserInfo能力。开发者可参考getUserProfile接口文档中的示例代码进行适配。

3.wx.getUserProfile(重点推广,重点说明):

旧的获取用户信息的apiwx.getUserInfo的替代api为:wx.getUserProfile 官方api地址: https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html 代码:

  1. getUserProfile(e) {    // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认 
  2.    // 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗 
  3.    wx.getUserProfile({      desc'用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 
  4.      success: (res) => {        this.setData({          userInfo: res.userInfo,          hasUserInfo: true 
  5.        }) 
  6.      } 
  7.    }) 
  8.  }, 

这个是最新的用户信息的获取的api,其实很上面的2.wx.getUserInfo用法差不多。应用场景就是用户没有进行过头像和昵称授权的时候

  1. <button wx:if="{{caniusegetuserprofile}}" bindtap="getuserprofile"> 获取头像昵称 </button wx:if="{{caniusegetuserprofile}}" bindtap="getuserprofile"

通过前端绑定此事件授权获取用户的最新昵称和头像,然后进行用户的信息操作。

总结

我不知道我上面介绍完是不是已经帮大家梳理清楚三个接口api的使用情况,总的来说流程就是:在小程序的启动事件onLaunch中进行wx.login通过code传递到后端获取openId,相当于用户登录操作,获取用户信息返回给前端。假入用户是初次登录或者想更新昵称和头像再进行wx.getUserProfile授权调用等。如果你有什么跟我交流的欢迎关注公众号:Java时间屋 进行交流。

 

责任编辑:武晓燕 来源: Java时间屋
相关推荐

2022-05-13 09:47:28

Docker容器

2020-11-24 10:13:20

测试开发管理

2022-09-02 12:13:22

TCPUDP场景

2021-04-12 06:08:16

HiveSpark大数据

2019-05-15 15:10:12

Tomcat Session Cookie

2020-04-09 15:26:55

间谍软件NSOFacebook

2013-02-20 10:00:16

微软CodePlexGitHub

2022-05-07 07:43:07

Redis存储系统数据库

2015-11-24 15:13:15

2015-02-13 10:16:06

2024-03-11 09:37:01

模型图片编辑

2015-02-12 17:23:33

微信SDK

2020-06-16 15:48:40

苹果英特尔芯片

2015-11-05 09:55:40

SDNNFV

2020-05-27 14:07:21

蜂窝广域网局域物联网物联网

2015-01-12 11:27:16

微信开放接口Web应用

2015-01-12 12:09:17

微信开放接口Web应用

2015-03-09 09:45:39

微信微信WIFI入口

2015-02-12 17:54:13

微信SDK

2015-02-12 17:28:23

微信SDK
点赞
收藏

51CTO技术栈公众号