微信小程序登入流程

微信小程序登入流程

前言:openid与unionid

openid:是用单个微信应用表示用户的唯一标识。亚洲:饼哥小程序上openid :123,那该用户再张成的小程序上他的opendid不是123,是其他任意一个值,上面的意思:同一用户再不用不同应用上的openid不同,但是再同一应用上唯一。

场景: 假设你们公司有2个小程序。但是你们老板想把用户做统一处理。比如新用户登入任意一个小程序,就发送发送礼包。但是只要再一个小程序上另过了,就不能再另一个上面领取。
unionnid:一个用户在多个小程序有唯一的标识

小程序的登入

1、小程序端执行wx.login()获取code
2、将1中的code发送到后端,后端调用auth.code2Session这个接口,得到openid和session_key
3、自定义登入状态,我们生成一个key与openid和session_key相绑定。把key返回到小程序中
4、小程序端保存,然后下次请求需要登入的接口的时候,把key带上。

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

App({
  onLaunch: function () {
    let that = this
    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        console.log(res.code)
        wx.request({
          url: that.globalData.baseurl+"/login/",
          data:{"code":res.code},
          method:"POST",
          success(e){
            console.log(e)
          }
        })
      }
    }),
  globalData: {
    userInfo: null,
    baseurl:"http://127.0.0.1:8000"
  }
})

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

class Login(APIView):
    def post(self,request):
        code = request.data.get(‘code‘)
        print(code,type(code))  #061j8by70sZPPC1yynx70kCuy70j8byp <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

返回值

返回的 JSON 数据包

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

errcode 的合法值

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

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

wx_login.py

from . import settings
import requests

def get_login_info(code):
    # https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code
    code_url = settings.code2Session.format(settings.AppId,settings.AppSecret,code)
    response = requests.get(code_url)
    json_response = response.json()
    print("json_response",json_response)
    if json_response.get("session_key"):
        return json_response
    else:
        return False

settings.py

AppId="wxc35e10f7101fafa"

AppSecret="1479996b514da2428a89352717ae7c"

code2Session="https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code"

四.加密并返回给前端一个标识方便后续操作

from rest_framework.views import APIView
from rest_framework.response import Response
from app01.wx import wx_login
from django.core.cache import cache
from .models import Wxuser
import time
import hashlib

class Login(APIView):
    def post(self,request):
        code = request.data.get(‘code‘)
        print(code,type(code))  #061j8by70sZPPC1yynx70kCuy70j8byp <class ‘str‘>
        if not code:
            return Response({"status":1,"msg":"缺少参数"})
        else:
            user_data = wx_login.get_login_info(code)
            # print(user_data)
            if user_data:
                val = user_data[‘session_key‘] + "&" + user_data[‘openid‘]
                md5 = hashlib.md5()
                md5.update(str(time.clock()).encode("utf-8"))
                md5.update(user_data["session_key"].encode("utf-8"))
                # 生成一个唯一标识的key,用来给前台
                key = md5.hexdigest()
                # 设置缓存减少数据库的压力
                cache.set(key,val)
                has_user = Wxuser.objects.filter(openid=user_data[‘openid‘]).first()
                if not has_user:
                    Wxuser.objects.create(openid=user_data[‘openid‘]) #将唯一标识存储到数据库
                return Response({
                    "status":0,
                    "msg":"ok",
                    "data":{"token":key}
                })
            else:
                return Response({"status":2,"msg":"缺少参数"})

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

App({
  onLaunch: function () {
    let that = this
    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        console.log(res.code)
        wx.request({
          url: that.globalData.baseurl+"/login/",
          data:{"code":res.code},
          method:"POST",
          success(e){
            wx.setStorageSync("token", e.data.data.token)
          }
        })
      }
    }),
  globalData: {
    userInfo: null,
    baseurl:"http://127.0.0.1:8000"
  }
})

原文地址:https://www.cnblogs.com/baohanblog/p/12483894.html

时间: 2024-09-30 19:06:53

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

微信小程序的设计流程

微信小程序开发流程: 1.下载并安装“微信开发者工具” 2.打开微信开发者工具 (1)主文件中的app.json中可以进行页面的添加以及对整个微信小程序的整体布局,如下方代码会在pages文件夹中生成不同得页面文件 在"window"中可以进行页面的整体的布局 在创建的不同的页面文件夹中存在四个不同形式的文件,有.Wxml文件主要书写页面,wxss文件主要对页面的布局美化,js文件主要进行数据的请求 3.小程序之间的组件传值, (1)在主文件下面创建组件的文件夹components/p

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

