门禁系统是一个经典系统,很多人都在做,比如说指纹门禁、人脸门禁等。二维码门禁相比于传统的门禁有什么特点:1:权限分明,2:日志跟踪,3:管理方便。

硬件:二维码扫描器、继电器、电池锁、网线

软件:微信小程序(前端)、web(后台)

技术:二维码生成、二维码解码、http协议数据传输和接受、局域网使用、公网使用

微信小程序生成二维码代码

// pages/main/index.js
var QR = require("../../utils/qrcode.js");
Page({data: {canvasHidden: false,maskHidden: true,imagePath: '',placeholder: '如:A401'//默认二维码生成文本},onLoad: function (options) {// 页面初始化 options为页面跳转所带来的参数var size = this.setCanvasSize();//动态设置画布大小var initUrl = this.data.placeholder;this.createQrCode(initUrl, "mycanvas", size.w, size.h);//获取access_tokenwx.request({url: 'https://www.babybackhome.com/lg/wxsendmesController/at',success: function (res) {var at = wx.setStorageSync("at", res.data.mes)console.log("后台获取的access——token"+res.data.mes)}})//获取openidwx.login({success: function (res) {var code1 = res.codevar appid1 = "wx9d0142f81a1707c4"var secret1 = "ececd3066a8334df7905c35502242498"var ul = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid1 + '&secret=' + secret1 + '&js_code=' + code1 + '&grant_type=authorization_code'//获取openidwx.request({url: ul,method: 'GET',success: function (e) {var openid = e.data.openidconsole.log('获取登录身份的唯一openid', openid)wx.setStorageSync('openid', openid)}})}})},onReady: function () {},onShow: function () {// 页面显示},onHide: function () {// 页面隐藏},onPullDownRefresh: function () {//获取access_tokenwx.request({url: 'https://www.babybackhome.com/lg/wxsendmesController/at',success: function (res) {var at = wx.setStorageSync("at", res.data.mes)console.log(res.data.mes)}})//获取openidwx.login({success: function (res) {var code1 = res.codevar appid1 = "wx9d0142f81a1707c4"var secret1 = "ececd3066a8334df7905c35502242498"var ul = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid1 + '&secret=' + secret1 + '&js_code=' + code1 + '&grant_type=authorization_code'//获取openidwx.request({url: ul,method: 'GET',success: function (e) {var openid = e.data.openidconsole.log('获取登录身份的唯一openid', openid)wx.setStorageSync('openid', openid)}})}})},onUnload: function () {// 页面关闭},//适配不同屏幕大小的canvassetCanvasSize: function () {var size = {};try {var res = wx.getSystemInfoSync();var scale = 750 / 686;//不同屏幕下canvas的适配比例;设计稿是750宽var width = res.windowWidth / scale;var height = width;//canvas画布为正方形size.w = width;size.h = height;} catch (e) {// Do something when catch errorconsole.log("获取设备信息失败" + e);}return size;},createQrCode: function (url, canvasId, cavW, cavH) {//调用插件中的draw方法,绘制二维码图片QR.api.draw(url, canvasId, cavW, cavH);setTimeout(() => { this.canvasToTempImage(); }, 1000);},//获取临时缓存照片路径,存入data中canvasToTempImage: function () {var that = this;wx.canvasToTempFilePath({canvasId: 'mycanvas',success: function (res) {var tempFilePath = res.tempFilePath;console.log(tempFilePath);that.setData({imagePath: tempFilePath,// canvasHidden:true});},fail: function (res) {console.log(res);}});},//点击图片进行预览,长按保存分享图片previewImg: function (e) {var img = this.data.imagePath;console.log(img);wx.previewImage({current: img, // 当前显示图片的http链接urls: [img] // 需要预览的图片http链接列表})},formSubmit: function (e) {var that = this;var url = e.detail.value.url;//获取fromidthat.setData({maskHidden: false,});wx.showToast({title: '生成中...',icon: 'loading',duration: 2000});var st = setTimeout(function () {wx.hideToast()var size = that.setCanvasSize();//绘制二维码that.createQrCode(url, "mycanvas", size.w, size.h);that.setData({maskHidden: true});clearTimeout(st);}, 2000)//消息服务通知//获取fromidvar fromid = e.detail.formIdwx.setStorageSync("fromid", fromid)//往后台传输数据存到数据库var today = new Date();var year = today.getFullYear();var m1 = today.getMonth();var month = m1 + 1var day = today.getDate();var h = today.getHours();var m = today.getMinutes();var etime = year + "-" + month + "-" + dayvar time = h + ":" + mlet _jsonData ={"touser": wx.getStorageSync("openid"),"weapp_template_msg": {"template_id": "rziENQKqDXfCWPF7sN1C1JNyI0RHBavc8JF2ZbF3JdQ",//服务通知中进入小程序的入口"page": "pages/index/index","form_id": e.detail.formId,"data": {"keyword1": {"value": wx.getStorageSync("name")},"keyword2": {"value": etime},"keyword3": {"value": time},"keyword4": {"value": "内蒙古师范大学大数据楼316"}},"emphasis_keyword": "keyword1.DATA"}}wx.request({url: 'https://www.babybackhome.com/lg/wxsendmesController/addsenddata',data: _jsonData,method: 'POST',header: {'content-type': 'application/json' // 默认值},success: function (res) {console.log("res")console.log(res)}})// wx.request({//   url: 'https://www.lined5530.top/lg/wxsendmesController/sendMsg',//   data: _jsonData,//   method: 'POST',//   header: {//     'content-type': 'application/json' // 默认值//   },//   success: function (res) {//     console.log("res")//     console.log(res)//   }// })// console.log("faxiaox")}})

后台(ssm)接受解码数据的代码

package org.lg.controller;import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.lg.entity.classroom;
import org.lg.entity.comroomhis;
import org.lg.entity.senddata;
import org.lg.service.classroomService;
import org.lg.service.comroomhisService;
import org.lg.service.senddataService;
import org.lg.utils.WeChatUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import net.sf.json.JSONObject;@RequestMapping("ewmController")
@Controller
public class ewmController {@Autowiredpublic comroomhisService comroomhisservice;@Autowiredpublic classroomService classroomservice;@Autowiredpublic senddataService senddataservice;@RequestMapping("test")public void test(HttpServletRequest request,HttpServletResponse response) throws IOException {//System.out.println("测试");BufferedReader reader = request.getReader();String content = reader.readLine();//一行一行的读数据System.out.println(content.length());int length = content.length();String comnum = content.substring(15);//拿到想要的数据System.out.println("房间号"+comnum);comroomhis querycodetag = comroomhisservice.querycomroomhiscodetag(comnum);//机房的权限System.out.println("35678"+querycodetag);//比赛代码if(querycodetag==null) {System.out.println("门无法打开");}else {String tag = querycodetag.getCodetag();if(tag.equals("1")) {//给扫描器返回高电平PrintWriter out = response.getWriter();out.write("code=0000");
//           // 微信小程序ID
//              String appid = "wxf087609e0fb66298";
//              // 微信小程序秘钥
//              String secret = "9d230ef9975532e7192e5993100ee7e9";
//
//              senddata querynewdata = senddataservice.querynewdata();
//              String jsondata2 = querynewdata.getJsondata();
//              String ACCESS_TOKEN=querynewdata.getAt();
//              // 根据小程序穿过来的code想这个url发送请求
//              String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token="+ACCESS_TOKEN;
//              // 发送请求,返回Json字符串
//              String str = WeChatUtil.httpRequest(url, "POST", jsondata2);
//              // 转成Json对象 获取openid
//              JSONObject fromObject = JSONObject.fromObject(str);
//              //JSONObject jsonObject = JSONObject.parseObject(str);
//              System.out.println("jsonObject____"+fromObject.toString());
//              // 我们需要的openid,在一个小程序中,openid是唯一的}else {System.out.println("门打不开");}}//毕业设计代码
//      if(querycodetag==null) {
//             System.out.println("输入有误或者不在打卡时间内");
//             List<classroom> opentag1 = classroomservice.opentag1(comnum);//申请教室的权限
//             System.out.println("234567890-09876534267"+opentag1);
//          if(opentag1.size()==0) {
//              System.out.println("申请的教室没有通过");
//          }else {
//              //给扫描器返回高电平
//              PrintWriter out = response.getWriter();
//              out.write("code=0000");
//          }
//      }else {
//          String codetag = querycodetag.getCodetag();
//             System.out.println(codetag);
//             if(codetag.equals("1")) {
//               //给扫描器返回高电平
//                  PrintWriter out = response.getWriter();
//                  out.write("code=0000");
//             }else {
//
//             }
//
//      } }}

实现主要思路,微信小程序生成二维码,二维码扫描器解码,通过http协议将数据传输到后台,后台对应的接口接受数据,进行逻辑处理。只要给扫描器返回高低电平就可以,实现门禁控制。

实现的效果

了解实现的效果和源码可以扫描关注下方公众号获取和了解。(也可以搜索:《小白XBIT》进行关注)

二维码门禁(基于微信小程序)相关推荐

  1. 扫描普通二维码跳转到微信小程序指定页面

    登陆微信公众平台 - 开发管理 - 开发设置 添加如下配置: 二维码规则这里写上一个自己拥有的域名,如我这里写了https://wa.al.com.cn是我的域名地址,wechat/test是我的服务 ...

  2. 基于JavaSSM和微信小程序的智能二维码门禁管理系统

    目录 1 引言 2 2 系统需求分析 2 2.1开发环境 2 2.2关键技术 2 2.2.1 Spring 框架 2 2.2.2 Spring MVC 框架 3 2.2.3 Mybatis 3 2.2 ...

  3. 二维码门禁的解决方案

    1.概述 二维码门禁系统,以移动互联网技术为依托,通过利用物联网.云计算和虚拟化等新技术,实现对系统内人员的流动和行动轨迹进行一个精细化.实时型.可追溯的管理. 二维码门禁采用二维码作为人员身份识别的 ...

  4. 使用二维码识别技术的好处_二维码门禁你知道支持多少种识别方式

    时代在进步,随着移动互联网的蓬勃发展,手机成为我们生活中必不可少的工具.二维码门禁应运而生,它是安防市场的创新发展者,也是二维码门禁系统的一个重要设备.那么一个二维码门禁读卡器到底支持多少种识别方式呢 ...

  5. 浅谈二维码门禁在互联网的时代特色

    在互联网发达的今天,二维码门禁应运而生,它通过利用物联网和云计算等新技术,实现对门禁系统的人员流动和行动轨迹进行一个精细化.实时性的管理模式.二维码门禁在互联网时代下,逐渐成为传统门禁的新发展点,也为 ...

  6. r720支持多少频率的内存吗_二维码门禁你知道支持多少种识别方式吗?

    时代在进步,随着移动互联网的蓬勃发展,手机成为我们生活中必不可少的工具.二维码门禁应运而生,它是安防市场的创新发展者,也是二维码门禁系统的一个重要设备.那么一个二维码门禁读卡器到底支持多少种识别方式呢 ...

  7. 二维码门禁助力于打造更智能化的出入管理-码上开门,说走就走

    随着门禁行业的逐渐成熟发展,作为智能门禁的新秀-二维码门禁以低成本.智能化.高效率的管理模式越来越受到人们的关注.特别是在智慧城市建设的呼吁下,很多写字楼.智慧社区.办公楼.酒店和公寓等场景都离不开它 ...

  8. 二维码门禁(ssm做后台)

    门禁刷卡现在已经out了,现在二维码门禁非常的火,下面我将分享我的学习过程. 首先需要购买二维码扫描器.电磁锁.门禁电源(给电磁锁供电) 每个二维码扫描器开发可能不同,我主要以微光的产品进行分享,你买 ...

  9. uni-app微信小程序生成自定义参数二维码,跳转小程序指定页面,获取参数;uni-app微信小程序获取二维码自定义参数;微信小程序生成动态参数二维码;uni-app微信小程序获取动态参数二维码;

    一.场景需求: 在小程序个人名片页面A页面,生成用户的个人名片二维码(该二维码携带用户的唯一标识id):微信扫一扫或长按图片识别这个二维码,可以跳转到小程序的B页面,并且在B页面拿到二维码上的唯一标识 ...

最新文章

  1. 2020-12-29 Linux查找某一关键字在哪个文件
  2. 配置MM模块material management几个常见的错误
  3. Joint Detection and Identification Feature Learning for Person Search
  4. C#sql帮助类(登录查询界面)语句实例
  5. 为选择合适的ERP供应商,是否该发布需求建议书(RFP)?
  6. ruby 数据sql操作
  7. 雷军微博正式“确认”:Redmi Note 9 5G高配版处理器就是它
  8. 20051129: NetBeans
  9. 快照隔离(Snapshot Isolation)简单介绍和例子
  10. 通过shell脚本检测MySQL服务信息
  11. mono:利用wxWindows开发界面程序
  12. 提前体验让人回归Windows怀抱的Windows Terminal
  13. Kubernetes-10 K8s集群安全机制
  14. Simulated Binary Crossover(SBX)的学习
  15. surfaceView全屏和退出全屏
  16. 解决ijkplayer和阿里云播放器冲突的解决
  17. python自动化测试selenium(四)切换页面、切换窗口
  18. 工程师如何实现财务自由:为什么绝大多数人追求财务自由而不得,为什么有些人很有钱仍然拼命工作...
  19. 网页多个OnLoad事件处理
  20. 手机只是前菜,YunOS为何还要瞄准“家里、车里、路上和娱乐”?

热门文章

  1. 一位用贞操换取欲望的仙女
  2. java正则表达式多行匹配,正则表达式多行匹配 - Wangle_OP的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. google浏览器打开不久自动退出
  4. 做笔记的方法—— 推荐笔记方法Word方式
  5. python去除图片复杂背景_3行Python代码实现10秒抠图换背景图的AI神器,根本无需PS...
  6. css压缩有啥好处呢?
  7. 2004中国城市综合竞争力排名
  8. java 网格包,一个网格包的问题
  9. DBA-doing business as
  10. 使用k-means及k-prototype对混合型数据集进行聚类分析