2015-04-07 3 views
0

Недавно я попытался использовать аутентификацию Wechat для моего гибридного мобильного приложения (построенного с использованием Ionic Framework), но не имел большого успеха. Я подписался на учетную запись разработчика и получил AppId и AppKey. Затем я уволил запрос и был перенаправлен на мое родное приложение Wechat, но добрался до страницы с сообщением об ошибке «Ой, что-то пошло не так». Я также попытался стреляя запрос получите через Почтальон, как:Проблемы с использованием Wechat auth

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

но получил ошибку:

{ "ERRCODE": 50001, "ERRMSG": "пользователь неавторизованный" }

У кого-нибудь есть идея? Благодаря!

Кстати, это WeChat плагин, который я использую:

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

ответ

0

Я использую Ионные и плагин тоже, и они прекрасно работают:

В онлайн-версии должен быть сканирован QR-код, в то время как в iOS или Android вызывается клиент wechat.

Из того, что вы предоставили мне сделать вывод, что проблемы:

  • Вы не звонили Wechat.auth(), прежде чем пытаться получить информацию о пользователе WeChat
  • Вы не использовали https://api.weixin.qq.com/sns/oauth2/access_token, вместо того, чтобы вы были используя другой адрес

Я приложил свой основной рабочий код ниже. Самая важная вещь - это вызов Wechat.auth() перед другим персоналом, которого я не видел в вашем коде. Объект 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); 
 
    });

3

Это часто происходит потому, что вы не правильно oauth настроен на ваш учетный счет.

На боковой панели нажмите «Разрешения для разработки/интерфейса» 开发/接口 权限, затем найдите страницу «Учетная запись»/«Уполномоченные пользователи», чтобы получить базовую информационную страницу и нажмите «Изменить». 网页 服务/网页 授权 获取 用户 基本 信息/щелкните по 修改.Обязательно поместите URL-адрес, который вы используете для приложения, в поле «Обратный вызов» «Авторизация» Name/授权 回调 页面 域名:.

Обратите внимание, что это не будет работать для IP-адреса или локального хоста, поэтому вы можете загрузить https://ngrok.com/ и использовать прокси-туннель в качестве ответного запроса авторизации для разработки.

Также обратите внимание, что аутентификация Wechat будет работать только в пределах своего браузера.