問(wèn)題產(chǎn)生原因:是由微信官方對(duì)接口進(jìn)行升級(jí)引起的。
在之前我們?cè)谛〕绦颢@取用戶信息是如下方式:
<van-button
bind:getuserinfo="getUserInfo"
open-type="getUserInfo"
plain
round
block
size="small"
type="primary"
>
點(diǎn)擊這里登錄
</van-button>
注:bind:getuserinfo="getUserInfo" 中的getUserInfo是個(gè)響應(yīng)事件,當(dāng)然事件名可以隨便取的,不一定非是 getUserInfo 這個(gè)名字
open-type="getUserInfo" 則是微信小程序的一個(gè)開(kāi)放能力,在按鈕上設(shè)置此屬性則會(huì)觸發(fā) getuserinfo 事件。
下面則是事件的響應(yīng)函數(shù)
async getUserInfo(e) {
// 微信授權(quán)
let that = this
let userInfo = e.detail.userInfo
if (userInfo) {
let login = () => {
return new Promise(resolve => {
wx.login({
success(res) {
resolve(res)
},
fail() {
resolve()
}
})
})
}
let getUserInfo = () => {
return new Promise(resolve => {
wx.getUserInfo({
success(res) {
resolve(res)
},
fail() {
resolve()
}
})
})
}
let res = await login()
let res2 = await getUserInfo()
showLoading(‘加載中‘)
if (res && res.code && res2) {
let { encryptedData, iv, rawData, signature } = res2
await that.userLoginFunc(
res.code,
encryptedData,
iv,
rawData,
signature
)
hideLoading()
}
}
}
根據(jù)官方文檔
調(diào)整后,開(kāi)發(fā)者如需獲取用戶身份標(biāo)識(shí)符只需要調(diào)用wx.login接口即可。
開(kāi)發(fā)者若需要在界面中展示用戶的頭像昵稱(chēng)信息,可以通過(guò)<open-data>組件進(jìn)行渲染,該組件無(wú)需用戶確認(rèn),可以在界面中直接展示。
在部分場(chǎng)景(如社交類(lèi)小程序)中,開(kāi)發(fā)者需要在獲取用戶的頭像昵稱(chēng)信息,可調(diào)用wx.getUserProfile接口,開(kāi)發(fā)者每次通過(guò)該接口均需用戶確認(rèn),請(qǐng)開(kāi)發(fā)者妥善處理調(diào)用接口的時(shí)機(jī),避免過(guò)度彈出彈窗騷擾用戶。
解決過(guò)程分析:
主要就是變化一點(diǎn),無(wú)需再用 open-type="getUserInfo" 了,wx.getUserInfo接口也不用了,改為調(diào)用 wx.getUserProfile接口
async getUserProfile(e){
let that = this
let getuserinfo = new Promise((resolve, reject) => {
wx.getUserProfile({
desc: ‘用于完善會(huì)員資料‘,
success(res) {
resolve(res)
},
fail() {
resolve()
}
})
})
let login = new Promise((resolve, reject) => {
wx.login( {
success(res) {
resolve(res)
},
fail() {
resolve()
}
})
}
)
//console.log("params=" + params )
let flag = true
Promise.all([login, getuserinfo]).then(res=>{
console.log(‘所有操作完成---‘,res)
let code = ""
//let params = { encryptedData:‘‘, iv:‘‘, rawData:‘‘, signature:‘‘ }
if(res[0] && res[0].code )
{
code = res[0].code
}else{
falg = false
}
if(res[1]){
console.log( "-----oooo----------")
//console.log("signature:" + params.signature)
}else{
falg = false
}
showLoading(‘加載中‘)
//console.log("")
if (flag) {
let { encryptedData, iv, rawData, signature } = res[1]
//調(diào)用后端接口
that.userLoginFunc(
code,
encryptedData,
iv,
rawData,
signature
)
hideLoading()
}
}).catch((error) => {
console.log(error)
})
}