zoukankan      html  css  js  c++  java
  • 微信小程序登入流程

    微信小程序登入流程

    一.首先前端先传code去后端

    wx.login({
          success(res) {
            if (res.code) {
              //发起网络请求
              wx.request({
                url: app.globalData.host+'login',
                method:"post",
                data: {
                  code: res.code
                }
              })
            } else {
              console.log('登录失败!' + res.errMsg)
            }
          }
        })
    

    二.后端接受到请求中的code

    #.......省略一下配置路由啥的
    class Login(APIView):
        def post(self,request):
            code = request.data.get('code')
            print(code,type(code))
            #061HMtlG0hAQ6d2hOYkG0DlhlG0HMtlh <class 'str'>
    

    三.后端获得code之后向微信官方发起请求获得相关参数

    发起的链接

    GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
    

    请求参数

    属性 类型 默认值 必填 说明
    appid string 小程序 appId
    secret string 小程序 appSecret
    js_code string 登录时获取的 code
    grant_type string 授权类型,此处只需填写 authorization_code

    返回值

    Object

    返回的 JSON 数据包

    属性 类型 说明
    openid string 用户唯一标识
    session_key string 会话密钥
    unionid string 用户在开放平台的唯一标识符,在满足 UnionID 下发条件的情况下会返回,详见 UnionID 机制说明
    errcode number 错误码
    errmsg string 错误信息

    errcode 的合法值

    说明 最低版本
    -1 系统繁忙,此时请开发者稍候再试
    0 请求成功
    40029 code 无效
    45011 频率限制,每个用户每分钟100次

    接着上述我们对于路径进行拼接成他需要的内容

    import requests
    class Login(APIView):
        def post(self,request):
            code = request.data.get('code')
        #https: // api.weixin.qq.com / sns / jscode2session?appid = {} & secret ={} & js_code = {} & grant_type = authorization_code
            url= f"https://api.weixin.qq.com/sns/jscode2session?appid=xxxx&secret=xxxx&js_code={code}&grant_type=authorization_code"
            #appid与secret不同的开发者不一样
            reponse=requests.get(url)
            #因为返回值是json的形式
            data=reponse.json()
            print(data)
    

    appid看你小程序中设置了是哪个appid

    对于的appid有对应的secret

    其中appid以及secret均在你小程序账号中

    四.获取参数后后台对于参数进行加密处理

    import hashlib
    class Login(APIView):
        ........
        if data.get("openid") and data.get("session_key"):
            md5 = hashlib.md5()
            md5.update(data['openid'].encode("utf-8"))
            md5.update(data['session_key'].encode("utf-8"))
            key = md5.hexdigest()
            val =data['session_key']+"&"+data['openid']
            print(key,val)
    

    五.如果上述过程都成功,返回前端一个标识方便后续操作

    from rest_framework.response import  Response
    from django.core.cache import cache
    
    class Login(APIView):
        ........
        cache.set(key,val)  #存缓存中较少对于数据库的压力
        has_user=models.Wxuser.objects.filter(openid=data['openid']).first() #将唯一标识进行存储
        if not  has_user:
            models.Wxuser.objects.create(openid=data['openid'])
            return Response({
                "code": 200,
                "msg": "ok",
                "data":{'login_key':key}  #发送login_key其目的是为了后续可以直接去缓存取对于信息
            })
    

    六.前端在前没有任何问题的情况下对于标识信息进行接收

    目的,标识已登入以及获取标识,方便后续对于用户信息的查找

     var that = this
        wx.login({
          success(res) {
            if (res.code) {
              //发起网络请求
              wx.request({
                url: app.globalData.host + 'login',
                method: "post",
                data: {
                  code: res.code
                },
                success(res) {
                  console.log(res.data.data.login_key)
                  console.log(that)
                  that.setData({
                    login_key: res.data.data.login_key
                  }
                  )
                },
              })
            }else {
              console.log('登录失败!' + res.errMsg)
            }
          }
        })
    

    其中setData方法的必须对象是整个页面

  • 相关阅读:
    pxe基于虚拟机的自启动
    time & datetime
    python文件读写操作
    lambda与常用内置函数
    python基础
    python day2:python 初识(二)
    mysql select
    python day1:初识Python(一)
    linux命令总结
    lvs/dr配置
  • 原文地址:https://www.cnblogs.com/pythonywy/p/11580715.html
Copyright © 2011-2022 走看看