一,首先打开浏览器,搜索微信公众平台 点击进入,此时还没有注册微信小程序开发账号,我们需要点击注册 进入注册页面,会出现四种账号,我们选择小程序账号 然后根据提示就可以进行注册了 注册时,需填写一下个人相关信息 填写完毕就注册好了 要开发小程序还需要对小程序进行一些信息填写 在完成这些任务之后,我们就可以进行小程序开发了 记得好用点击推荐收藏-_-

微信小程序发起支付流程

小程序调起支付API 需要参数 邮件中参数 API参数名 详细说明 APPID appid appid是微信小程序后台APP的唯一标识,在小程序后台申请小程序账号后,微信会自动分配对应的appid,用于标识该应用.可在小程序-->设置-->开发设置中查看. 微信支付商户号 mch_id 商户申请微信支付后,由微信支付分配的商户收款账号. API密钥 key 交易过程生成签名的密钥,仅保留在商户系统和微信支付后台,不会在网络中传播.商户妥善保管该Key,切勿在网络中传输,不能在其他客户端中存储,

微信小程序卡券接入流程,酷客多为你支招

1.必须是已经认证的小程序(需300元/年认证费) 2.必须是已经认证的微信公众号(需300元/年认证费) 必须在微信公众平台开通卡券功能 3.需要在微信开放平台绑定公众号AppId与小程序AppId(开发者资质认证300元/年) 在开放平台绑定小程序和微信公众号 4.需要在酷客多小程序后台绑定公众号的相关信息 首先是公众号的AppId,AppSecret 登录微信公众号平台后台找到菜单的 开发==>基本配置 找到公众号的AppId和AppSecret 然后到微信开放平台查看小程序的原始ID 添

微信小程序学习总结

微信小程序开发环境安装以及相关设置配置 微信小程序前端页面书写 微信小程序前端样式WXSS书写 微信小程序中事件 微信小程序自定义组件 微信小程序发起请求 微信小程序登入流程 微信小程序路由跳转 微信小程序与用户交互 异常:微信小程序tabBar不生效 原文地址:https://www.cnblogs.com/pythonywy/p/11621165.html

微信小程序无法获取到unionId(专业踩坑20年)

UnionID机制说明如果开发者拥有多个移动应用.网站应用.和公众帐号(包括小程序),可通过unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用.网站应用和公众帐号(包括小程序),用户的unionid是唯一的.换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的. 我们系统都做了移动应用.网站应用.和公众帐号的微信登入,我们后端这边是有微信绑定账号功能的.所以需要在微信的给出的用户唯一的unionID判断该用户是否已绑定微信号. 微信小程序API

用这种眼光看微信小程序

先抛出结论:微信小程序就是一个类似RN的轮子,可以快速开发,有一定的适用场景,但是也有其局限性.(结论是基于微信小程序的示例代码做的解读,可能存在谬误 本文针对微信小程序的示例代码进行分析,告诉大家:微信小程序到底提供了什么?开发微信小程序方便么?微信小程序具体适用场景?最后还自作主张的说了点对于微信小程序的个人观点. 微信小程序都提供了什么? 微信小程序主要为我们提供了两部分东西:底层API 和 组件,不仅如此,微信小程序还引入新的文件格式. 引入了新的文件格式 微信小程序并不是传统意义的H5

php(ThinkPHP)实现微信小程序的登录过程

源码也在我的github中给出 https://github.com/wulongtao/think-wxminihelper 下面结合thinkPHP框架来实现以下微信小程序的登录流程,这些流程是结合了官网和github的一个网站综合实现的 https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html?t=2017112#wxloginobject https://github.com/cantoo/learning-wxapp/bl

资讯 | 2018年1月15日微信公开课解读!微信小程序开发资源

引言:2018年1月15日 微信公开课PRO开课了,本次课时内容将涉及:小程序.智慧零售.企业微信.小游戏  (附学习参考资料) 为了快速理解「2018 微信公开课 PRO 版」上张小龙的一小时演讲内容,结合下午微信公开课课室A_B_C的课时安排,这里为大家提前整理了相应的小程序学习参考资料: 微信公开课pro_A课室(14:00-17:50) 主题:小程序产品能力.开发.应用及规则 一.如何开发一个优秀的微信小程序/小游戏 微信小程序官方工具  https://mp.weixin.qq.com