原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处
const configGlobal = require('../config/config_global.js');
var util = require('function.js');
var http = require('http.js');
var app = getApp();
var authHandler = {
success: function(res) {},
fail: function(res) {},
complete: function(res) {},
};
/*
* 得到保存的SESSION
*/
function getSession() {
var session = null;
try {
session = wx.getStorageSync('session');
if (session) {
wx.checkSession({
success: function(res) {
setAppGlobalData(session);
},
fail: function(res) {
session = null;
setAppGlobalData(session);
}
});
} else {
session = null;
setAppGlobalData(session);
}
} catch (e) {}
return session;
};
/**
* [putLoginLog description]--记录登录日志
* @return {[type]} [description]
*/
function putLoginLog() {
http.POST({
url: '/_WxaappApiServer/putLoginLog',
data: {
openId: app.globalData.openId,
},
success: function(res) {
if (res.data.code == '0') {} else {}
},
fail: function(res) { console.log('request失败,res:', res); },
complete: function(res) {}
});
};
function setAppGlobalData(session) {
app.globalData.openId = session.openId;
app.globalData.unionid = session.unionid;
app.globalData._3rd_session = session._3rd_session;
app.globalData.userInfo = session.userInfo;
};
function getUserInfo(authHandler) {
// 调用登录接口
wx.login({
success: function(res) {
var code = res.code;
wx.getUserInfo({
lang: 'zh_CN',
success: function(res) {
http.POST({
url: '/_WxaappApiServer/getUserInfo',
data: {
code: code,
iv: res.iv,
encryptedData: res.encryptedData,
},
success: function(res) {
//对userInfo重新赋值
if (res.data.code == "0") {
var session = res.data.data;
try {
wx.setStorageSync('session', session);
setAppGlobalData(session);
authHandler.success();
} catch (e) {}
} else {}
},
fail: function(res) { console.log('request失败,res:', res); },
complete: function(res) {}
});
},
fail: function(res) {
openSettingUserInfo(authHandler);
},
complete: function(res) {},
})
},
fail: function(res) {
console.log("登录失败!");
},
complete: function(res) {},
});
};
function openSettingUserInfo(authHandler) {
wx.getSetting({
success(res) {
if (!res.authSetting['scope.userInfo']) {
wx.showModal({
title: '',
content: '请先完成授权!在设置页面中勾选“用户信息”选项,否则部分功能将受限。',
showCancel: true,
confirmText: '前去设置',
confirmColor: '#004b97',
success: function(res) {
if (res.confirm) {
wx.openSetting({
success: (res) => {
res.authSetting = {
'scope.userInfo': true,
};
// authHandler.success();
},
complete: function(res) {
openSettingUserInfo(authHandler);
},
})
}
if (res.cancel) {
authHandler.fail();
// 注释上一行,启用下面这一行,就是强制用户授权
// openSettingUserInfo(authHandler); //强制授权
}
if (!res.confirm && !res.cancel) {
openSettingUserInfo(authHandler);
}
}
});
} else {
getUserInfo(authHandler);
}
}
})
};
/**
* 授权--用户登录
* @param {[type]} authHandler [description]
* @return {[type]} [description]
*/
function userInfo(authHandler) {
var session = null;
try {
session = wx.getStorageSync('session');
if (session) {
wx.checkSession({
success: function() {
setAppGlobalData(session);
authHandler.success();
},
fail: function() {
session = null;
getUserInfo(authHandler);
}
});
} else {
session = null;
getUserInfo(authHandler);
}
} catch (e) {
authHandler.fail();
}
return session;
}
/**
* 授权--地理位置 wx.getLocation, wx.chooseLocation
* @param {[type]} authHandler [description]
* @return {[type]} [description]
*/
function userLocation(authHandler) {
wx.getSetting({
success(res) {
if (!res.authSetting['scope.userLocation']) {
wx.authorize({
scope: 'scope.userLocation',
success() {},
complete() {
openSetting_userLocation(authHandler)
}
})
} else {
authHandler.success();
}
}
})
};
function openSetting_userLocation(authHandler) {
wx.getSetting({
success(res) {
if (!res.authSetting['scope.userLocation']) {
wx.showModal({
title: '',
content: '请先完成授权!在设置页面中勾选“地理位置”选项,否则部分功能将受限。',
showCancel: true,
confirmText: '前去设置',
confirmColor: '#004b97',
success: function(res) {
if (res.confirm) {
wx.openSetting({
success: (res) => {
res.authSetting = {
'scope.userLocation': true,
};
},
complete: function(res) {
openSetting_userLocation(authHandler);
},
})
}
if (res.cancel) {
authHandler.fail();
// 注释上一行,启用下面这一行,就是强制用户授权
// openSetting_userLocation(authHandler); //强制授权
}
if (!res.confirm && !res.cancel) {
openSetting_userLocation(authHandler);
}
}
});
} else {
userLocation(authHandler);
}
}
})
};
/**
* 授权--通讯地址 wx.chooseAddress
* @param {[type]} authHandler [description]
* @return {[type]} [description]
*/
function address(authHandler) {
wx.getSetting({
success(res) {
if (!res.authSetting['scope.address']) {
wx.authorize({
scope: 'scope.address',
success() {},
complete() {
openSetting_address(authHandler)
}
})
} else {
authHandler.success();
}
}
})
};
function openSetting_address(authHandler) {
wx.getSetting({
success(res) {
if (!res.authSetting['scope.address']) {
wx.showModal({
title: '',
content: '请先完成授权!在设置页面中勾选“通讯地址”选项,否则部分功能将受限。',
showCancel: true,
confirmText: '前去设置',
confirmColor: '#004b97',
success: function(res) {
if (res.confirm) {
wx.openSetting({
success: (res) => {
res.authSetting = {
'scope.address': true,
};
},
complete: function(res) {
openSetting_address(authHandler);
},
})
}
if (res.cancel) {
authHandler.fail();
// 注释上一行,启用下面这一行,就是强制用户授权
// openSetting_address(authHandler); //强制授权
}
if (!res.confirm && !res.cancel) {
openSetting_address(authHandler);
}
}
});
} else {
address(authHandler);
}
}
})
};
/**
* 授权--发票抬头 wx.chooseInvoiceTitle
* @param {[type]} authHandler [description]
* @return {[type]} [description]
*/
function invoiceTitle(authHandler) {
wx.getSetting({
success(res) {
if (!res.authSetting['scope.invoiceTitle']) {
wx.authorize({
scope: 'scope.invoiceTitle',
success() {},
complete() {
openSetting_invoiceTitle(authHandler)
}
})
} else {
authHandler.success();
}
}
})
};
function openSetting_invoiceTitle(authHandler) {
wx.getSetting({
success(res) {
if (!res.authSetting['scope.invoiceTitle']) {
wx.showModal({
title: '',
content: '请先完成授权!在设置页面中勾选“发票抬头”选项,否则部分功能将受限。',
showCancel: true,
confirmText: '前去设置',
confirmColor: '#004b97',
success: function(res) {
if (res.confirm) {
wx.openSetting({
success: (res) => {
res.authSetting = {
'scope.invoiceTitle': true,
};
},
complete: function(res) {
openSetting_invoiceTitle(authHandler);
},
})
}
if (res.cancel) {
authHandler.fail();
// 注释上一行,启用下面这一行,就是强制用户授权
// openSetting_invoiceTitle(authHandler); //强制授权
}
if (!res.confirm && !res.cancel) {
openSetting_invoiceTitle(authHandler);
}
}
});
} else {
invoiceTitle(authHandler);
}
}
})
};
/**
* 授权--微信运动步数 wx.getWeRunData
* @param {[type]} authHandler [description]
* @return {[type]} [description]
*/
function werun(authHandler) {
wx.getSetting({
success(res) {
if (!res.authSetting['scope.werun']) {
wx.authorize({
scope: 'scope.werun',
success() {},
complete() {
openSetting_werun(authHandler)
}
})
} else {
authHandler.success();
}
}
})
};
function openSetting_werun(authHandler) {
wx.getSetting({
success(res) {
if (!res.authSetting['scope.werun']) {
wx.showModal({
title: '',
content: '请先完成授权!在设置页面中勾选“微信运动步数”选项,否则部分功能将受限。',
showCancel: true,
confirmText: '前去设置',
confirmColor: '#004b97',
success: function(res) {
if (res.confirm) {
wx.openSetting({
success: (res) => {
res.authSetting = {
'scope.werun': true,
};
},
complete: function(res) {
openSetting_werun(authHandler);
},
})
}
if (res.cancel) {
authHandler.fail();
// 注释上一行,启用下面这一行,就是强制用户授权
// openSetting_werun(authHandler); //强制授权
}
if (!res.confirm && !res.cancel) {
openSetting_werun(authHandler);
}
}
});
} else {
werun(authHandler);
}
}
})
};
/**
* 授权--录音功能 wx.startRecord
* @param {[type]} authHandler [description]
* @return {[type]} [description]
*/
function record(authHandler) {
wx.getSetting({
success(res) {
if (!res.authSetting['scope.record']) {
wx.authorize({
scope: 'scope.record',
success() {},
complete() {
openSetting_record(authHandler)
}
})
} else {
authHandler.success();
}
}
})
};
function openSetting_record(authHandler) {
wx.getSetting({
success(res) {
if (!res.authSetting['scope.record']) {
wx.showModal({
title: '',
content: '请先完成授权!在设置页面中勾选“录音功能”选项,否则部分功能将受限。',
showCancel: true,
confirmText: '前去设置',
confirmColor: '#004b97',
success: function(res) {
if (res.confirm) {
wx.openSetting({
success: (res) => {
res.authSetting = {
'scope.record': true,
};
},
complete: function(res) {
openSetting_record(authHandler);
},
})
}
if (res.cancel) {
authHandler.fail();
// 注释上一行,启用下面这一行,就是强制用户授权
// openSetting_record(authHandler); //强制授权
}
if (!res.confirm && !res.cancel) {
openSetting_record(authHandler);
}
}
});
} else {
record(authHandler);
}
}
})
};
/**
* 授权--保存到相册 wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum
* @param {[type]} authHandler [description]
* @return {[type]} [description]
*/
function writePhotosAlbum(authHandler) {
wx.getSetting({
success(res) {
if (!res.authSetting['scope.writePhotosAlbum']) {
wx.authorize({
scope: 'scope.writePhotosAlbum',
success() {},
complete() {
openSetting_writePhotosAlbum(authHandler)
}
})
} else {
authHandler.success();
}
}
})
};
function openSetting_writePhotosAlbum(authHandler) {
wx.getSetting({
success(res) {
if (!res.authSetting['scope.writePhotosAlbum']) {
wx.showModal({
title: '',
content: '请先完成授权!在设置页面中勾选“保存到相册”选项,否则部分功能将受限。',
showCancel: true,
confirmText: '前去设置',
confirmColor: '#004b97',
success: function(res) {
if (res.confirm) {
wx.openSetting({
success: (res) => {
res.authSetting = {
'scope.writePhotosAlbum': true,
};
},
complete: function(res) {
openSetting_writePhotosAlbum(authHandler);
},
})
}
if (res.cancel) {
authHandler.fail();
// 注释上一行,启用下面这一行,就是强制用户授权
// openSetting_writePhotosAlbum(authHandler); //强制授权
}
if (!res.confirm && !res.cancel) {
openSetting_writePhotosAlbum(authHandler);
}
}
});
} else {
writePhotosAlbum(authHandler);
}
}
})
};
module.exports = {
userInfo: userInfo,
userLocation: userLocation,
address: address,
invoiceTitle: invoiceTitle,
werun: werun,
record: record,
writePhotosAlbum: writePhotosAlbum,
putLoginLog: putLoginLog,
getSession: getSession,
};
在你的JS文头,引用auth.js
var auth = require('../../utils/auth.js');
// 在调用通讯地址判断是否开启授权,如果没开启就会自动调用授权
auth.address({
success: function(res) {
console.log('已授权');
// 这儿写你的业务逻辑
},
fail: function(res) {
console.log('未授权');
wx.showToast({
title: '未授权',
duration: 2000
});
}
});
上述代码中的函数请到下面的地址中的DEMO下载
WxappPlugin4SublimeText - sublime_text的微信小程序开发插件,能自动提示和代码补全。非常不错哦