# 小程序登录流程

先调 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
1

参数:

链接: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"]) ;
     }
    });
   }
  });
 }
})
1
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
  }
}
1
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绑定