微信小程序之登入逻辑

一、基础概念

  • openid:如果一个用户关注了不同的微信应用(公众号,小程序),那么就对应不同的openID
  • 如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。

二、具体登入逻辑

小程序登入逻辑时序图地址:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
时序图:
微信小程序之登入逻辑_第1张图片
简化图:微信小程序之登入逻辑_第2张图片

  1. 小程序发送发起wx.login 获得code,再发起wx.request 给后端服务器传递参数code。
  2. 后端服务器发起请求 {url},传递code,appid,appsecret,返回json格式的session_key,openid.

一些说明:

  • url:https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
  • 后端请求具体文档 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
  • 小程序端发起的请求必须是 https协议,并且打开443端口,必须域名服务器备案。

三、具体逻辑代码

小程序端:

wx.login({
  success(res) {
    if (res.code) {
      //发起网络请求
      wx.request({
        url: '{具体后端接口}',
        data: {
          code: res.code
        },
        header:{
          'Content-Type':'application/json'
        },
        success:function(res){
          // var res = JSON.parse(res.data)
          that.globalData.openid = res.openid
          console.log(res.data)
        }
      })
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

后端:

@web.route("/api/v1/wxlogin")
def loginwx():
    code =  request.args.get('code')
    
    url = "https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code".format(
        '参数一','参数二',code
    )

    result = HTTP.get(url)

    return ({'openid':result['openid']})

微信小程序之登入逻辑_第3张图片

你可能感兴趣的:(小程序,小程序登入)