您的位置:首页 > 移动开发 > 微信开发

sendAjax.小程序登录封装

2017-12-29 17:01 162 查看
sendAjax

首先,会接受三个参数

第一个参数为请求前的必要的数据(接口地址,需传参数等)
默认method为POST(特别调整了method值传入为大写)
data为{}

第二个参数为回调函数(在调用之前,成功后,完成后)
默认调用前加正在加载提示,防止重复点击
完成后关闭正在加载提示
(特别:调用前的回调,是自己加的。)

第三个参数为需刷新的局部
防止整个页面刷新,少调几次后台


其次,调用前会确认是否有登录权限,或者G_authorization 的缓存信息

如果有G_authorization 的缓存信息或不需要登录权限,就是登录状态没问题,继续调用ajax

否则去重新登录。

(有G_authorization 的缓存信息:已有帐号才会有此变量)


最后, 成功,200 =》调用成功的回调函数

401 =》登录失效,去重新登录

其他 =》处理失败

失败 =》服务器连接失败

完成 =》调用完成的回调函数


登录

login(拿到code)

用户同意

=》 getUserInfo (用户基本信息)

=》换unionId,拿到用户信息,设置全局变量

=》判断全局变量G_authorization,没有

=》 增加新的小程序账户

=》 刷新局部,或当前页面

const HOST = require('../config.js')

function sendAjax(options, callback, outTimeAuthCbOrNeedAuth) {

// 登录信息过期处理类型
const OTCB = outTimeAuthCbOrNeedAuth || function () { getCurrentPages().pop().onLoad(getCurrentPages().pop().options) }
const _sets = options

if (typeof _sets.type === 'undefined') { _sets.type = 'POST' }
if (typeof _sets.data === 'undefined') { _sets.data = {} }

// 如果不是明确不需要登录权限 而且 没有 G_authorization 的缓存信息
if (outTimeAuthCbOrNeedAuth !== false && !wx.getStorageSync('G_authorization')) {

getApp().uploadUserInfo(OTCB)
return
}

// 纠正method大写
_sets.type = _sets.type.toUpperCase();

const bcallback = callback.beforeSend || function (data) {
wx.showToast({
title: '正在加载...',
icon: 'loading',
duration: 10000
}) };
const scallback = callback.success || function (data) { };
const ccallback = callback.complete || function (data) { wx.hideToast() };

bcallback()

wx.request({
url: HOST + _sets.url,
method: _sets.type,
data: _sets.data,
header: {
'content-type': 'application/json',
'authorization': outTimeAuthCbOrNeedAuth !== false ?  wx.getStorageSync('G_authorization') : ''
},
success(res) {

if (res.data.code == 200) {

scallback(res.data)
} else {

if (res.data.code == 401) {

getApp().uploadUserInfo(OTCB)
} else {

wx.showModal({
title: '提示',
content: res.data.message || '处理失败',
showCancel: false
});
}
}
},
fail() {
wx.showModal({
title: '提示',
content: '服务器连接失败',
showCancel: false
});
},
complete() {
ccallback()
}
})
}

module.exports = sendAjax


//app.js

