一、微信小挨次的一个主要需求就是获得用户会员管理,包孕获得用户信息,用户的登录与注册的功用,在寻常的网页拓荒进挨次我们没有过量地存眷通讯与登录连结成就,一样寻常是用户登录后用session来连结登录,但在小挨次中存在一其中央的转发微信处事器,以是拓荒历程程中稍有不合。
起重要讲的就是登录连结成就,用户造访后的session是以session_id来辨此外,以是要造访的头部中列入PHPSESSION的session_id 的标识符截止传递,能够重新封装request要求函数,当然另有post等方式能够自行封装。
function get_session_key(ur1,success,fail) {
var session_id = wx. getstorageSync('PHPSESSID');//本地取存储的sessionID
if (session_id != '' && session_id != null) {
var header = { 'content - type':'application/-ww-form-urlencoded', 'Cookie': 'PHPSESSID='+ session_id }
} else {
var header = {'content -type':'application/x-wwu-form-urlencoded' }
}
wx.request({
url: url,
header: header,
success: function (res) {
success(res);
},
fail: function (res) {
fail(res);
},
})
}
二、在应用小挨次的官方登录接口截止把持,在登录的时辰前往记实的session值保留在本地数据中。
wx.login({
success: function (res) {
var code = res['code'];
console.log('code:'+ code)
//12. 小挨次调用wx. getuserInfo获得rawData, signatrue, encryptData.
wx. getuserInfo({
success: function (info) {
//console. .1og(info);
var rawData = info['rawData'];
var signature = info['signature'];
var encryptData = info['encryptData'];
var encryptedData=info['encryptedData']; //留心是encryptedData不是encryptData.
var iv = info['iv'];
//3.小挨次调用server获得token接口,传入code, rawData, signature, encryptData.
console.log(info['userInfo'])
var request_member_weixin_url = util.getApiurl(app,"/Member/weixin_api",'')
console.log(request_member_weixin_url);
wx.request({
ur1: request_member_weixin_url,
data: {
"code": code,
"rawData": rawData,
"signature": signature,
"encryptData": encryptData,
'iv': iv,
'encryptedData' : encryptedData,
'userInfo': info['userInfo']
},
success: function(res2) {
console.log('微信登录:'+ res2.statuscode);
if (res2. statusCode != 200) {
wx.showModal({
title: "登录失利"
});
}
}
})
//存入本地
wx.setstorageSync('PHPSESSID', res2.data.session_id)
//将thirdSessionId放入小挨次缓存
wx.setStorageSync('session3rd',res2.data.session3rd)
在处事端就是一系列的考证了,包孕用户信息解密等功用。
假定直接就如许做登录应用,照旧会存在成就的,碰面对以下几个成就:
一是当用户点击回绝受权获得用户信息后,
网页制作公司,用户将没法再次应用必须有登录才气应用的功用,如许一定是欠好的,以是还要检测当用户没有登录时辰要重新拉起受权赞同让用户赞同。
应用wx.openSetting({})来把持。
二是当网络措置比较照力慢时,用户不晓得曾登录,再去点其他必要会员登录的页面的时会展现成就,以是在获得页面的会员登录要求时弹出登录中的loding的界面让用户晓得挨次正在登录中,登录完成后封锁loding。wx.showLoading({title: '登录中'}) wx.hideLoading()
三是当用户长时光挂起一个页面时,会招致处事器的session过期而本地存储的sessionid不存在,如许用这个sessionid去获得信息的时辰就会失足,以是还要加一层剖断把持。页面加载的时辰去检测用户的session值还可否有效,假定有效不把持,收效则再次去履行登录把持。onload和onshow都去履行检测用户登录session可否有效。
当要获得小挨次用户上岸的id里,l因为小挨次登录是异步的,不克不及同步获得以后用户id,要应用定时工具去不休地轮询看可否曾登录完成经由过程session_id往来交游获得以后用户的id
//获得用户id
common.get_memberid(that)
get_memberid = setInterval(function () {
if (that.data.uid!=0) {
clearInterval(get_memberid)
}else{
common.get_memberid(that)
}
}, 500)