微信小程序授权 获取用户基本信息

3,795 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

授权

授权获取用户openid、session_key、unionid

1.调用微信接口 wx.login 获取登录凭证(code)

wx.login

uni.login

wx.login({
  success (res) {
    if (res.code) {
      // 拿到code 请求 自定义 下文 2中 服务端(开发者服务器) 获取 openid、session_key、unionid
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

2.服务端(开发者服务器)接收到 临时登录凭证 code 调用微信接口

服务端请求该地址获取 openid、session_key、unionid,返回给客户端
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

auth.code2Session 参数说明

3.获取用户 头像、昵称、国家、省份、性别等

文档地址

需要用户主动触发,button open-type 的值设置为 getPhoneNumber

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>

...
getPhoneNumber(e){
    这里拿到 encryptedData 和 iv 加上 上方获取openid时 拿到 sessionKey 传给 服务端(开发者服务器)进行解密获取 结果
}

后端解密

image

服务端获取开放数据文档

服务端 例子

var WXBizDataCrypt = require('./WXBizDataCrypt')

var appId = '**************'
var sessionKey = '*****************'
var encryptedData = 
	'CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZM'+
	...
        ...
	'20f0a04COwfneQAGGwd5oa+T8yO5hzuy'+
	'Db/XcxxmK01EpqOyuxINew=='
var iv = 'r7BXXKkLb8qrSNn05n0qiA=='
// sessionKey、encryptedData、iv 都是 接收 客户端的传值
var pc = new WXBizDataCrypt(appId, sessionKey)

var data = pc.decryptData(encryptedData , iv)

console.log('解密后data: ', data)

// 解密后的返给客户端的数据为
//
// data = {
//   "nickName": "Band",
//   "gender": 1,
//   "language": "zh_CN",
//   "city": "Guangzhou",
//   "province": "Guangdong",
//   "country": "CN",
//   "avatarUrl": "http://wx.qlogo.cn/mmopen/vi_32/aSKcBBPpibyKNicHNTMM0qJVh8Kjgiak2AHWr8MHM4WgMEm7GFhsf8OYrySdbvAMvTsw3mo8ibKicsnfN5pRjl1p8HQ/0",
//   "unionId": "**************",
//   "watermark": {
//     "timestamp": 1477314187,
//     "appid": "****************"
//   }
// }