路由配置代码参考:
//首页 .state(‘app.home‘, { url: ‘/home?code&testopenid‘, templateUrl: ‘home/home.html‘, controller: ‘HomeController as vm‘, resolve: { load: [‘$ocLazyLoad‘, function($ocLazyLoad) { return $ocLazyLoad.load([‘home/home‘]); }], goLogin: [‘$stateParams‘,‘$state‘, ‘$wxService‘, ‘$stateParams‘,‘$modal‘,function ($stateParams,$state, $wxService,$stateParams,$modal) { return { query: function() { var deferred = $q.defer(); if (typeof $stateParams.code === "string") { $wxService.reLogin($stateParams.code, function(data) { deferred.resolve(data); }); } else if (typeof $stateParams.testopenid === "string") { saveToLocalStorage(‘openid‘ + appVersion, $stateParams.testopenid); $wxService.memberInfoQuery($stateParams.testopenid, function(data) { deferred.resolve(data); }); } else { if (typeof localStorage[‘openid‘ + appVersion] === "string") { $wxService.memberInfoQuery(localStorage[‘openid‘ + appVersion], function(data) { deferred.resolve(data); }); } else { deferred.reject({"status":"40001"}); } } return deferred.promise; // 返回承诺,这里并不是最终数据,而是访问最终数据的API } // end query } }] } })
登录验证流程代码参考:
$wxService.$inject = [‘$http‘, ‘$window‘]; function $wxService($http, $window) { var $service = { $$payload: null, reLogin: function(_code, callback) { for(var key in window.localStorage){ //清除老版本所有localStorage数据 if(key.indexOf(appVersion) == -1){ window.localStorage.removeItem(key); } } if (localMod) { loadLocalData(); this.memberInfoQuery(localStorage[‘openid‘ + appVersion], callback); return; } var self = this; if (!localMod) { //未登录 尝试重新登陆一遍 if (!localStorage[‘openid‘ + appVersion] || localStorage[‘openid‘ + appVersion]=="null") { this.ownerInfoQuery(_code, function(data) { if (data.openid) { saveToLocalStorage(‘openid‘ + appVersion, data.openid); self.memberInfoQuery(data.openid, callback); } else { callback(data.openid) return; } }); } else { this.memberInfoQuery(localStorage[‘openid‘ + appVersion], callback); } } }, ownerInfoQuery: function(_code, callback) { //第一次获取openId $http({ url: serviceUrl+‘/weixin/openid/query?code=‘+_code+"&token="+wxToken, method: ‘get‘ }).success(function(d) { callback(d); }).error(function(data) { callback({ status: 0, msg: JSON.stringify(data) }) }); }, memberInfoQuery: function(wxid, callback) { callback = callback || function() {}; $http({ url: serviceUrl+‘/fsServe/checkLogin?wxid=‘+wxid, method: ‘get‘ }).success(function(data) { callback(data); }).error(function(data) { debugAlert(JSON.stringify(data)); }); } }; return $service; }