当前位置:网站首页>Senparc. Weixin. Sample. MP source code analysis
Senparc. Weixin. Sample. MP source code analysis
2022-07-05 23:51:00 【A Sheng】
Senparc.Weixin.Sample.MP It is a sample of wechat official account .NET6 Source code , Project profile appsettings.json And the construction of wechat official account test environment : Wechat official account debugging and Natapp Environment building . Next, from the project structure , Project application and project source code 3 Explain from different angles .
One . From the perspective of project structure
The overall structure of the project code is as follows : The key part is MessageHandlers Message processor section , Include message context 、 Message processor and event processor . After the project is started, the interface is :
Two . Application angle
1. The intuitive process of data flow
First of all, understand the wechat client 、 Wechat servers and third-party websites 3 The data flow relationship between , Let's introduce the process of data flow by taking the text sent by the user as an example :
Users send... Through wechat client OpenId The wechat server sends the text to the third-party website . Of course, if there is no third-party website , That is to say, there is no secondary development of official account , Then the user will not get any response message Third party websites process messages , For example, get the user's OpenId Etc The third-party website returns the processed message to the wechat server Wechat server forwards messages from third-party websites to wechat clients In this way, the user will receive a message from the wechat client The message types of wechat mainly include request messages and response messages , The request message is the message sent by the wechat server to the website , The response message is the message sent by the website to the wechat server . The specific request message and response message contain the following types :
2. Code process of data flow
(1) Official account message simulator
The input and output contents of official account message simulator are as follows :
URL: adopt Natapp Mapped domain names , namely http://fengling.nat300.top -> 127.0.0.1:8080. Token、AppId and AESKey: Reference resources appsettings.json file . type : Text 、 Location 、 picture 、 voice 、 video 、 Time push . Content :OPENID. The text message processor processes the text .
(2)Post(PostModel postModel) Method
After the user sends a message , Wechat platform automatic Post A request to method public async Task In this method, you can customize MessageHandler To deal with :
var messageHandler = new CustomMessageHandler(await Request.GetRequestMemoryStreamAsync(), postModel, maxRecordCount);
The real wechat processing method is :
public async Task ExecuteAsync(CancellationToken cancellationToken)
(3)OnTextRequestAsync(RequestMessageText requestMessage) Method This method can respond according to the input text , It can be matching keywords 、 Regular expressions 、 Don't reply , Or default response .
3、 ... and . Source angle
1.Program.cs Code
First of all Senparc.Weixin SDK Relevant codes of overall registration :
// To use local caching, you must add
builder.Services.AddMemoryCache();
// Senparc.Weixin register ( must )
builder.Services.AddSenparcWeixinServices(builder.Configuration);
...
var senparcWeixinSetting = app.Services.GetService<IOptions<SenparcWeixinSetting>>()!.Value;
// Enable wechat configuration ( must )
var registerService = app.UseSenparcWeixin(app.Environment,
null /* Not for null Coverage appsettings Medium SenpacSetting To configure */,
null /* Not for null Coverage appsettings Medium SenpacWeixinSetting To configure */,
register => { /*CO2NET Global configuration */ },
(register, weixinSetting) =>
{
// Register official account information ( It can be executed multiple times , Register multiple official account )
register.RegisterMpAccount(weixinSetting, "XXX official account ");
});
......
// Using official account MessageHandler middleware ( There is no need to create Controller)
app.UseMessageHandlerForMp("/WeixinAsync", CustomMessageHandler.GenerateMessageHandler, options =>
{
options.AccountSettingFunc = context => Senparc.Weixin.Config.SenparcWeixinSetting;
});
(1)builder.Services.AddMemoryCache()
The framework supports memory caching 、Redis、Memcached And other caching strategies .
(2)builder.Services.AddSenparcWeixinServices(builder.Configuration)
Realization Senparc.Weixin Registration of .
(3)app.UseSenparcWeixin()
This method integrates CON2ET Global registration and Senparc.Weixin SDK Wechat registration process .
(4)app.UseMessageHandlerForMp
Use MessageHandler To configure , The asynchronous method will be used by default messageHandler.ExecuteAsync().
2.WeixinController.cs Code
(1)public ActionResult Get(PostModel postModel, string echostr)
This method is mainly used for wechat background address verification , It's not used at other times .
(2)public async Task<ActionResult> Post(PostModel postModel)
This method is to forward messages by wechat server [XML] To website , Wait for the website to process and return the message [XML] The process of sending to wechat server .
(3)messageHandler.OmitRepeatedMessage = true;
When the website cannot respond to the request of wechat server in time , Wechat server will continuously send multiple identical MsgId Message to the website , To prevent packet loss . This situation requires the use of MsgId De duplicate the news , Otherwise, the website will execute the same request many times . It should be noted that , For multiple lines with the same MsgId Reply multiple times to the request message of , The client can only receive the response message corresponding to the last retransmission of the wechat server .
(4)messageHandler.DefaultMessageHandlerAsyncEvent = DefaultMessageHandlerAsyncEvent.SelfSynicMethod
;
When the synchronization method is overridden , And the asynchronous method is not overridden , Try calling the synchronization method .
3.CustomMessageContext.cs Code
(1)CustomMessageContext
CustomMessageContext Is the context of the message , The writing method is basically fixed , You can use it by moving it directly . The message context is used to record the messages sent by a single user 、 Record of received messages , Even if different wechat official account send different messages at the same time , There will be no interference between the two , Because the context of the two is completely isolated .
(2)CustomMessageContext_MessageContextRemoved
When the context expires , The time triggered when it is removed . according to WeixinContext Algorithm in , The expired messages here will be cleared before the next request is executed after expiration .
4.CustomMessageHandler.cs Code
CustomMessageHandler and CustomMessageHandler_Events yes CustomMessageHandler Class 2 Partial classes , The former deals with non event type messages , For example, send text 、 Image, etc , The latter deals with event type messages , For example, click event 、 Subscription events ( Subscribe and unsubscribe ) etc. . The request messages here are all ordinary messages :
5.CustomMessageHandler_Events.cs Code
All the request messages here are event push messages , Event push messages are divided into 3 Large type : Routine events [ Official account basic function return event ], Menu events [ Various types of official account menu return events ], Application events [ The application module returns an event ]:
reference :
[1]Senparc.Weixin.Sample.MP.sln:WeiXinMPSDK\Samples\MP\Senparc.Weixin.Sample.MP.sln
[2]Senparc.Weixin SDK Source code :https://github.com/JeffreySu/WeiXinMPSDK
[3]Senparc.Weixin.MP SDK Wechat public platform development course ( 23 ): stay .NET Core 2.0/3.0 Use in MessageHandler middleware :https://www.cnblogs.com/szw/p/Wechat-MessageHandler-Middleware.html
[4] Wechat development depth analysis : official account 、 Efficient development of small programs :http://book.weixin.senparc.com/BookHelper
[5] Wechat public platform interface debugging tool :https://mp.weixin.qq.com/debug
Artificial intelligence dry goods recommendation Focus on technology sharing in the field of artificial intelligence
Game metauniverse Focus on technology sharing in the game field
边栏推荐
- C reflection and type
- 教你在HbuilderX上使用模拟器运行uni-app,良心教学!!!
- 亲测可用fiddler手机抓包配置代理后没有网络
- openssl-1.0.2k版本升级openssl-1.1.1p
- Spire.PDF for NET 8.7.2
- Brushless drive design -- on MOS drive circuit
- Problem solving win10 quickly open ipynb file
- [EF core] mapping relationship between EF core and C data type
- Difference between out of band and in band
- 15 MySQL stored procedures and functions
猜你喜欢
el-cascader的使用以及报错解决
698. Divided into k equal subsets ●●
Initialize your vector & initializer with a list_ List introduction
如何让同步/刷新的图标(el-icon-refresh)旋转起来
Bao Yan notes II software engineering and calculation volume II (Chapter 13-16)
My colleagues quietly told me that flying Book notification can still play like this
98. Verify the binary search tree ●●
数据库遇到的问题
Rasa 3. X learning series -rasa 3.2.1 new release
Tips for using pads router
随机推荐
UVA11294-Wedding(2-SAT)
Make a short video clip number of we media film and television. Where can I download the material?
【luogu P3295】萌萌哒(并查集)(倍增)
Redis高可用——主从复制、哨兵模式、集群
CAS and synchronized knowledge
微信小程序---WXML 模板语法(附带笔记文档)
Opencvsharp (C openCV) shape detection and recognition (with source code)
TS type declaration
激光slam学习记录
如何提升口才
保研笔记四 软件工程与计算卷二(8-12章)
20. Migrate freetype font library
GFS Distributed File System
18.(arcgis api for js篇)arcgis api for js点采集(SketchViewModel)
【LeetCode】5. Valid palindrome
el-cascader的使用以及报错解决
Online yaml to CSV tool
4点告诉你实时聊天与聊天机器人组合的优势
传输层协议------UDP协议
Rasa 3.x 学习系列-Rasa 3.2.1 新版本发布