当前位置:网站首页>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
边栏推荐
- 4点告诉你实时聊天与聊天机器人组合的优势
- 11gR2 Database Services for &quot; Policy&quot; and &quot; Administrator&quot; Managed databases (file I
- Redis高可用——主从复制、哨兵模式、集群
- Biased sample variance, unbiased sample variance
- Rasa 3. X learning series -rasa x Community Edition (Free Edition) changes
- UVA11294-Wedding(2-SAT)
- Fiddler Everywhere 3.2.1 Crack
- Effet Doppler (déplacement de fréquence Doppler)
- idea 连接mysql ,直接贴配置文件的url 比较方便
- 如何获取localStorage中存储的所有值
猜你喜欢

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

激光slam学习记录

Dynamic planning: robbing families and houses

Fiddler Everywhere 3.2.1 Crack

4 points tell you the advantages of the combination of real-time chat and chat robots

CAS and synchronized knowledge

The use of El cascader and the solution of error reporting

XML配置文件(DTD详细讲解)

【LeetCode】5. Valid Palindrome·有效回文

18.(arcgis api for js篇)arcgis api for js点采集(SketchViewModel)
随机推荐
idea 连接mysql ,直接贴配置文件的url 比较方便
yate. conf
The PostgreSQL column reference 'ID' is ambiguous - PostgreSQL column reference'id'is ambiguous
shardingsphere源码解析
STM32__06—单通道ADC
Introduction to JVM
VBA fast switching sheet
QT a simple word document editor
【EF Core】EF Core与C# 数据类型映射关系
MySQL delete uniqueness constraint unique
When to use useImperativeHandle, useLayoutEffect, and useDebugValue
GFS distributed file system
Convert Chinese into pinyin
Tips for using pads router
Naoqi robot summary 26
保研笔记二 软件工程与计算卷二(13-16章)
Golang code checking tool
CIS benchmark tool Kube bench
跟着CTF-wiki学pwn——ret2libc1
Breadth first search open turntable lock