小程序的API接口文檔寫的很清晰,現在理一遍思路。
前端通過wx.login()獲取code ,把code發給后台,后台返回openid,再獲取用戶的授權信息(這里先判斷是否授權,授權過的就直接進入小程序,沒授權過的,跳轉到授權頁進行)。
在app.js 頁
onLaunch: function () { var _this = this; // 登錄 wx.login({ success: res => { // 發送 res.code 到后台換取 openId, sessionKey, unionId // 登陸成功 if (res.code) { // 發起網絡請求,獲取微信信息 console.log(res.code); wx.request({ method: 'POST', url: getOpenIdUrl, data: { code: res.code }, success: function(res) { console.log(res); var openid = res.data.data.openid; // 獲取微信信息 _this.userInfo(openid); } }) } } })
userInfo:function(openid){
wx.getSetting({ //判斷是否授權
if(!res.authSetting['scope.userInfo']){//如果沒有授權
wx.redirectTo({
url:'/pages/login/login?openid='+openid,
})
}else{
console.log('已經授權')
}
})
}
//在login頁xml設置button
<button class='loginbutton'open-type="getUserInfo" bindgetuserinfo="userInfoHandler">請授權</button>
//js頁
userInfoHandler:function(res){
var userMes = res.detail;
_this.setData({
userMes:userMes
})
if (res.detail.errMsg=='getUserInfo:ok'){
var url = '/pages/list/list';
_this.postAddUser(_this.data.openid, _this.redirectTo, url);
}else{
console.log('授權失敗')
}
},
redirectTo:function(url){
wx.redirectionTo({
url:url
})
}
postAddUser:function(openid,callback,callbackArg){
var _this=this;
wx.request({
method: 'POST',
url: login,
data: {
'rawData': _this.data.userMes.rawData,
'signature': _this.data.userMes.signature,
'encryptedData': _this.data.userMes.encryptedData,
'iv': _this.data.userMes.iv,
'openid': _this.data.openid
},
success: function (res) {
_this.saveCache('weInfo', res.data.data);
callback(callbackArg);
}
}
//保存緩存
saveCache:function(key,value){
wx.setStorage({
key:key,
data:vulue
})
}