# 小程序登录流程
先调 wx.login用code 换取 token,跳转至业务页
wx.login(Object object) (opens new window)
调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。更多使用方法详见 小程序登录 (opens new window)。
# auth.code2Session (opens new window)
后台调用
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
参数:
apppid: string 小程序 appId => 查询小程序appid (opens new window)
小程序 appSecret
链接:https://www.yisu.com/zixun/161802.html
//app.js
App({
onLaunch() {
wx.login({ // 登录
// 发送 res.code 到后台换取 openId, sessionKey, unionId
success: res => {
wx.request({
url: 'api/login',
method: 'POST',
data: {
code: res.code
},
success(res) {
//必须先清除,否则res.header['Set-Cookie']会报错
wx.removeStorageSync('sessionid') ;
//储存res.header['Set-Cookie']
wx.setStorageSync("sessionid", res.header["Set-Cookie"]) ;
}
});
}
});
}
})
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 保持登录状态
https://developers.weixin.qq.com/community/develop/doc/0006a21cc0ca98b82a9976e1656000
# 用户授权wx.authorize (opens new window)
# 用户拒绝后授权后重新拉起授权窗口
https://www.cnblogs.com/zmdComeOn/p/11762288.html
当用户拒绝授权后调用授权弹窗接口 wx.authorize (opens new window),不会再次出现弹窗,但是会进入接口的fail回调,那我们就可以在fail回调里想办法再次进行授权操作,肯定不能调用 wx.authorize (opens new window),那应该怎么办呢?有一个API可以实现打开设置界面的功能,就是wx.openSetting,可以调起客户端小程序设置界面,返回用户设置的操作结果。但是设置界面只会出现小程序已经向用户请求过的权限,我们可以按照这个思路解决问题。
# 麦当劳小程序登录
点击登录调用
POST https://api.mcd.cn/bff/passport/login/wechat
{
"code": "011xE2Ga1UPGCC0nymJa1NKaze2xE2GL"
}
Response
{
"success": true,
"code": 200,
"message": "请求成功",
"datetime": "2022-02-11 17:41:56",
"traceId": null,
"data": {
"sid": "39912a91294b4ae799d49e3a75ee7e29_",
"openId": "oOoAF0dTgb2-omxLt3Ik3LgDFl9g",
"unionId": "oJeaRw5NIDpLUPEuDp68DqgDxeZs",
"meddyId": "MEDDY967177170069843272",
"newUserGift": false,
"needVerify": false,
"credential": null,
"newUser": false
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
后续接口调用时Header中带了sid: 39912a91294b4ae799d49e3a75ee7e29_
# 小程序免密自动登录流程:
1.用户打开小程序,调用wx.login换取临时code,通过(auth/miniLogin接口)发送给后端
2.后端调用auth.code2Session=>该接口返回session_key和openid,后端通过openid查询到用户
3.通过openid查询用户信息,如果已绑定,则返回token (后端需要将openid和用户绑定);
如果未绑定则返回信息告诉前端该用户未绑定。走正常登录流程。
4.前端auth/miniLogin接口返回信息中,如果有token,小程序调用queryUserNow接口(需要token)获取用户信息;
如果无token,则不执行操作,让用户自己登录
如何绑定。走正常登录流程时,login页面登录(/miniLogin接口),将临时code发送给后端,后端执行第二步拿到openid绑定