uni-app 微信授权登录一直出错
uni-app 微信授权登录一直出错
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | windows11 | HBuilderX |
操作步骤:
- uni.login登录
预期结果:
- 授权登录成功
实际结果:
{
"errMsg": "login:fail send",
"errCode": -100,
"code": -100,
"innerCode": -6
}
bug描述:
微信授权登录一直失败
uni.login({
provider: 'weixin', //使用微信登录
onlyAuthorize: true,
success: function(loginRes) {
console.log(loginRes);
console.log(loginRes.authResult);
// 存储下openid
uni.setStorageSync('openid', loginRes.authResult.openid);
// 查询是否已经注册
let data = {
openid: loginRes.authResult.openid
}
query_register(data).then(resle => {
console.log(resle)
// 判断下是否注册了 没有注册跳转认证注册页
if (resle.data.data.is_register == false) {
uni.navigateTo({
url: '/pages/authentication_info/index'
})
} else {
// app登录
let data = {
openid: loginRes.authResult.openid,
push_client_id: that.cid
}
app_login(data).then(res => {
console.log(res)
if (res.data.code == 200) {
// 判断是否绑定了手机号 没有的话跳转到绑定手机号页面 有则直接登录
if (res.data.data.is_bind == false) {
uni.showToast({
title: '请绑定手机号',
icon: 'none'
});
// 跳转到绑定手机号页面
setTimeout(() => {
uni.navigateTo({
url: '/pages/login/phone'
})
}, 2000)
} else {
// 直接登录
uni.setStorageSync('isLogin', 1); //用于登录拦截判断
uni.setStorageSync('token', res.data.data.token);
uni.switchTab({
url: '/pages/index/index'
})
}
} else {
uni.showToast({
title: res.data.msg,
icon: 'none'
})
}
})
}
})
},
fail: function(err) {
console.log('失败信息');
console.log(err)
}
});
{
"errMsg": "login:fail send",
"errCode": -100,
"code": -100,
"innerCode": -6
}
5 回复
是不是隐私政策没更新
这个跟隐私政策也有关系吗
回复 1***@163.com: 兄弟,找到原因了吗
解决了吗兄弟,我也是这个问题
在使用 uni-app 进行微信授权登录时,可能会遇到各种问题。以下是一些常见的问题及其解决方案,帮助你排查和解决问题。
1. 检查 AppID 和 AppSecret
- 问题:微信授权登录需要正确的
AppID
和AppSecret
,如果配置错误,会导致授权失败。 - 解决方案:确保你在微信开放平台注册的应用的
AppID
和AppSecret
是正确的,并且在uni-app
项目中正确配置了这些信息。
2. 检查授权域名
- 问题:微信授权登录需要在微信开放平台设置授权回调域名,如果域名没有正确配置,会导致授权失败。
- 解决方案:登录微信开放平台,检查并确保授权回调域名(如
www.yourdomain.com
)已经正确配置,并且与你在uni-app
项目中使用的域名一致。
3. 检查微信开发者工具配置
- 问题:在微信开发者工具中,如果没有正确配置
AppID
,可能会导致授权失败。 - 解决方案:在微信开发者工具中,确保项目的
AppID
与微信开放平台注册的应用AppID
一致。
4. 检查授权流程
- 问题:微信授权登录的流程较为复杂,如果流程中的某个步骤出错,会导致授权失败。
- 解决方案:确保你按照微信官方文档的授权流程进行操作。通常的流程包括:
- 获取用户授权码(
code
)。 - 使用
code
换取access_token
和openid
。 - 使用
access_token
和openid
获取用户信息。
- 获取用户授权码(
5. 检查网络请求
- 问题:在获取
code
或换取access_token
时,网络请求可能会失败。 - 解决方案:确保网络请求的 URL 和参数正确,并且服务器能够正常响应。你可以使用
uni.request
进行网络请求,并检查返回的结果。
6. 检查 uni-app 插件配置
- 问题:如果你使用的是
uni-app
的微信登录插件,可能会有配置问题。 - 解决方案:检查
manifest.json
文件中的微信登录插件配置,确保AppID
和其他参数正确。
7. 检查用户是否授权
- 问题:用户可能没有授权登录,或者取消了授权。
- 解决方案:确保在用户点击登录按钮时,正确调用微信的授权接口,并且用户同意授权。
8. 检查服务器端代码
- 问题:在获取
access_token
和用户信息时,服务器端代码可能会有问题。 - 解决方案:检查服务器端代码,确保正确处理微信的返回数据,并且能够正确存储和返回用户信息。
9. 查看错误信息
- 问题:微信授权登录失败时,通常会有错误信息返回。
- 解决方案:查看错误信息,并根据错误信息进行排查。常见的错误信息包括:
40029
:code
无效。40163
:code
已被使用。41008
:code
缺失。
10. 调试工具
- 问题:调试时可能会遇到各种问题。
- 解决方案:使用微信开发者工具的调试功能,查看网络请求和返回结果,帮助你定位问题。
示例代码
以下是一个简单的微信授权登录示例代码:
// 获取微信授权 code
uni.login({
provider: 'weixin',
success: function (loginRes) {
const code = loginRes.code;
if (code) {
// 使用 code 换取 access_token 和 openid
uni.request({
url: 'https://api.weixin.qq.com/sns/oauth2/access_token',
data: {
appid: '你的AppID',
secret: '你的AppSecret',
code: code,
grant_type: 'authorization_code'
},
success: function (res) {
const access_token = res.data.access_token;
const openid = res.data.openid;
// 使用 access_token 和 openid 获取用户信息
uni.request({
url: 'https://api.weixin.qq.com/sns/userinfo',
data: {
access_token: access_token,
openid: openid
},
success: function (userInfoRes) {
const userInfo = userInfoRes.data;
console.log('用户信息:', userInfo);
},
fail: function (err) {
console.error('获取用户信息失败:', err);
}
});
},
fail: function (err) {
console.error('获取 access_token 失败:', err);
}
});
} else {
console.error('获取 code 失败');
}
},
fail: function (err) {
console.error('微信登录失败:', err);
}
});