- 基础库版本: 3.8.10
- 微信版本: 1.06.2412050
// "立即开始"按钮点击事件,微信授权登录
onStartClick: function() {
console.log('立即开始按钮被点击');
if (this.data.isAuthorizing) { return; }
this.setData({ isAuthorizing: true });
// �� 修复:使用微信官方最新的授权方式
// 按照微信官方要求:wx.getUserProfile() 必须在用户点击事件中直接调用
this.startWxAuthFlow();
},
// 🔥 修复:使用微信官方最新的授权方式
// 根据微信最新政策,wx.getUserProfile 必须在用户点击事件中直接调用
startWxAuthFlow: function() {
console.log('启动微信授权流程');
try {
// �� 修复:直接在用户点击事件中调用 wx.getUserProfile()
// 不能在异步回调中调用,必须同步执行
wx.getUserProfile({
desc: '用于完善个人资料和个性化服务', // 必填声明用途
success: (userRes) => {
console.log('wx.getUserProfile 授权成功,用户信息:', userRes.userInfo);
// 🔥 获取用户信息成功后,再调用 wx.login() 获取临时code
this.getLoginCodeAfterAuth(userRes.userInfo);
},
fail: (userErr) => {
console.error('wx.getUserProfile 授权失败:', userErr);
this.setData({ isAuthorizing: false });
if (userErr.errMsg.includes('getUserProfile:fail auth deny')) {
// 用户拒绝授权
wx.showModal({
title: '授权被拒绝',
content: '您拒绝了微信授权,无法使用完整功能。如需继续使用,请重新点击"立即开始"并允许授权。',
showCancel: false,
confirmText: '我知道了'
});
} else {
// 其他授权失败
wx.showToast({
title: '授权失败,请重试',
icon: 'none',
duration: 3000
});
}
}
});
} catch (error) {
console.error('启动授权流程失败:', error);
this.setData({ isAuthorizing: false });
wx.showToast({
title: '系统错误,请重试',
icon: 'none',
duration: 3000
});
}
},
// �� 新增:在授权成功后获取登录code
// 获取用户信息成功后,调用 wx.login() 获取临时登录凭证
getLoginCodeAfterAuth: function(userInfo) {
console.log('授权成功,开始获取登录code,用户信息:', userInfo);
wx.login({
success: (loginRes) => {
if (loginRes.code) {
console.log('wx.login 成功,获取到 code:', loginRes.code);
// �� 获取到code后,调用云函数进行登录
this.processWxLogin(userInfo, loginRes.code);
} else {
console.error('wx.login 失败,未获取到 code');
this.setData({ isAuthorizing: false });
wx.showToast({
title: '登录失败,请重试',
icon: 'none',
duration: 3000
});
}
},
fail: (loginErr) => {
console.error('wx.login 调用失败:', loginErr);
this.setData({ isAuthorizing: false });
wx.showToast({
title: '登录失败,请重试',
icon: 'none',
duration: 3000
});
}
});
},
// 🔥 修改:处理微信登录,现在接收 code 参数
// 获取用户信息成功后,调用云函数进行登录
processWxLogin: function(userInfo, code) {
console.log('开始处理微信登录,用户信息:', userInfo, 'code:', code);
// 显示加载提示
wx.showLoading({
title: '登录中...',
mask: true
});
// 调用云函数进行登录
wx.cloud.callFunction({
name: 'userLogin',
data: {
userInfo: userInfo,
code: code
},
success: (res) => {
console.log('云函数登录成功:', res.result);
wx.hideLoading();
if (res.result.success) {
// 登录成功,保存用户信息
wx.setStorageSync('userInfo', userInfo);
wx.setStorageSync('openid', res.result.openid);
wx.setStorageSync('userId', res.result.userId);
// 显示成功提示
wx.showToast({
title: res.result.message,
icon: 'success',
duration: 2000
});
// 延迟跳转到首页
setTimeout(() => {
wx.switchTab({
url: '/pages/home/home'
});
}, 2000);
} else {
// 登录失败
this.setData({ isAuthorizing: false });
wx.showToast({
title: res.result.message || '登录失败',
icon: 'none',
duration: 3000
});
}
},
fail: (err) => {
console.error('云函数调用失败:', err);
wx.hideLoading();
this.setData({ isAuthorizing: false });
wx.showToast({
title: '登录失败,请重试',
icon: 'none',
duration: 3000
});
}
});
}

wx.getUserProfile 接口有调整,目前已经不能获取用户微信头像和昵称,默认返回的是灰色头像和“微信用户”,也没有授权弹窗了(除了旧版本微信[基础库版本低于2.27.1]和接口调整生效期前发布的小程序版本外),参考公告:https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01
当前如果有头像和昵称获取的需要,只能让用户自己填写:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/userProfile.html