
三个端:小程序端,开发者服务器端,微信接口服务端
我们首先通过wx.login()(微信平台集成直接调用即可)获取Code
拿到code之后通过wx.request()发送code到你的开发者服务器后端,后端
发送appid+appsecret+code到微信接口服务,微信接口服务验证成功后
微信将返回以下信息:
{
"openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M", // 用户唯一标识(微信开放平台下唯一,openid 是由微信官方提供的)
"session_key": "tiihtNczf5v6AKRyjwEUhQ==", // 会话密钥(用于解密用户敏感信息)
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" // 当用户绑定了微信开放平台账号时返回
}
我们将openid 往数据库里一保存,生成id,然后根据主键id也好,根据openid也好,生成token返回前端,然后前端把token存入storage,然后用户在活动中向后端发送请求时,必须携带此token即可(后端可以校验),成功后返回业务数据就行了!
微信小程序登录代码:
import $http from './utils/request.js'
import { token } from './api/auth.js'
import Storage from './utils/storage.js'
App({
$http,
onLaunch() { //项目启动默认会执行
console.log('小程序启动')
// 展示本地存储能力
const logs = Storage.getLogs() || []
logs.unshift(Date.now())
Storage.setLogs(logs)
// 登录
wx.login({ //调用微信提供的wx.login
success: async res => {
console.log('wx.login 成功,获取到 code:', res.code)//从res中拿到code
// 发送 res.code 到后台换取 openId, sessionKey, unionId
try {
let loginRes = await token(res.code);//拿到code之后向本地发起请求
console.log('token 请求响应:', loginRes)//后端返回loginRes
if(loginRes && loginRes.code === 200){
Storage.setToken(loginRes.data.tokenName, loginRes.data.tokenValue)//把后端返回的token信息保存到Storage,后期请求都要携带
console.log('token 存储成功')
} else {
console.error('token 请求失败:', loginRes)
}
} catch (error) {
console.error('token 请求异常:', error)
}
},
fail: err => {
console.error('wx.login 失败:', err)
}
})
},
globalData: {
userInfo: null
}
})
由于微信在获取token的时候要用get请求,get请求要跟参数必须用?加&拼接