当前位置:网站首页>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
边栏推荐
- Online yaml to CSV tool
- [Luogu p3295] mengmengda (parallel search) (double)
- 如何让同步/刷新的图标(el-icon-refresh)旋转起来
- 【LeetCode】5. Valid palindrome
- MySQL delete uniqueness constraint unique
- Spire. PDF for NET 8.7.2
- 哪些偏门项目可以做到?自媒体做到月赚一万以上很难吗?
- Senparc.Weixin.Sample.MP源码剖析
- Open3D 点云随机添加噪声
- How to insert data into MySQL database- How can I insert data into a MySQL database?
猜你喜欢

如何让同步/刷新的图标(el-icon-refresh)旋转起来

同事悄悄告诉我,飞书通知还能这样玩

Research notes I software engineering and calculation volume II (Chapter 1-7)

Redis高可用——主从复制、哨兵模式、集群

Spire. PDF for NET 8.7.2

Tips for using pads router

Laser slam learning record

Biased sample variance, unbiased sample variance

rsync远程同步

orgchart. JS organization chart, presenting structural data in an elegant way
随机推荐
PV静态创建和动态创建
GFS distributed file system
Spire.PDF for NET 8.7.2
Golang code checking tool
多普勒效应(多普勒频移)
21.PWM应用编程
20220703 week race: number of people who know the secret - dynamic rules (problem solution)
Online yaml to CSV tool
Use CAS instead of synchronized
CAS and synchronized knowledge
SpreadJS 15.1 CN 与 SpreadJS 15.1 EN
Asynchronous task Whenall timeout - Async task WhenAll with timeout
Cloudcompare & PCL point cloud randomly adds noise
QT a simple word document editor
俄外交部:日韩参加北约峰会影响亚洲安全稳定
【LeetCode】5. Valid Palindrome·有效回文
ts类型声明declare
Spire. PDF for NET 8.7.2
有什么不起眼却挣钱的副业?
How to insert data into MySQL database- How can I insert data into a MySQL database?