/**
*
* 更新用户信息
* 1 授权登录
* 2 拿去用户信息
* 3 调用/user/account/platform/login 进行登录,有则拿取信息,无则进行注册
* 4 拿到用户信息后,没绑定手机号 单独在页面判断登录
* 5 老用户直接刷新页面,有自定义的回调就自定(cb),没有就刷新当前页面
*
*/
uploadUserInfo(cb) {
const that = this
wx.showNavigationBarLoading()
wx.login({
success: (loginResult) => {
that.globalData.platCode = loginResult.code

wx.showNavigationBarLoading()

wx.getUserInfo({
success: (userResult) => {

// 拿取登录换取unionId 必要参数
let platUserInfoMap = that.globalData.platUserInfoMap
platUserInfoMap["encryptedData"] = userResult.encryptedData
platUserInfoMap["iv"] = userResult.iv
that.globalData.platUserInfoMap = platUserInfoMap

wx.showNavigationBarLoading()

wx.request({
url: HOST + '/user/account/platform/login',
method: 'POST',
data: {
platType: that.globalData.platType,
platCode: that.globalData.platCode,
platUserInfoMap: that.globalData.platUserInfoMap,
weixinAppType: 3
},
header: {
'content-type': 'application/json'
},
success: (res) => {
if (res.data.code == "200") {

that.globalData.unionId = res.data.unionId

// 更新全局数据
wx.setStorageSync("G_unionId", res.data.unionId)
wx.setStorageSync("G_userKey", res.data.userKey)
wx.setStorageSync("G_nickName", res.data.userName)
wx.setStorageSync("G_avatar", res.data.avatar)
wx.setStorageSync("G_isBind", res.data.isBind)
wx.setStorageSync("G_userId", res.data.userId)
wx.setStorageSync('G_authorization', res.data.authorization)

// 没绑定手机号 单独在页面判断登录
if (res.data.authorization == "") {
wx.showNavigationBarLoading()
wx.request({
url: HOST + '/user/account/weixinapp',
method: 'POST',
data: {
unionId: res.data.unionId,
nickName: res.data.userName,
headimgurl: res.data.avatar
},
header: {
'content-type': 'application/json'
},
success: (resp) => {
if (resp.data.code == 200) {
wx.setStorageSync('G_authorization', resp.data.authorization)

if (typeof cb === 'function') {
cb();
} else {
//获取当前页面,并刷新
getCurrentPages().pop().onLoad(getCurrentPages().pop().options)
}
}
else {
wx.showModal({
title: '提示',
content: resp.data.message,
showCancel: false
});
}

},
fail: () => {
wx.showModal({
title: '提示',
content: '服务器连接失败',
showCancel: false
});
},
complete: () => {
wx.hideNavigationBarLoading()
}
})

// } else if (wx.getStorageSync("G_isBind") != 1) {
//     wx.showModal({
//         title: '提示',
//         content: '请先绑定手机号,体验布管家全套纺织管理服务',
//         showCancel: false,
//         success: (res) => {
//             wx.navigateTo({
//                 url: '/page/center/bindPhone',
//             })
//         }
//     });

} else {

if (typeof cb === 'function') {
cb();
} else {
//获取当前页面,并刷新
getCurrentPages().pop().onLoad(getCurrentPages().pop().options)
}
}

} else {
wx.showModal({
title: '提示',
content: res.data.message,
showCancel: false
});
}
},
fail() {
wx.showModal({
title: '提示',
content: '服务器连接失败',
showCancel: false
});
},
complete: () => {
wx.hideNavigationBarLoading()
}
})

},

fail: (userError) => {

wx.showModal({
title: '提示',
content: '若不授权微信登录,则无法使用相关功能;点击重新获取授权,则可重新使用。',
cancelText: "不授权",
confirmText: "授权",
success: (res) => {
if (res.confirm) {
wx.openSetting({
success: (res) => {
if (res.authSetting["scope.userInfo"]) {

//获取当前页面,并刷新
getCurrentPages().pop().o
9e4d
nLoad(getCurrentPages().pop().options)
}
}
});
} else if (res.cancel) {

// 同今天及,哦同里 恩 段 义 绝
wx.showModal({
title: '提示',
content: '未授权,无法流畅使用主要功能',
showCancel: false
});
}
}
});
},

complete: () => {
wx.hideNavigationBarLoading()
}
});
},

fail: function (loginError) {
wx.showModal({
title: '提示',
content: '微信登录失败,请检查网络状态',
showCancel: false,
success: (e) => {
console.log('微信登录失败', e)
}
});
},
complete: () => {
wx.hideNavigationBarLoading()
}
});
},
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: