获取用户信息有两种,一种是获取用户的基本信息(用户名称,图像等),另一种是获取用户在微信中的详细信息(openId等)
首先要有小程序的appId和secret
第一种:wx.getUserInfo获取用户基本信息
wx.getUserInfo({
success: function (res) {
that.setData({
nickName: res.userInfo.nickName,
avatarUrl: res.userInfo.avatarUrl,
})
},
})
第二种:wx.login获取用户信息
调用接口获取登录凭证code(有效期五分钟)。通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成
在login获取到code,然后发送到开发者后端,
后端再通过接口去微信后端换取到openid和sessionKey,如果小程序绑定公众平台就会将用户的唯一标识
unionid一并返回之后(用户在公众平台关联的账号内unionid不变),
然后把3rd_session返回给前端,
就已经完成登录行为。而login行为是静默,不必授权的,不会对用户造成骚扰。
getUserInfo只是为了提供更优质的服务而存在,
比如展示头像昵称,判断性别,通过unionId和其他公众号上已有的用户画像结合起来提供历史数据。
所以不必在刚刚进入小程序的时候就强制要求授权。
wx.login({
success (res) {
if (res.code) {//登录凭证code
wx.getUserInfo({
success: function(res2) {
wx.request({
//后台接口地址
url: 'https://....com/wx/login',
data: {
code: res.code,
encryptedData: res2.encryptedData,
iv: res2.iv
},
method: 'GET',
header: {
'content-type': 'application/json'
},
success: function (res) {
that.setData({
nickName: res.data.nickName,//用户名称
avatarUrl: res.data.avatarUrl,//用户图像
})
wx.setStorageSync('openId', res.data.openId);//用户唯一标识openId
}
})
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
后台请求:
package com.deshangshidai.utils;
import java.security.spec.AlgorithmParameterSpec;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.lang3.StringUtils;
import org.apache.xerces.impl.dv.util.Base64;
import org.json.JSONObject;
import com.deshangshidai.redis.RedisUtils;
/**
* <p>Title: WxxcxUtils</p>
* <p>Description: </p>
* @author kq
* @d