前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信小程序登入流程

微信小程序登入流程

作者头像
小小咸鱼YwY
发布2020-06-19 16:05:54
2.2K0
发布2020-06-19 16:05:54
举报
文章被收录于专栏:python-爬虫python-爬虫

微信小程序登入流程

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

代码语言:javascript
复制
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

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

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

发起的链接

代码语言:javascript
复制
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次

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

代码语言:javascript
复制
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均在你小程序账号中

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

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
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其目的是为了后续可以直接去缓存取对于信息
        })

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

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

代码语言:javascript
复制
 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方法的必须对象是整个页面

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 微信小程序登入流程
    • 一.首先前端先传code去后端
      • 二.后端接受到请求中的code
        • 三.后端获得code之后向微信官方发起请求获得相关参数
          • 发起的链接
          • 请求参数
          • 返回值
          • Object
          • errcode 的合法值
          • 接着上述我们对于路径进行拼接成他需要的内容
        • 四.获取参数后后台对于参数进行加密处理
          • 五.如果上述过程都成功,返回前端一个标识方便后续操作
            • 六.前端在前没有任何问题的情况下对于标识信息进行接收
            相关产品与服务
            云开发 CloudBase
            云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档