微信小程序登入流程

一.首先前端先传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方法的必须对象是整个页面

微信小程序登入流程的更多相关文章

  1. 微信小程序后端开发流程

    微信小程序后端开发流程根据官网总结为两个步骤 1.前端调用 wx.login 返回了code,然后调用wx.getUserInfo获取到用户的昵称 头像 2.服务端根据code去微信获取openid, ...

  2. 微信小程序注册开发流程

    开篇: 微信小程序 很多刚学的同学都不太清楚如何去申请这个小程序的appid 现在呢我就一步步的告诉大家这个流程: 首先第1步,百度搜索:微信公众平台-点击右上角的立即注册 第2步:可以看到有4大注册 ...

  3. 微信小程序注册使用流程

    新开发微信小程序使用流程:  平时使用小程序较多,但是具体注册流程简单记录下: 第一步:通过邮箱注册 第二步:在邮箱进行激活 注册后,在邮箱会收到激活信息提示.点击激活地址进行激活. 第三步:信息登记 ...

  4. 前端调用微信小程序的支付流程

    目录 1,前言 2,流程 3,参数说明 4,具体代码 1,前言 分享一个完整的微信小程序支付流程中,前端要做的模块. 2,流程 在调用wx.requestPayment之前,需要准备一些参数,流程如下 ...

  5. 微信小程序的登录流程

    一.背景 传统的web开发实现登陆功能,一般的做法是输入账号密码.或者输入手机号及短信验证码进行登录 服务端校验用户信息通过之后,下发一个代表登录态的 token 给客户端,以便进行后续的交互,每当t ...

  6. 微信小程序的支付流程

    一.前言 微信小程序为电商类小程序,提供了非常完善.优秀.安全的支付功能 在小程序内可调用微信的API完成支付功能,方便.快捷 场景如下图所示: 用户通过分享或扫描二维码进入商户小程序,用户选择购买, ...

  7. 微信小程序的发布流程

    一.背景 在中大型的公司里,人员的分工非常仔细,一般会有不同岗位角色的员工同时参与同一个小程序项目.为此,小程序平台设计了不同的权限管理使得项目管理者可以更加高效管理整个团队的协同工作 以往我们在开发 ...

  8. 微信小程序开发者注册流程

    一,首先打开浏览器,搜索微信公众平台 点击进入,此时还没有注册微信小程序开发账号,我们需要点击注册 进入注册页面,会出现四种账号,我们选择小程序账号 然后根据提示就可以进行注册了 注册时,需填写一下个 ...

  9. 微信小程序发起支付流程

    小程序调起支付API 需要参数 邮件中参数 API参数名 详细说明 APPID appid appid是微信小程序后台APP的唯一标识,在小程序后台申请小程序账号后,微信会自动分配对应的appid,用 ...

随机推荐

  1. Filter过滤器学习

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

  2. JSP四大作用域属性范围

    JSP四大作用域分别为:page, request ,session, application . 第一个作用域是page,他只在当前页面有效,也就是用户请求的页面有效,当当前页面关闭或转到其他页面时 ...

  3. Ajax发送请求的四个步骤

    1.创建XMLHttpRequest let xhr=new XMLHttpRequest; 2.连接服务器 xhr.open("get","goods.json&quo ...

  4. android- 对话框中弹出edittext 不能调出输入法

    最近项目中用到 dialog弹出对话框功能, 弹出后输入 密码, 本以为这是一个很简单问题,但是做好发现Edittext 无法调出输入法. 解决方法,我也是百度找到的 . 记录一下,便于下次使用: f ...

  5. windows平台:查看端口占用情况,请杀死端口对应进程PID

    //查看 netstat -ano | findstr //杀死 taskkill /f /PID

  6. Winform将FastReport的report与PreviewControl建立绑定关系

    场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  7. struts2表单提单细节处理

    1. 上传文件 大部分项目避免不了要上传文件. struts2提供了封闭的上传文件的入口, 网络上也存在大量的插件用于网页表单中上传文件. 由于自己习惯用SSH框架, 所以介绍一下struts2中文件 ...

  8. 疑难杂症----Windows10

    现在大多数个人电脑所用的操作系统都是win10,而我们使用win10时总是会碰上各种各样的问题,所以专门写一篇博客来记录我碰上的各种问题,便于以后更快的解决问题. 一.小娜搜索不到应用问题解决方案 小 ...

  9. C++消息框架-基于sigslot

    目录 一.简介 二.消息 三.发送者 1.发送消息函数 2.新增一个接收者函数 3.移除一个接收者函数 四.接收者 五.功能测试 1.消息接收类 2.测试代码 3.测试结果 六.源码 一.简介 上一篇 ...

  10. 如何从请求、传输、渲染3个方面提升Web前端性能

    什么是WEB前端呢?就是用户电脑的浏览器所做的一切事情.我们来看看用户访问网站,浏览器都做了哪些事情: 输入网址 –> 解析域名 -> 请求页面 -> 解析页面并发送页面中的资源请求 ...