我最近尝试对我的混合移动应用程序(使用Ionic Framework构建)使用微信身份验证,但还没有取得多大成功。我注册了一个开发者帐户并获得了AppId和AppKey。然后我解雇了请求,并被重定向到我原生的微信应用程序,但到达了一个错误消息的页面"哎呀!出了点问题"。我也试过通过Postman发出一个get请求,如:
但收到错误:
{ " errcode":50001, " errmsg":"用户未经授权" }
有人有想法吗?谢谢!
顺便说一下,这是我正在使用的微信插件:
答案 0 :(得分:3)
这种情况经常发生,因为您没有在您的微信帐户上设置正确的oauth。
在侧面板上单击开发/接口Permisions开发/接口权限,然后查找帐户页面/授权用户获取基本信息页面并单击修改网页服务/网页授权获取用户基本信息/单击修改。确保将您用于应用程序的URL放在授权回调页面名称/授权回调页面域名:字段中。
请注意,这不适用于IP地址或localhost,因此您可能希望下载https://ngrok.com/并使用代理隧道作为开发的授权回调。
另请注意,微信的身份验证仅适用于自己的浏览器。
答案 1 :(得分:0)
我也使用 Ionic 和插件,它们运行良好:
在线版本需要扫描二维码,而在iOS或Android中,微信客户端将被调用。
根据你提供的内容,我推断出问题是:
Wechat.auth()
https://api.weixin.qq.com/sns/oauth2/access_token
,而是使用了其他网址我在下面附上了我的主要工作代码。 最重要的事情是在其他员工之前致电Wechat.auth()
,我在您的代码中没有看到。 {strong}插件提供Wechat
对象,并执行授权并返回代码。使用代码,我们可以做下一件事。
var scope = "snsapi_userinfo";
Wechat.auth(scope, function(response) {
// Here we got authorized, now we can get more user info by passing the code returned by the authorized response code
if (response && response.code) {
OAuthService.weixin.getNativeUserInfoByCode(response.code, wechatSignIn);
} else {
// If we don't get the code so we show an alert
DialogsService.alert('获取微信授权代码失败。' + JSON.stringify(response), '微信授权失败');
}
}, function(reason) {
console.error(reason);
console.error('微信认证失败');
DialogsService.alert(reason, '微信认证失败');
});
获取用户信息的OAuthService.weixin.getNativeUserInfoByCode()
代码如下所示:
$http({
method: 'POST',
url: 'https://api.weixin.qq.com/sns/oauth2/access_token?appid={1}&secret={2}&grant_type=authorization_code&redirect_uri={3}&code={the code we got from Wechat.auth()}'
})
.success(function(data) {
if (data.errcode || data.errmsg) {
console.log('getting weixin access_token fail. data = ');
console.log(JSON.stringify(data));
console.log('换取 access_token 的 code 为 "' + code + '"');
errorCallback(data);
return;
}
console.log('getting weixin access token success. data =');
console.log(JSON.stringify(data));
var access_token = data.access_token;
var openid = data.openid;
successCallback(access_token, openid);
})
.error(function(data) {
console.log('getting weixin access_token fail. data = ');
console.log(JSON.stringify(data));
errorCallback(data);
});