当前位置:网站首页>Source code analysis of senparc.weixin.sample.mp
Source code analysis of senparc.weixin.sample.mp
2022-07-29 09:32:00 【Dotnet cross platform】
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 TaskPost(PostModel postModel), And wait for a response XML:
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
边栏推荐
- 如何为OpenHarmony做贡献
- Webassembly 2022 questionnaire results are fresh
- 怎么样的框架对于开发者是友好的?
- [machine learning] logistic regression code exercise
- 用户身份标识与账号体系实践
- 网络安全(6)
- OpenCV图像处理基础操作
- The gold content of PMP certificate has been increased again and included in the scope of Beijing work residence permit
- 远程连接windows版本服务器redis的配置文件设置
- 不用Swagger,那我用啥?
猜你喜欢

MySQL converts some table names to uppercase

WebAssembly 2022 问卷调查结果新鲜出炉

MySQL事务与MVCC如何实现的隔离级别

Nucleic acid scanning code registration experience (how to improve the correct character recognition rate of OCR)

PyQt5快速开发与实战 6.1 好软件的三个维度 && 6.2 PyQt5中的布局管理 && 6.3 PyQt5的绝对位置布局

Opencv introductory basic learning

Behind 100000 visits...

网络安全(6)

先序遍历/后序遍历确定树的大致形态

附录2-一些简单的练习
随机推荐
C语言的传参方式(int x)(int *x)(int &x)
如何介绍自己的项目经验?
No swagger, what do I use?
Nutnews developed based on arkui ETS
Asp graduation project - based on C # +asp Design and implementation of enterprise investment value analysis system based on. Net + sqlserver (graduation thesis + program source code) -- enterprise in
201803-3 Full Score solution of CCF URL mapping
Unity3d hodgepodge
使用cpolar发布树莓派网页(cpolar功能的完善)
[Apple Developer account]06 after transferring the developer account, the annual fee of the developer is automatically renewed
Introduction to translation professional qualification (level) examination
Excellent package volume optimization tutorial
Will the modified data be updated when it is the same as the original data?
高智伟:数据管理赋能交通行业数字化转型
How to change MySQL into Chinese
浅谈契约测试
【机器学习】逻辑回归代码练习
原型链继承和构造函数继承的 “毛病”
How to realize the isolation level between MySQL transactions and mvcc
Safety is no longer the only selling point. Test drive "slash youth" Volvo C40
Retinal Vessel Segmentation via a Semantics and Multi-Scale Aggregation Network