使用Wechat auth的问题

时间:2015-04-07 16:18:23

标签: cordova cordova-plugins ionic wechat

我最近尝试对我的混合移动应用程序(使用Ionic Framework构建)使用微信身份验证,但还没有取得多大成功。我注册了一个开发者帐户并获得了AppId和AppKey。然后我解雇了请求,并被重定向到我原生的微信应用程序,但到达了一个错误消息的页面"哎呀!出了点问题"。我也试过通过Postman发出一个get请求,如:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=yy8f70a5c5a0971111&secret=99999ed33fe7c954bc672630afb7xxxx

但收到错误:

{     " errcode":50001,     " errmsg":"用户未经授权" }

有人有想法吗?谢谢!

顺便说一下,这是我正在使用的微信插件:

https://github.com/xu-li/cordova-plugin-wechat-example

2 个答案:

答案 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);
  });