.Net Core-做一个微信公众号的排队系统

Part1前言

微信扫码登录,微信扫码获取排队信息这些场景很常见,但是大家知道里面的原理是怎么实现的呢?今天我就来给大家解惑!

Part2总体流程

1浏览器请求服务器获取到二维码图片

浏览器生成唯一值uuid

通过uuid获取到带参数的二维码,将uuid作为key存进redis缓存服务器里面

服务端生成uuid返回给浏览器

通过uuid获取到带参数的二维码,将uuid作为key存进redis缓存服务器里面

2用户扫码

手机进行扫描二维码,然后手机携带uuid和用户信息向手机的服务器发送请求,手机服务器收到之后携带uuid去redis服务器查询用户。

  • 扫码登录:

查询用户成功之后返回一个Token给网页服务器,通过解析这个Token可以拿出用户的信息,然后浏览器就成功登录微信了。

  • 推送排队信息 查询用户成功之后调用模板消息,然后排队信息推送就成功了。

Part3开发

以微信扫码获取排队信息为例

第一步,获取uuid

为了简化流程,且由前端生成uuid。

第二步,获取Access token

public async Task<string> GetAccessToken(){var accesstoken = await "https://api.weixin.qq.com/cgi-bin/token".SetQueryParams(new{grant_type = "client_credential",appid = WeixinSetting.Appid,secret = WeixinSetting.Appsecret}).GetJsonAsync<AccessToken>();return accesstoken.Access_Token;}

第三步,使用uuid创建二维码ticket

public async Task<string> GetTicket(string uuid, string token){var accesstoken = await "https://api.weixin.qq.com/cgi-bin/qrcode/create".SetQueryParams(new{access_token = token}).PostJsonAsync(new{expire_seconds = 604800,action_name = "QR_STR_SCENE",action_info = new{scene = new{scene_str = uuid}}}).ReceiveJson<TicketUrl>();return accesstoken.Ticket;}

第四步,通过 ticket 换取二维码

如果自己有通过ticket生成二维码的需求,可自行处理, 如果没有可以直接调取微信公众号接口

public async Task<byte[]> GetQrCode(string ticket){return await "https://mp.weixin.qq.com/cgi-bin/showqrcode".SetQueryParams(new{ticket = ticket}).GetBytesAsync();}

完整代码如下

[HttpGet("GetQrCode")]public async Task<IActionResult> GetQrCode(string uuid){return new FileContentResult( await _qrCodeServices.ShowQrCode(uuid), "image/jpeg");}
public async Task<byte[]> ShowQrCode(string uuid){string token = await GetAccessToken();string ticket = await GetTicket(uuid, token);return await GetQrCode(ticket);}

这样我们就生成了带参数的二维码图片了

413b3c47d6f20271f40ebe8227d14482.png

第六步,微信扫码进行回调

在回调方法处理消息模板推送逻辑

[HttpPost]public async Task<string> post(){IHttpBodyControlFeature httpBodyControlFeature = Request.HttpContext.Features.Get<IHttpBodyControlFeature>();if (httpBodyControlFeature != null ){httpBodyControlFeature.AllowSynchronousIO = true;}string content = new StreamReader(Request.Body).ReadToEnd();await qrCodeServices.PushTemplateMessage(content);return "success";}
public async Task PushTemplateMessage(string content){XmlDocument doc = new XmlDocument();doc.LoadXml(content);if (doc.DocumentElement["MsgType"].InnerText != "Event") return;if (doc.DocumentElement["Event"].InnerText != "SCAN") return;string value = doc.DocumentElement["FromUserName"].InnerText;string token = await GetAccessToken();var accesstoken = await "https://api.weixin.qq.com/cgi-bin/message/template/send".SetQueryParams(new{access_token = token}).PostJsonAsync(new{touser = value,template_id = "i4h4yHvgMgIoJ8-Mr49XcpbhMxmRXFJ5EF5DoOTGOMc",data = new{first = new{value = "当前排队位置",color = "#173177"},keyword1 = new{value = "70",color = "#173177"},keyword2 = new{value = "40分钟",color = "#173177"}}});}

这样以微信扫码获取排队信息就成功了

0eb0923cec94eb62bf8dd55c3cf854e2.jpeg

Part4总结

文章来源于生活中的点点滴滴,这也是我的即兴使用,大家要是有更好的使用技巧,欢迎交流,独乐乐不如众乐乐,本篇就说到这里啦,希望对您有帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 实现 csv文件转换成json文件

# -*- coding:utf-8 -*- # csv转换成json import csv import jsonfile_path "district.csv" # 指定encodeingutf-8中文防止乱码 csvfile open(file_path,r, encodingutf-8) jsonfile open(district.json, w,encodingutf-8)# 指定列名 fieldnames ("code&q…

【292天】跃迁之路——程序员高效学习方法论探索系列(实验阶段50-2017.11.24)...

实验说明 从2017.10.6起&#xff0c;开启这个系列&#xff0c;目标只有一个&#xff1a;探索新的学习方法&#xff0c;实现跃迁式成长实验期2年&#xff08;2017.10.06 - 2019.10.06&#xff09;我将以自己为实验对象。我将开源我的学习方法&#xff0c;方法不断更新迭代&#…

C语言试题123之有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比第 3 个人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个

1、题目 题目:有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比第 3 个人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个人大两岁。最后 问第一个人,他说是 10 岁。请问第五个人多大? 分析:利用递归的方法,递…

【ArcGIS Engine二次开发】地图操作(1):加载Mxd地图文档

在ArcGIS中,以mxd作为扩展名的文件叫地图文档。地图文档中只是包含图层的引用,即存储当前地图的图层路径、符号、状态、修饰等信息,并不存储真实的数据层。 ArcGIS Engine中有常见两种加载地图文档的方法:LoadMxFile方法和IMapDocument方法,案例效果如下图所示: 打开VS20…

