# 在AngularJS應用中集成微信認證授權遇到的坑
**[注:請點擊此處進行充電!](http://blog.csdn.net/sunhuaqiang1/article/details/50158499)**
### 前言 ? ? ?
項目開發過程中,移動端新近增加了一個功能“微信授權登錄”,由于自己不是負責移動端開發的,但最后他人負責的部分未達到預期效果。不能準確實現微信授權登錄。最后還得靠自己做進一步的優化工作,誰讓自己是負責人呢?原來負責人就是負責最后把所有的BUG解決掉。
首先,熟悉一下微信授權部分的源代碼,如下所示:
~~~
/*-------------- 微信授權登陸 --------------*/
// 擴展 API 加載完畢后觸發“plusready"事件
document.addEventListener("plusready", function() {
// 擴展API加載完畢,現在可以正常調用擴展API
plus.oauth.getServices(function(services) {
// services.length可獲取當前運行環境支持授權登錄認證服務數目
if (services.length > 0) {
auths = services;
} else {
alert("當前運行環境不支持授權登錄認證服務!");
}
}, function(e) {
alert("獲取分享服務列表失敗:" + e.message + " - " + e.code);
});
}, false);
// 微信授權登錄操作
$scope.authLogin = function(){
for(var i = 0; i < auths.length; i++){
console.log(auths[i].description);
if(auths[i].description == "微信"){
var s = auths[i];
break;
}
}
if (!s.authResult) {
console.log("微信尚未授權");
s.login(
//登錄認證成功
function(e){
console.log("微信登錄認證成功!");
var objuser = s.userInfo;
var uname = objuser.nickname;
console.log(objuser.nickname);
localStorage.uid = uname;
localStorage.logined = "2";
$rootScope.userinfo = {
'logined': "2",
'username': uname
};
console.log(localStorage.logined);
$scope.set_defaultaddr();
//登錄后查詢訂單
$scope.getBillBadge();
if (sessionStorage) {
console.log(sessionStorage.getItem("hisURL"));
if(sessionStorage.getItem("hisURL")=='/tab/med_search')
$rootScope.familyBox();
$location.path(sessionStorage.getItem("hisURL"));
}
},
//登錄認證失敗
function(e){
alert( "登錄認證失敗!" );
});
}else{
console.log("已經登錄認證!");
}
~~~
授權認證步驟:獲取授權登錄認證服務——>授權登錄認證服務
手機之間在運行同一款軟件時由于系統差異也是存在表現差異。如下圖所示,上圖為紅米Android4.4.4版本上的測試結果,下圖為魅族5.0.1版本上的測試結果。很明顯下圖手機不能實現定位功能。
更明顯的差異存在于授權部分,調用授權服務時返回的數組內容不同,從下圖可明顯看出微信與QQ在返回數組中的位置不同。
?
? ?
? ? ? ?參考文獻:[http://www.html5plus.org/doc/zh_cn/oauth.html](http://www.html5plus.org/doc/zh_cn/oauth.html)
? ? ? ? ? ? ? ? ? ? ? ?[http://ask.dcloud.net.cn/article/192](http://ask.dcloud.net.cn/article/192)
平臺支持:
Android?-?2.2+?(不支持)
iOS?-?5.0+?(不支持)
注:Js中判斷兩字符串是否相等,使用“==”判斷。不能使用equals。
又出現了問題,在手機上調試一切正常,等到打包成APK就出現不能授權(提示登錄認證失敗)的問題。
alert(?"登錄認證失敗!"?+?e.message+"?-?"+e.code);如下圖所示:
?
還是直接在手機測試,出現下面的現象:
?
感覺處于一種死循環的狀態,但自己也一時找不到可以修改的地方。
### 注:
微信登錄配置的參數必須要提交在線打包才能生效(真機調試的時候使用的是HBuilder基座的參數)
折騰了一天,微信授權登錄還是未能完成。,頭痛....
好吧,我輸了。
### 第二天晚上
繼續昨天未完的問題。嘗試根據返回的錯誤信息進行修正。
通過查閱資料終于發現問題所在了。授權中配置的參數必須來自微信開放平臺申請所得,而非公眾平臺。那么二者之間又存在什么樣的區別呢?接下來繼續講解。

### 微信開放平臺和公眾平臺的區別?
簡單來講,微信公眾平臺是我們常見的公眾號,包括訂閱號、服務號和企業號,主要用于不具備太強技術開放能力,擁有一定運營能力的品牌、商戶、媒體以及個人,作為一個自媒體平臺或者服務窗口來用,是面向更廣大的人群使用的。
微信開放平臺是一個開發者平臺,針對的是有較強技術開發能力、能夠研發同微信對接的應用開發者來使用的,面向的是技術公司和開發者,不是面向所有人都可以使用的。
因此對于分不清二者區別的人來講,用公眾平臺就對了,能用得上開放平臺的人肯定都是對開放平臺功能有一定了解的人群。
那么,微信開放平臺與公眾平臺注冊所得信息通用嗎?
答案是NO!因為注冊時就不允許使用同一郵箱注冊。
- 前言
- (一)深入理解ANGULARUI路由_UI-ROUTER
- (二)AngularJS路由問題解決
- (四)ANGULAR.JS實現下拉菜單單選
- (五)Angular實現下拉菜單多選
- (六)AngularJS+BootStrap實現彈出對話框
- (七)實現根據不同條件顯示不同控件
- (十)AngularJS改變元素顯示狀態
- (十四)AngularJS靈異代碼事件
- (十七)在AngularJS應用中實現微信認證授權遇到的坑
- (十八)在AngularJS應用中集成科大訊飛語音輸入功能
- (十九)在AngularJS應用中集成百度地圖實現定位功能
- (二十一)Angularjs中scope與rootscope區別及聯系
- (二十三)ANGULAR三宗罪之版本陷阱
- (二十四)AngularJS與單選框及多選框的雙向動態綁定
- (二十五)JS實現導入文件功能
- (二十七)實現二維碼信息的集成思路
- (二十八)解決AngualrJS頁面刷新導致異常顯示問題
- (二十九)AngularJS項目開發技巧之localStorage存儲
- (三十)AngularJS項目開發技巧之圖片預加載
- (三十一)AngularJS項目開發技巧之獲取模態對話框中的組件ID
- (三十二)書海拾貝之特殊的ng-src和ng-href
- (三十三)書海拾貝之簡介AngularJS中使用factory和service的方法
- (三十四)Angular數據更新不及時問題探討
- (三十六)AngularJS項目開發技巧之利用Service&Promise&Resolve解決圖片預加載問題(后記)