经过各种百度查询,总算摸索出来了,跟php的小伙伴们分享下:
app.js:
//登录流程
//获取openid 等信息并存储数据
wx.login({
success: function (res) {
if (res.code) {
//小程序第一次发起网络请求
wx.request({
url: that.globalData.url ,
data: {
code: res.code,
},
method: "POST",
header: {
'content-type': 'application/x-www-form-urlencoded'
},
success: function (res) {
console.log(res.data)
var wxSecretData = res.data.data.info;
var wxSession = res.data.data.session_id;
//存储缓存数据
//服务器的session_id值
wx.setStorageSync('PHPSESSID', wxSession);
//3rd_session
wx.setStorageSync('wxSecretData', wxSecretData);
//存储成功后设置全局登录状态
that.globalData.wxlogin = true
}
})
} else {
console.log('获取用户登录态失败!' + res.errMsg)
}
}
})
第二次及以后每次其他请求时必须加上cookie头,服务器端才会认为俩次请求为同一用户
//获取手机号时对后端的请求
getPhoneNumber: function (e) {
//检测登录态
wx.checkSession({
success: function () {
if (e.detail.errMsg ==="getPhoneNumber:ok"){
//session 未过期,并且在本生命周期一直有效
var session_id = wx.getStorageSync('PHPSESSID');//获取本地取存储的sessionID
//header头部加入cookie PHPSESSID为php服务器跟浏览器中cookie中的session_id名字,不能更换,java为:JSESSIONID
var header = { 'content-type': 'application/x-www-form-urlencoded', 'Cookie': 'PHPSESSID=' + session_id }
//传值给服务器获取并存储
wx.request({
url: app.globalData.url ,
data: {
iv: e.detail.iv,
secretCode: e.detail.encryptedData
},
method: 'POST',
header: header,
success: function (res) {
console.log(res.data);
return;
if (res.data.status == 1) {
//获取手机号。。。
} else {
wx.showToast({
title: '读取手机号失败',
image: app.globalData.wrongSrc,
duration: 2000
})
}
},
fail: function () {
wx.showToast({
title: '获取失败',
image: app.globalData.wrongSrc,
duration: 2000
})
}
});
}
},
fail: function () {
//登录态过期
wx.login() //重新登录
}
})
},
PHP服务器端:
//获取当前服务器端的session_id,然后给小程序传值过去
session_id();