官方介绍
根据这张图,我们基本可以理解,小程序授权登录需要这几步:
- 小程序初始化调用
wx.login
获取到code - 通过ajax发送code到后台进行交互
- 后台接收code通过appi+appsecret+code调取微信接口服务获取session_key+openid等
- 后台服务处理session_key+openid等参数,自定义登录状态,返回应有的参数给前台,比如我公司除了返回session_key+openid以外,还有uid,unionId等参数,供前台使用
- 前台小程序自定义登录状态存入storage(比如cookie,session等)
- 前台通过header携带自定义登录状态与后台进行交互
- 后台通过自定义登录状态查询相应的openid等,将业务数据返回给前天
这里面有一个坑: 第2步,可能不止发送code,还要发送其他数据 比如我公司需要发送:mpId品牌方id,source标识小程序,data用户授权的信息 根据公司业务不同,传的参数也不一样
用户授权登录
1. wx.login获取code
wx.login({
timeout: 10000,
success: (res) => {
console.log(res.code) // 这里获取到code
},
fail: (err) => {
}
});
2. 用户授权
<button open-type="getUserInfo" bind:getuserinfo="onGotUserInfo" class="authorizedBtn">确认授权</button>
// 获取用户授权信息
onGotUserInfo(event) {
const { userInfo } = event.detail
wx.getUserInfo({
lang: 'zh_CN',
success: (data) => {
console.log(data); // 获取的用户授权信息
},
});
},
3. 通过code,用户授权信息与后台进行交互
wx.request({
// url, mpid,source2,小程序登录code
url: app.data.url + '/wx/user/miniApp/login?mpId=' + app.data.mpId + '&source2=miniapp&code=' + code,
data: userInfo, // 传入用户授权信息
method: 'POST',
header: {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
},
success: function (res) {
console.log(res) //登录成功获取后台返回的数据
}
})