注意1:
openid 并不能作為用戶的唯一標識,openid 同一用戶同一應用唯一,unionid 同一用戶不同應用唯一,unionid 才是唯一標識,如果需要在多公眾號、移動應用之間做用戶共通,則需要用 unionid,否則若是單一產(chǎn)品,則也可以用 openid 作為唯一標識。
注意2:
雖然前端能拿到openid,但是發(fā)布上線的時候會無法過審,因為出于安全考慮,前端代碼不允許暴露小程序appId和app secret(秘鑰),所以此種方法不可取。
方法一: 后端操作
在這里插入圖片描述
傳 code 后端獲取openid、unionid:
-
前端調(diào)用 wx.login() 獲取 臨時登錄憑證code ,并回傳到開發(fā)者服務器。 - 后端調(diào)用 auth.code2Session 接口,換取 用戶唯一標識 openid和 unionid 和 會話密鑰 session_key。
后端注意:
- 會話密鑰 session_key 是對用戶數(shù)據(jù)進行 加密簽名 的密鑰。為了應用自身的數(shù)據(jù)安全,開發(fā)者服務器不應該把會話密鑰下發(fā)到小程序,也不應該對外提供這個密鑰。
- 臨時登錄憑證 code 只能使用一次
前端代碼:
// 登錄
wx.login({
success: res => {
wx.request({
url: 'url',// 后端接口地址
method: 'post',
header: {
'content-type': 'application/json' // 默認值
},
data: res.code, // 發(fā)送 res.code 到后臺換取 openId, sessionKey, unionId
success (res) {
if (res.statusCode == 200) {
console.log(res);
} else {
console.log(res.errMsg)
}
},
fail(err) {
console.log(err);
}
})
}
})
方法2: 云開發(fā)
具體代碼可以參考 超簡單微信小程序獲取用戶openid