JAVA的extends用法

理解继承是理解面向对象程序设计的关键。在Java中&#xff0c;通过关键字extends继承一个已有的类&#xff0c;被继承的类称为父类(超类&#xff0c;基类)&#xff0c;新的类称为子类(派生类)。在Java中不允许多继承。&#xff08;1&#xff09;继承 [java] view plaincopy cla…

C++实现静态顺序表的增删查改以及初始化

C实现静态顺序表的增删查改顺序表&#xff1a;用一段地址连续的存储单元依s次存储数据元素的线性结构&#xff0c;是线性表的一种。//SeqList.h#pragma once#include <assert.h> #include <string.h>#define MAX_SIZE 5 typedef int DataType;//定义顺序表结构体 t…

CSS伪元素 after 实现鼠标悬浮信息及动画效果

<p class"titleinfo_title title_hover" data-content" 04 喜看稻菽千重浪--记首届国家最高科技奖获得者袁隆平 等三篇"> 04 喜看稻菽千重浪--记首届国家最高科技奖获得者袁隆平 等三篇 </p> 强制多行显示效果&#xff1a; <style type&…

记一次 .NET 差旅管理后台 CPU 爆高分析

一&#xff1a;背景 1. 讲故事前段时间有位朋友在微信上找到我&#xff0c;说他的 web 系统 cpu 运行一段时候后就爆高了&#xff0c;让我帮忙看一下是怎么回事&#xff0c;那就看吧&#xff0c;声明一下&#xff0c;我看 dump 是免费的&#xff0c;主要是锤炼自己技术&#xf…

C语言试题124之给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字

C语言试题124之给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字 47/100 发布文章 u011068702 未选择任何文件 new ✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模…

C#数组原来这么简单,你学废了吗?

文章目录 5.1 数组的概念5.2 数组声明与初始化5.3 数组的基本操作与排序5.4 多维数组小结5.1 数组的概念 1.数组与数组元素 数组是相同类型的对象的集合。 一个数组可以含有若干个下标变量(或称数组元素),下标也叫索引(Index),用来指出某个数组元素在数组中的位置。 数组…

数据基本类型以及相关举例

数据基本类型&#xff1a; 整型&#xff1a;字节型byte 短整型short 整型int 浮点类型&#xff1a;长整形long 浮点型 fioat 双精度性double 字符型&#xff1a;char 布尔型&#xff1a;boolean引用类型&#xff08; reference&#xff09;&#xff1a;类class 接口inte…

android--Activity有返回值的跳转

AndroidManifest.xml <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"com.hanqi.test4"><applicationandroid:allowBackup"true"and…

[转]ES6、ES7、ES8、ES9、ES10新特性一览 (个人整理,学习笔记)

目录 1.ES6新特性&#xff08;2015&#xff09; 1.1模块化(Module) 1.1.1导出(export) 1.1.2导入(import) 1.2箭头&#xff08;Arrow&#xff09;函数 1.2.1箭头函数的结构 1.3默认参数 1.4模板字符串 1.5.结构赋值 1.5.1数组的结构赋值 1.5.2对象的结构赋值 1.6延…

使用ML.NET+ONNX预训练模型整活B站经典《华强买瓜》

前言最近在看微软开源的机器学习框架ML.NET使用别人的预训练模型(开放神经网络交换格式.onnx)来识别图像&#xff0c;然后逛github发现一个好玩的repo。决定整活一期博客。首先还是稍微科普一下机器学习相关的知识&#xff0c;这一块.NET虽然很早就开源了ML.NET框架&#xff0c…

C语言试题125之一个 5 位数,判断它是不是回文数。即 12321 是回文数,个位与万位相同,十位与千位相同

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:一个 5 位数,判断它是不是回文数。即 12321 是回文数,个位与万位相同,十位与千位相…

不会C# Winform用户界面设计?是因为没有掌握这些控件(建议收藏)

文章目录 6.1 常用控件6.1.1 单选按钮(RadioButton)6.1.2 复选框(CheckBox)6.1.3 框架1. 面板控件Panel2. 分组框GroupBox3. TabControl控件6.1.4 应用实例6. 2 列表框和组合框6.2.1 列表框(ListBox)6.2.2 组合框(ComboBox )6.2.3 应用实例6.3 用户交互界面6.3.1 滚动条和进度条…

痞子衡嵌入式:ARM Cortex-M内核那些事(2)- 第一款微控制器

大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。今天痞子衡给大家介绍的是第一款Cortex-M微控制器。 1.天生荣耀&#xff1a;ARM Cortex-M处理器由来 ARM公司自2004年推出ARMv7内核架构时&#xff0c;摒弃了以往"ARM数字"这种处理器命名方法&#xff…

SQL Server在更改计算机名后的设置

把原来的账号删除 再添加现有的账号 添加权限 搞定了上面的账号配置&#xff0c;接下来就是设置服务器名称 参考&#xff1a;http://www.cnblogs.com/EasonJim/p/6114249.html 后话&#xff1a;当初为了设置这个问题&#xff0c;选择了重装SQL Server&#xff0c;但是也是无用的…

Jupyter Notebook 入门指南

简介 Jupyter Notebook&#xff08;此前被称为 IPython notebook&#xff09;是一个交互式笔记本&#xff0c;支持运行 40 多种编程语言。 Jupyter Notebook 的本质是一个 Web 应用程序&#xff0c;便于创建和共享文学化程序文档&#xff0c;支持实时代码&#xff0c;数学方程…

C语言试题127之 100 之内的素数

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:求 100 之内的素数 2 、温馨提示 想获取更多C语言题目请猛搓这里==========》200个C语…