当前位置:网站首页>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
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
边栏推荐
- 【EF Core】EF Core与C# 数据类型映射关系
- 多普勒效应(多普勒频移)
- Make a short video clip number of we media film and television. Where can I download the material?
- 单商户V4.4,初心未变,实力依旧!
- 424. The longest repeated character after replacement ●●
- Fiddler Everywhere 3.2.1 Crack
- Breadth first search open turntable lock
- Différence entre hors bande et en bande
- 跟着CTF-wiki学pwn——ret2libc1
- 保研笔记一 软件工程与计算卷二(1-7章)
猜你喜欢
Bao Yan notes II software engineering and calculation volume II (Chapter 13-16)
激光slam学习记录
Senparc.Weixin.Sample.MP源码剖析
总结了 800多个 Kubectl 别名,再也不怕记不住命令了!
Switching power supply buck circuit CCM and DCM working mode
20220703 周赛:知道秘密的人数-动规(题解)
Online yaml to CSV tool
Spire. PDF for NET 8.7.2
Part III Verilog enterprise real topic of "Niuke brush Verilog"
How to get all the values stored in localstorage
随机推荐
Rasa 3. X learning series -rasa 3.2.1 new release
Why use weak pointers for delegation- Why use weak pointer for delegation?
XML配置文件(DTD详细讲解)
el-cascader的使用以及报错解决
Zhuan: in the future, such an organization can withstand the risks
Spreadjs 15.1 CN and spreadjs 15.1 en
ts类型声明declare
Use mapper: --- tkmapper
俄外交部:日韩参加北约峰会影响亚洲安全稳定
[Luogu cf487e] tours (square tree) (tree chain dissection) (line segment tree)
帶外和帶內的區別
In C#, why can't I modify the member of a value type instance in a foreach loop?
Part III Verilog enterprise real topic of "Niuke brush Verilog"
Rasa 3. X learning series -rasa x Community Edition (Free Edition) changes
上门预约服务类的App功能详解
Qcombox (rewrite) + qcompleter (auto completion, auto loading the drop-down options of qcombox, setting the background color)
My colleagues quietly told me that flying Book notification can still play like this
Rsync remote synchronization
QT QPushButton details
【LeetCode】5. Valid palindrome