.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.pswp.cn/news/285369.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285369.shtml
英文地址,請注明出處:http://en.pswp.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語…