微信公众平台SDK核心库的详细介绍
导读:收集整理的这篇文章主要介绍了微信公众平台SDK核心库的详细介绍,觉得挺不错的,现在分享给大家,也给大家做个参考。NuGet包地址: 由于来的OYMLCN.WeChat存在深度封装,并没有做完整的测试,对于使用不友好,现已重新构建SDK...
收集整理的这篇文章主要介绍了微信公众平台SDK核心库的详细介绍,觉得挺不错的,现在分享给大家,也给大家做个参考。NuGet包地址:由于来的OYMLCN.WeChat存在深度封装,并没有做完整的测试,对于使用不友好,现已重新构建SDK的接收消息被动回复模块。
现已做到最大程度的简易化及模块化,每个模块都已完成单元测试(根据微信说明文档的示例内容)。
接下来将会重新构建微信接口的调用模块,将会在基本完成后发布。
类jquery操作的方式将会在所有功能完善并完成测试以后再整合到OYMLCN.WeChat当中。
主要使用方式:
VAR postModel = this.Request.GetQuery().IsValidRequest(config);
if (postModel == null)return Content("");
return Content(new DemoHandler(WeChatRequest.Build(Config, postModel, this.Request.GetBody().ReadToEnd())).Result);
Config是基础接口配置OYMLCN.WeChat.Config的实例,参数依次为【公众平台微信号】、【AppId】、【AppSecret】、【Token】以及可选的【AESKey】。 配置的参数顺序相对于以往版本有变更,若报错无法验证签名有效性则需要检查参数的赋值顺序。Request.GetQuery()是对Request的扩展方法,封装在依赖包OYMLCN.Web当中,主要获取请求附带的参数。若在ASP.Net Web Api当中使用,需要安装兼容扩展包OYMLCN.Web.Api。Request.GetBody()主要是获取请求的正文,相当于Request.Body,为了使代码兼容WebApi而设置的一个方法。ReadToEnd()是Stream的扩展方法,主要是读取Stream中的文本内容。IsValidRequest(Config)是Dictionarystring, string>
的扩展方法,用于验证请求的有效性并获取PostModel参数。验证失败则返回null。当前示例是使用Handler处理的。public class DemoHandler : OYMLCN.WeChat.MessageHandler{
public DemoHandler(OYMLCN.WeChat.WeChatRequest request) : base(request) {
}
public override OYMLCN.WeChat.WeChatResponse DefaultResponSEMessage(OYMLCN.WeChat.WeChatRequest request) {
return OYMLCN.WeChat.WeChatResponse.ResponseText(request, "Success");
}
}
若需求简单,可不使用Handler来处理,使用方式如下:
OYMLCN.WeChat.Config config = new OYMLCN.WeChat.Config("微信账号名", "AppId", "AppSecret", "Token", "AESKey");
OYMLCN.WeChat.PostModel postModel = this.Request.GetQuery().IsValidRequest(config);
string body = this.Request.GetBody().ReadToEnd();
OYMLCN.WeChat.WeChatRequest request = OYMLCN.WeChat.WeChatRequest.Build(config, postModel, body);
OYMLCN.WeChat.WeChatResponse response = null;
if (request.MessageTyPE == OYMLCN.WeChat.WeChatRequestMessageType.Text) response = OYMLCN.WeChat.WeChatResponse.ResponseText(request, "我是测试");
else if (request.MessageType == OYMLCN.WeChat.WeChatRequestMessageType.Event)if (request.EventType == OYMLCN.WeChat.WeChatRequestEventType.Event关注) response = OYMLCN.WeChat.WeChatResponse.ResponseText(request, "你来晚了");
if (response != null)return Content(response.Result);
return Content("");
附上单元测试代码,基本用法均已展现。
1 using System;
2 using System.Collections.Generic;
3 using Microsoft.VisualStudio.testTools.UnITTesting;
4 using System.Linq;
5 6 namespace OYMLCN.WeChat.Core.Test 7 {
8 [TestClass] 9 public class UnitTest 10 {
11 Config Config = new Config("wxName", "appId", "appSecret", "token", "aes");
12 PostModel PostModel = PostModel.Build(new Dictionarystring, string>
() 13 {
14 {
"nonce","1362870167" }
, 15 {
"openid","oOk2XjhrbcHP3tGgzDGAVHppo3Bs" }
, 16 {
"signature","7940891098b505c22f99b0e3708627ec715aa832" }
, 17 {
"timestamp","1496218735" }
18 }
);
19 20 [TestMethod] 21 public void WeChatRequestTest() 22 {
23 string textMsg = @"XMl>
24 ToUserName>
![CDATA[toUser]]>
/ToUserName>
25 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
26 CreateTime>
1348831860/CreateTime>
27 msgType>
![CDATA[text]]>
/MsgType>
28 Content>
![CDATA[this is a test]]>
/Content>
29 MsgId>
1234567890123456/MsgId>
30 /xml>
";
31 32 var request = WeChatRequest.Build(Config, PostModel, textMsg);
33 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Text);
34 Assert.AreEqual(request.ToUserName, "toUser");
35 Assert.AreEqual(request.FromUserName, "fromUser");
36 Assert.AreEqual(request.CreateTime, 1348831860);
37 Assert.AreEqual(request.MsgId, 1234567890123456);
38 Assert.AreEqual(request.MessageText.Content, "this is a test");
39 40 string imgMsg = @"xml>
41 ToUserName>
![CDATA[toUser]]>
/ToUserName>
42 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
43 CreateTime>
1348831860/CreateTime>
44 MsgType>
![CDATA[image]]>
/MsgType>
45 PicUrl>
![CDATA[this is a url]]>
/PicUrl>
46 Mediaid>
![CDATA[media_id]]>
/MediaId>
47 MsgId>
1234567890123456/MsgId>
48 /xml>
";
49 request = WeChatRequest.Build(Config, PostModel, imgMsg);
50 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Image);
51 Assert.AreEqual(request.ToUserName, "toUser");
52 Assert.AreEqual(request.FromUserName, "fromUser");
53 Assert.AreEqual(request.CreateTime, 1348831860);
54 Assert.AreEqual(request.Messageimage.PicUrl, "this is a url");
55 Assert.AreEqual(request.MessageImage.MediaId, "media_id");
56 Assert.AreEqual(request.MsgId, 1234567890123456);
57 58 string voiceMsg = @"xml>
59 ToUserName>
![CDATA[toUser]]>
/ToUserName>
60 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
61 CreateTime>
1357290913/CreateTime>
62 MsgType>
![CDATA[voice]]>
/MsgType>
63 MediaId>
![CDATA[media_id]]>
/MediaId>
64 Format>
![CDATA[Format]]>
/Format>
65 MsgId>
1234567890123456/MsgId>
66 /xml>
";
67 request = WeChatRequest.Build(Config, PostModel, voiceMsg);
68 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Voice);
69 Assert.AreEqual(request.ToUserName, "toUser");
70 Assert.AreEqual(request.FromUserName, "fromUser");
71 Assert.AreEqual(request.CreateTime, 1357290913);
72 Assert.AreEqual(request.MessageVoice.MediaId, "media_id");
73 Assert.AreEqual(request.MessageVoice.Format, "Format");
74 Assert.AreEqual(request.MsgId, 1234567890123456);
75 76 voiceMsg = @"xml>
77 ToUserName>
![CDATA[toUser]]>
/ToUserName>
78 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
79 CreateTime>
1357290913/CreateTime>
80 MsgType>
![CDATA[voice]]>
/MsgType>
81 MediaId>
![CDATA[media_id]]>
/MediaId>
82 Format>
![CDATA[Format]]>
/Format>
83 Recognition>
![CDATA[腾讯微信团队]]>
/Recognition>
84 MsgId>
1234567890123456/MsgId>
85 /xml>
";
86 request = WeChatRequest.Build(Config, PostModel, voiceMsg);
87 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Voice);
88 Assert.AreEqual(request.ToUserName, "toUser");
89 Assert.AreEqual(request.FromUserName, "fromUser");
90 Assert.AreEqual(request.CreateTime, 1357290913);
91 Assert.AreEqual(request.MessageVoice.MediaId, "media_id");
92 Assert.AreEqual(request.MessageVoice.Format, "Format");
93 Assert.AreEqual(request.MessageVoice.Recognition, "腾讯微信团队");
94 Assert.AreEqual(request.MsgId, 1234567890123456);
95 96 var videoMsg = @"xml>
97 ToUserName>
![CDATA[toUser]]>
/ToUserName>
98 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
99 CreateTime>
1357290913/CreateTime>
100 MsgType>
![CDATA[video]]>
/MsgType>
101 MediaId>
![CDATA[media_id]]>
/MediaId>
102 ThumbMediaId>
![CDATA[thumb_media_id]]>
/ThumbMediaId>
103 MsgId>
1234567890123456/MsgId>
104 /xml>
";
105 request = WeChatRequest.Build(Config, PostModel, videoMsg);
106 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Video);
107 Assert.AreEqual(request.ToUserName, "toUser");
108 Assert.AreEqual(request.FromUserName, "fromUser");
109 Assert.AreEqual(request.CreateTime, 1357290913);
110 Assert.AreEqual(request.MessageVideo.MediaId, "media_id");
111 Assert.AreEqual(request.MessageVideo.ThumbMediaId, "thumb_media_id");
112 Assert.AreEqual(request.MsgId, 1234567890123456);
113 114 videoMsg = @"xml>
115 ToUserName>
![CDATA[toUser]]>
/ToUserName>
116 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
117 CreateTime>
1357290913/CreateTime>
118 MsgType>
![CDATA[shortvideo]]>
/MsgType>
119 MediaId>
![CDATA[media_id]]>
/MediaId>
120 ThumbMediaId>
![CDATA[thumb_media_id]]>
/ThumbMediaId>
121 MsgId>
1234567890123456/MsgId>
122 /xml>
";
123 request = WeChatRequest.Build(Config, PostModel, videoMsg);
124 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.ShortVideo);
125 Assert.AreEqual(request.ToUserName, "toUser");
126 Assert.AreEqual(request.FromUserName, "fromUser");
127 Assert.AreEqual(request.CreateTime, 1357290913);
128 Assert.AreEqual(request.MessageVideo.MediaId, "media_id");
129 Assert.AreEqual(request.MessageVideo.ThumbMediaId, "thumb_media_id");
130 Assert.AreEqual(request.MsgId, 1234567890123456);
131 132 var locationMsg = @"xml>
133 ToUserName>
![CDATA[toUser]]>
/ToUserName>
134 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
135 CreateTime>
1351776360/CreateTime>
136 MsgType>
![CDATA[location]]>
/MsgType>
137 Location_X>
23.134521/Location_X>
138 Location_Y>
113.358803/Location_Y>
139 Scale>
20/Scale>
140 Label>
![CDATA[位置信息]]>
/Label>
141 MsgId>
1234567890123456/MsgId>
142 /xml>
";
143 request = WeChatRequest.Build(Config, PostModel, locationMsg);
144 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Location);
145 Assert.AreEqual(request.ToUserName, "toUser");
146 Assert.AreEqual(request.FromUserName, "fromUser");
147 Assert.AreEqual(request.CreateTime, 1351776360);
148 Assert.AreEqual(request.MessageLocation.Location_X, 23.134521);
149 Assert.AreEqual(request.MessageLocation.Location_Y, 113.358803);
150 Assert.AreEqual(request.MessageLocation.Scale, 20);
151 Assert.AreEqual(request.MessageLocation.Label, "位置信息");
152 Assert.AreEqual(request.MsgId, 1234567890123456);
153 154 var linkMsg = @"xml>
155 ToUserName>
![CDATA[toUser]]>
/ToUserName>
156 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
157 CreateTime>
1351776360/CreateTime>
158 MsgType>
![CDATA[link]]>
/MsgType>
159 Title>
![CDATA[公众平台官网链接]]>
/Title>
160 Description>
![CDATA[公众平台官网链接]]>
/Description>
161 Url>
![CDATA[url]]>
/Url>
162 MsgId>
1234567890123456/MsgId>
163 /xml>
";
164 request = WeChatRequest.Build(Config, PostModel, linkMsg);
165 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Link);
166 Assert.AreEqual(request.ToUserName, "toUser");
167 Assert.AreEqual(request.FromUserName, "fromUser");
168 Assert.AreEqual(request.CreateTime, 1351776360);
169 Assert.AreEqual(request.MessageLink.Title, "公众平台官网链接");
170 Assert.AreEqual(request.MessageLink.Description, "公众平台官网链接");
171 Assert.AreEqual(request.MessageLink.Url, "url");
172 Assert.AreEqual(request.MsgId, 1234567890123456);
173 174 }
175 176 [TestMethod] 177 public void WeChatRequestEventTest() 178 {
179 var subscribeEvent = @"xml>
180 ToUserName>
![CDATA[toUser]]>
/ToUserName>
181 FromUserName>
![CDATA[FromUser]]>
/FromUserName>
182 CreateTime>
123456789/CreateTime>
183 MsgType>
![CDATA[event]]>
/MsgType>
184 Event>
![CDATA[subscribe]]>
/Event>
185 /xml>
";
186 var request = WeChatRequest.Build(Config, PostModel, subscribeEvent);
187 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
188 Assert.AreEqual(request.EventType, WeChatRequestEventType.Event关注);
189 Assert.AreEqual(request.ToUserName, "toUser");
190 Assert.AreEqual(request.FromUserName, "FromUser");
191 Assert.AreEqual(request.CreateTime, 123456789);
192 Assert.IsTrue(request.Event关注);
193 194 subscribeEvent = @"xml>
195 ToUserName>
![CDATA[toUser]]>
/ToUserName>
196 FromUserName>
![CDATA[FromUser]]>
/FromUserName>
197 CreateTime>
123456789/CreateTime>
198 MsgType>
![CDATA[event]]>
/MsgType>
199 Event>
![CDATA[unsubscribe]]>
/Event>
200 /xml>
";
201 request = WeChatRequest.Build(Config, PostModel, subscribeEvent);
202 Assert.IsTrue(request.Event取消关注);
203 204 subscribeEvent = @"xml>
205 ToUserName>
![CDATA[toUser]]>
/ToUserName>
206 FromUserName>
![CDATA[FromUser]]>
/FromUserName>
207 CreateTime>
123456789/CreateTime>
208 MsgType>
![CDATA[event]]>
/MsgType>
209 Event>
![CDATA[subscribe]]>
/Event>
210 EventKey>
![CDATA[qrscene_123123]]>
/EventKey>
211 Ticket>
![CDATA[TICKET]]>
/Ticket>
212 /xml>
";
213 request = WeChatRequest.Build(Config, PostModel, subscribeEvent);
214 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
215 Assert.AreEqual(request.EventType, WeChatRequestEventType.Event关注);
216 Assert.AreEqual(request.ToUserName, "toUser");
217 Assert.AreEqual(request.FromUserName, "FromUser");
218 Assert.AreEqual(request.CreateTime, 123456789);
219 Assert.AreEqual(request.Event扫描带参数二维码.EventKey, "qrscene_123123");
220 Assert.AreEqual(request.Event扫描带参数二维码.SceneId, "123123");
221 Assert.AreEqual(request.Event扫描带参数二维码.Ticket, "TICKET");
222 223 subscribeEvent = @"xml>
224 ToUserName>
![CDATA[toUser]]>
/ToUserName>
225 FromUserName>
![CDATA[FromUser]]>
/FromUserName>
226 CreateTime>
123456789/CreateTime>
227 MsgType>
![CDATA[event]]>
/MsgType>
228 Event>
![CDATA[SCAN]]>
/Event>
229 EventKey>
![CDATA[SCENE_VALUE]]>
/EventKey>
230 Ticket>
![CDATA[TICKET]]>
/Ticket>
231 /xml>
";
232 request = WeChatRequest.Build(Config, PostModel, subscribeEvent);
233 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
234 Assert.AreEqual(request.EventType, WeChatRequestEventType.Event扫描带参数二维码);
235 Assert.AreEqual(request.ToUserName, "toUser");
236 Assert.AreEqual(request.FromUserName, "FromUser");
237 Assert.AreEqual(request.CreateTime, 123456789);
238 Assert.AreEqual(request.Event扫描带参数二维码.EventKey, "SCENE_VALUE");
239 Assert.AreEqual(request.Event扫描带参数二维码.SceneId, "SCENE_VALUE");
240 Assert.AreEqual(request.Event扫描带参数二维码.Ticket, "TICKET");
241 242 243 var locationEvent = @"xml>
244 ToUserName>
![CDATA[toUser]]>
/ToUserName>
245 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
246 CreateTime>
123456789/CreateTime>
247 MsgType>
![CDATA[event]]>
/MsgType>
248 Event>
![CDATA[LOCATION]]>
/Event>
249 Latitude>
23.137466/Latitude>
250 Longitude>
113.352425/Longitude>
251 PRecision>
119.385040/Precision>
252 /xml>
";
253 request = WeChatRequest.Build(Config, PostModel, locationEvent);
254 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
255 Assert.AreEqual(request.EventType, WeChatRequestEventType.Event上报地理位置);
256 Assert.AreEqual(request.ToUserName, "toUser");
257 Assert.AreEqual(request.FromUserName, "fromUser");
258 Assert.AreEqual(request.CreateTime, 123456789);
259 Assert.AreEqual(request.Event上报地理位置.Latitude, 23.137466);
260 Assert.AreEqual(request.Event上报地理位置.Longitude, 113.352425);
261 Assert.AreEqual(request.Event上报地理位置.Precision, 119.385040);
262 263 var clickEvent = @"xml>
264 ToUserName>
![CDATA[toUser]]>
/ToUserName>
265 FromUserName>
![CDATA[FromUser]]>
/FromUserName>
266 CreateTime>
123456789/CreateTime>
267 MsgType>
![CDATA[event]]>
/MsgType>
268 Event>
![CDATA[CLICK]]>
/Event>
269 EventKey>
![CDATA[EVENTKEY]]>
/EventKey>
270 /xml>
";
271 request = WeChatRequest.Build(Config, PostModel, clickEvent);
272 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
273 Assert.AreEqual(request.EventType, WeChatRequestEventType.Event点击自定义菜单);
274 Assert.AreEqual(request.ToUserName, "toUser");
275 Assert.AreEqual(request.FromUserName, "FromUser");
276 Assert.AreEqual(request.CreateTime, 123456789);
277 Assert.AreEqual(request.Event点击自定义菜单.EventKey, "EVENTKEY");
278 279 var linkEvent = @"xml>
280 ToUserName>
![CDATA[toUser]]>
/ToUserName>
281 FromUserName>
![CDATA[FromUser]]>
/FromUserName>
282 CreateTime>
123456789/CreateTime>
283 MsgType>
![CDATA[event]]>
/MsgType>
284 Event>
![CDATA[VIEW]]>
/Event>
285 EventKey>
![CDATA[www.QQ.COM]]>
/EventKey>
286 MenuId>
123/MenuId>
287 /xml>
";
288 request = WeChatRequest.Build(Config, PostModel, linkEvent);
289 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
290 Assert.AreEqual(request.EventType, WeChatRequestEventType.Event点击菜单跳转链接);
291 Assert.AreEqual(request.ToUserName, "toUser");
292 Assert.AreEqual(request.FromUserName, "FromUser");
293 Assert.AreEqual(request.CreateTime, 123456789);
294 Assert.AreEqual(request.Event点击菜单跳转链接.Url, "www.qq.com");
295 Assert.AreEqual(request.Event点击菜单跳转链接.MenuId, 123);
296 297 }
298 299 [TestMethod] 300 public void WeChatRequestPushEventTest() 301 {
302 #region 模板消息发送结果 303 var tempplatePush = @"xml>
304 ToUserName>
![CDATA[gh_7f083739789a]]>
/ToUserName>
305 FromUserName>
![CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8]]>
/FromUserName>
306 CreateTime>
1395658920/CreateTime>
307 MsgType>
![CDATA[event]]>
/MsgType>
308 Event>
![CDATA[TEMPLATESENDJOBFINISH]]>
/Event>
309 MsgID>
200163836/MsgID>
310 status>
![CDATA[success]]>
/Status>
311 /xml>
";
312 var request = WeChatRequest.Build(Config, PostModel, tempplatePush);
313 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
314 Assert.AreEqual(request.EventType, WeChatRequestEventType.Push模板消息发送结果);
315 Assert.AreEqual(request.ToUserName, "gh_7f083739789a");
316 Assert.AreEqual(request.FromUserName, "oia2TjuEGTNoeX76QEjQNrcURxG8");
317 Assert.AreEqual(request.CreateTime, 1395658920);
318 Assert.AreEqual(request.Push模板消息发送结果.Status, "success");
319 Assert.IsTrue(request.Push模板消息发送结果.Success);
320 321 tempplatePush = @"xml>
322 ToUserName>
![CDATA[gh_7f083739789a]]>
/ToUserName>
323 FromUserName>
![CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8]]>
/FromUserName>
324 CreateTime>
1395658984/CreateTime>
325 MsgType>
![CDATA[event]]>
/MsgType>
326 Event>
![CDATA[TEMPLATESENDJOBFINISH]]>
/Event>
327 MsgID>
200163840/MsgID>
328 Status>
![CDATA[failed:userblock]]>
/Status>
329 /xml>
";
330 request = WeChatRequest.Build(Config, PostModel, tempplatePush);
331 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
332 Assert.AreEqual(request.EventType, WeChatRequestEventType.Push模板消息发送结果);
333 Assert.AreEqual(request.ToUserName, "gh_7f083739789a");
334 Assert.AreEqual(request.FromUserName, "oia2TjuEGTNoeX76QEjQNrcURxG8");
335 Assert.AreEqual(request.CreateTime, 1395658984);
336 Assert.AreEqual(request.Push模板消息发送结果.Status, "failed:userblock");
337 Assert.IsFalse(request.Push模板消息发送结果.Success);
338 tempplatePush = @"xml>
339 ToUserName>
![CDATA[gh_7f083739789a]]>
/ToUserName>
340 FromUserName>
![CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8]]>
/FromUserName>
341 CreateTime>
1395658984/CreateTime>
342 MsgType>
![CDATA[event]]>
/MsgType>
343 Event>
![CDATA[TEMPLATESENDJOBFINISH]]>
/Event>
344 MsgID>
200163840/MsgID>
345 Status>
![CDATA[failed:system failed]]>
/Status>
346 /xml>
";
347 request = WeChatRequest.Build(Config, PostModel, tempplatePush);
348 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
349 Assert.AreEqual(request.EventType, WeChatRequestEventType.Push模板消息发送结果);
350 Assert.AreEqual(request.ToUserName, "gh_7f083739789a");
351 Assert.AreEqual(request.FromUserName, "oia2TjuEGTNoeX76QEjQNrcURxG8");
352 Assert.AreEqual(request.CreateTime, 1395658984);
353 Assert.AreEqual(request.Push模板消息发送结果.Status, "failed:system failed");
354 Assert.IsFalse(request.Push模板消息发送结果.Success);
355 #endregion 356 357 #region 群发结果 358 var massResultPush = @"xml>
359 ToUserName>
![CDATA[gh_4d00ed8d6399]]>
/ToUserName>
360 FromUserName>
![CDATA[oV5CrjpxgaGXNHIQigzNlgLTnwic]]>
/FromUserName>
361 CreateTime>
1481013459/CreateTime>
362 MsgType>
![CDATA[event]]>
/MsgType>
363 Event>
![CDATA[MASSSENDJOBFINISH]]>
/Event>
364 MsgID>
1000001625/MsgID>
365 Status>
![CDATA[err(30003)]]>
/Status>
366 totalCount>
0/TotalCount>
367 FilterCount>
0/FilterCount>
368 SentCount>
0/SentCount>
369 ErrorCount>
0/ErrorCount>
370 CopyrightCheckResult>
371 Count>
2/Count>
372 ResultList>
373 item>
374 ArticleIdx>
1/ArticleIdx>
375 UserDeclareState>
0/UserDeclareState>
376 AuditState>
2/AuditState>
377 OriginalArticleUrl>
![CDATA[Url_1]]>
/OriginalArticleUrl>
378 OriginalArticleType>
1/OriginalArticleType>
379 CanReprint>
1/CanReprint>
380 NeedReplaceContent>
1/NeedReplaceContent>
381 NeedShowReprintSource>
1/NeedShowReprintSource>
382 /item>
383 item>
384 ArticleIdx>
2/ArticleIdx>
385 UserDeclareState>
0/UserDeclareState>
386 AuditState>
2/AuditState>
387 OriginalArticleUrl>
![CDATA[Url_2]]>
/OriginalArticleUrl>
388 OriginalArticleType>
1/OriginalArticleType>
389 CanReprint>
1/CanReprint>
390 NeedReplaceContent>
1/NeedReplaceContent>
391 NeedShowReprintSource>
1/NeedShowReprintSource>
392 /item>
393 /ResultList>
394 CheckState>
2/CheckState>
395 /CopyrightCheckResult>
396 /xml>
";
397 request = WeChatRequest.Build(Config, PostModel, massResultPush);
398 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
399 Assert.AreEqual(request.EventType, WeChatRequestEventType.Push群发结果);
400 Assert.AreEqual(request.ToUserName, "gh_4d00ed8d6399");
401 Assert.AreEqual(request.FromUserName, "oV5CrjpxgaGXNHIQigzNlgLTnwic");
402 Assert.AreEqual(request.CreateTime, 1481013459);
403 Assert.AreEqual(request.Push群发结果.MsgID, 1000001625);
404 Assert.AreEqual(request.Push群发结果.Status, "err(30003)");
405 Assert.IsFalse(request.Push群发结果.Success);
406 Assert.AreEqual(request.Push群发结果.ErrorReason, "原创校验被判定为转载文且用户选择了被判为转载就不群发");
407 Assert.AreEqual(request.Push群发结果.TotalCount, 0);
408 Assert.AreEqual(request.Push群发结果.FilterCount, 0);
409 Assert.AreEqual(request.Push群发结果.SentCount, 0);
410 Assert.AreEqual(request.Push群发结果.ErrorCount, 0);
411 var checkResult = request.Push群发结果.CopyrightCheckResult;
412 var item = checkResult.First();
413 Assert.AreEqual(item.ArticleIdx, 1);
414 Assert.AreEqual(item.UserDeclareState, 0);
415 Assert.AreEqual(item.AuditState, 2);
416 Assert.AreEqual(item.OriginalArticleUrl, "Url_1");
417 Assert.AreEqual(item.OriginalArticleType, 1);
418 Assert.AreEqual(item.CanReprint, true);
419 Assert.AreEqual(item.NeedReplaceContent, true);
420 Assert.AreEqual(item.NeedShowReprintSource, true);
421 item = checkResult.Last();
422 Assert.AreEqual(item.ArticleIdx, 2);
423 Assert.AreEqual(item.UserDeclareState, 0);
424 Assert.AreEqual(item.AuditState, 2);
425 Assert.AreEqual(item.OriginalArticleUrl, "Url_2");
426 Assert.AreEqual(item.OriginalArticleType, 1);
427 Assert.AreEqual(item.CanReprint, true);
428 Assert.AreEqual(item.NeedReplaceContent, true);
429 Assert.AreEqual(item.NeedShowReprintSource, true);
430 Assert.AreEqual(request.Push群发结果.CheckState, 2);
431 #endregion 432 433 #region 菜单相关推送 434 var scancodePush = @"xml>
435 ToUserName>
![CDATA[gh_e136c6e50636]]>
/ToUserName>
436 FromUserName>
![CDATA[oMgHVjngRipvsoxg6TuX3vz6glDg]]>
/FromUserName>
437 CreateTime>
1408090502/CreateTime>
438 MsgType>
![CDATA[event]]>
/MsgType>
439 Event>
![CDATA[scancode_push]]>
/Event>
440 EventKey>
![CDATA[6]]>
/EventKey>
441 ScanCodeInfo>
ScanType>
![CDATA[qrcode]]>
/ScanType>
442 ScanResult>
![CDATA[1]]>
/ScanResult>
443 /ScanCodeInfo>
444 /xml>
";
445 request = WeChatRequest.Build(Config, PostModel, scancodePush);
446 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
447 Assert.AreEqual(request.EventType, WeChatRequestEventType.MenuPush扫码推事件);
448 Assert.AreEqual(request.ToUserName, "gh_e136c6e50636");
449 Assert.AreEqual(request.FromUserName, "oMgHVjngRipVsoxg6TuX3vz6glDg");
450 Assert.AreEqual(request.CreateTime, 1408090502);
451 Assert.AreEqual(request.MenuPush扫码推事件.EventKey, "6");
452 Assert.AreEqual(request.MenuPush扫码推事件.ScanType, "qrcode");
453 Assert.AreEqual(request.MenuPush扫码推事件.ScanResult, "1");
454 scancodePush = @"xml>
455 ToUserName>
![CDATA[gh_e136c6e50636]]>
/ToUserName>
456 FromUserName>
![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]>
/FromUserName>
457 CreateTime>
1408090606/CreateTime>
458 MsgType>
![CDATA[event]]>
/MsgType>
459 Event>
![CDATA[scancode_waitmsg]]>
/Event>
460 EventKey>
![CDATA[6]]>
/EventKey>
461 ScanCodeInfo>
ScanType>
![CDATA[qrcode]]>
/ScanType>
462 ScanResult>
![CDATA[2]]>
/ScanResult>
463 /ScanCodeInfo>
464 /xml>
";
465 request = WeChatRequest.Build(Config, PostModel, scancodePush);
466 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
467 Assert.AreEqual(request.EventType, WeChatRequestEventType.MenuPush扫码推等待事件);
468 Assert.AreEqual(request.ToUserName, "gh_e136c6e50636");
469 Assert.AreEqual(request.FromUserName, "oMgHVjngRipVsoxg6TuX3vz6glDg");
470 Assert.AreEqual(request.CreateTime, 1408090606);
471 Assert.AreEqual(request.MenuPush扫码推等待事件.EventKey, "6");
472 Assert.AreEqual(request.MenuPush扫码推等待事件.ScanType, "qrcode");
473 Assert.AreEqual(request.MenuPush扫码推等待事件.ScanResult, "2");
474 475 var imagePush = @"xml>
476 ToUserName>
![CDATA[gh_e136c6e50636]]>
/ToUserName>
477 FromUserName>
![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]>
/FromUserName>
478 CreateTime>
1408090651/CreateTime>
479 MsgType>
![CDATA[event]]>
/MsgType>
480 Event>
![CDATA[pic_sysphoto]]>
/Event>
481 EventKey>
![CDATA[6]]>
/EventKey>
482 SendPicsInfo>
Count>
1/Count>
483 PicList>
item>
PicMd5Sum>
![CDATA[1b5f7c23b5bf75682a53e7b6d163e185]]>
/PicMd5Sum>
484 /item>
485 /PicList>
486 /SendPicsInfo>
487 /xml>
";
488 request = WeChatRequest.Build(Config, PostModel, imagePush);
489 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
490 Assert.AreEqual(request.EventType, WeChatRequestEventType.MenuPush系统拍照发图);
491 Assert.AreEqual(request.ToUserName, "gh_e136c6e50636");
492 Assert.AreEqual(request.FromUserName, "oMgHVjngRipVsoxg6TuX3vz6glDg");
493 Assert.AreEqual(request.CreateTime, 1408090651);
494 Assert.AreEqual(request.MenuPush系统拍照发图.EventKey, "6");
495 Assert.AreEqual(request.MenuPush系统拍照发图.Count, 1);
496 CollectionAssert.AreEqual(request.MenuPush系统拍照发图.PicMd5Sum, new string[] {
"1b5f7c23b5bf75682a53e7b6d163e185" }
);
497 imagePush = @"xml>
498 ToUserName>
![CDATA[gh_e136c6e50636]]>
/ToUserName>
499 FromUserName>
![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]>
/FromUserName>
500 CreateTime>
1408090816/CreateTime>
501 MsgType>
![CDATA[event]]>
/MsgType>
502 Event>
![CDATA[pic_photo_or_album]]>
/Event>
503 EventKey>
![CDATA[6]]>
/EventKey>
504 SendPicsInfo>
Count>
1/Count>
505 PicList>
item>
PicMd5Sum>
![CDATA[5a75aaca956d97be686719218f275c6b]]>
/PicMd5Sum>
506 /item>
507 /PicList>
508 /SendPicsInfo>
509 /xml>
";
510 request = WeChatRequest.Build(Config, PostModel, imagePush);
511 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
512 Assert.AreEqual(request.EventType, WeChatRequestEventType.MenuPush拍照或者相册发图);
513 Assert.AreEqual(request.ToUserName, "gh_e136c6e50636");
514 Assert.AreEqual(request.FromUserName, "oMgHVjngRipVsoxg6TuX3vz6glDg");
515 Assert.AreEqual(request.CreateTime, 1408090816);
516 Assert.AreEqual(request.MenuPush系统拍照发图.EventKey, "6");
517 Assert.AreEqual(request.MenuPush系统拍照发图.Count, 1);
518 CollectionAssert.AreEqual(request.MenuPush系统拍照发图.PicMd5Sum, new string[] {
"5a75aaca956d97be686719218f275c6b" }
);
519 imagePush = @"xml>
520 ToUserName>
![CDATA[gh_e136c6e50636]]>
/ToUserName>
521 FromUserName>
![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]>
/FromUserName>
522 CreateTime>
1408090816/CreateTime>
523 MsgType>
![CDATA[event]]>
/MsgType>
524 Event>
![CDATA[pic_weixin]]>
/Event>
525 EventKey>
![CDATA[6]]>
/EventKey>
526 SendPicsInfo>
Count>
1/Count>
527 PicList>
item>
PicMd5Sum>
![CDATA[5a75aaca956d97be686719218f275c6b]]>
/PicMd5Sum>
528 /item>
529 /PicList>
530 /SendPicsInfo>
531 /xml>
";
532 request = WeChatRequest.Build(Config, PostModel, imagePush);
533 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
534 Assert.AreEqual(request.EventType, WeChatRequestEventType.MenuPush微信相册发图);
535 Assert.AreEqual(request.ToUserName, "gh_e136c6e50636");
536 Assert.AreEqual(request.FromUserName, "oMgHVjngRipVsoxg6TuX3vz6glDg");
537 Assert.AreEqual(request.CreateTime, 1408090816);
538 Assert.AreEqual(request.MenuPush系统拍照发图.EventKey, "6");
539 Assert.AreEqual(request.MenuPush系统拍照发图.Count, 1);
540 CollectionAssert.AreEqual(request.MenuPush系统拍照发图.PicMd5Sum, new string[] {
"5a75aaca956d97be686719218f275c6b" }
);
541 542 var locationPush = @"xml>
543 ToUserName>
![CDATA[gh_e136c6e50636]]>
/ToUserName>
544 FromUserName>
![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]>
/FromUserName>
545 CreateTime>
1408091189/CreateTime>
546 MsgType>
![CDATA[event]]>
/MsgType>
547 Event>
![CDATA[location_select]]>
/Event>
548 EventKey>
![CDATA[6]]>
/EventKey>
549 SendLocationInfo>
Location_X>
![CDATA[23]]>
/Location_X>
550 Location_Y>
![CDATA[113]]>
/Location_Y>
551 Scale>
![CDATA[15]]>
/Scale>
552 Label>
![CDATA[广州市海珠区客村艺苑路 106号]]>
/Label>
553 Poiname>
![CDATA[]]>
/Poiname>
554 /SendLocationInfo>
555 /xml>
";
556 request = WeChatRequest.Build(Config, PostModel, locationPush);
557 Assert.AreEqual(request.MessageType, WeChatRequestMessageType.Event);
558 Assert.AreEqual(request.EventType, WeChatRequestEventType.MenuPush位置选择);
559 Assert.AreEqual(request.ToUserName, "gh_e136c6e50636");
560 Assert.AreEqual(request.FromUserName, "oMgHVjngRipVsoxg6TuX3vz6glDg");
561 Assert.AreEqual(request.CreateTime, 1408091189);
562 Assert.AreEqual(request.MenuPush位置选择.EventKey, "6");
563 Assert.AreEqual(request.MenuPush位置选择.Location_X, 23);
564 Assert.AreEqual(request.MenuPush位置选择.Location_Y, 113);
565 Assert.AreEqual(request.MenuPush位置选择.Scale, 15);
566 Assert.AreEqual(request.MenuPush位置选择.Label, "广州市海珠区客村艺苑路 106号");
567 Assert.AreEqual(request.MenuPush位置选择.Poiname, "");
568 #endregion 569 }
570 571 [TestMethod] 572 public void WeChatResponseTest() 573 {
574 var demoMsg = @"xml>
575 ToUserName>
![CDATA[AppId]]>
/ToUserName>
576 FromUserName>
![CDATA[OpenId]]>
/FromUserName>
577 CreateTime>
12345678/CreateTime>
578 /xml>
";
579 var request = WeChatRequest.Build(Config, PostModel, demoMsg);
580 Assert.AreEqual(WeChatResponse.ResponseText(request, "你好").Source, @"xml>
581 ToUserName>
![CDATA[OpenId]]>
/ToUserName>
582 FromUserName>
![CDATA[AppId]]>
/FromUserName>
583 CreateTime>
12345678/CreateTime>
584 MsgType>
![CDATA[text]]>
/MsgType>
585 Content>
![CDATA[你好]]>
/Content>
586 /xml>
".Removebr());
587 Assert.AreEqual(WeChatResponse.ResponseImage(request, "media_id").Source, @"xml>
588 ToUserName>
![CDATA[OpenId]]>
/ToUserName>
589 FromUserName>
![CDATA[AppId]]>
/FromUserName>
590 CreateTime>
12345678/CreateTime>
591 MsgType>
![CDATA[image]]>
/MsgType>
592 Image>
593 MediaId>
![CDATA[media_id]]>
/MediaId>
594 /Image>
595 /xml>
".RemoveBr());
596 Assert.AreEqual(WeChatResponse.ResponseVoice(request, "media_id").Source, @"xml>
597 ToUserName>
![CDATA[OpenId]]>
/ToUserName>
598 FromUserName>
![CDATA[AppId]]>
/FromUserName>
599 CreateTime>
12345678/CreateTime>
600 MsgType>
![CDATA[voice]]>
/MsgType>
601 Voice>
602 MediaId>
![CDATA[media_id]]>
/MediaId>
603 /Voice>
604 /xml>
".RemoveBr());
605 Assert.AreEqual(WeChatResponse.ResponseVideo(request, "media_id", "title", "description").Source, @"xml>
606 ToUserName>
![CDATA[OpenId]]>
/ToUserName>
607 FromUserName>
![CDATA[AppId]]>
/FromUserName>
608 CreateTime>
12345678/CreateTime>
609 MsgType>
![CDATA[video]]>
/MsgType>
610 Video>
611 MediaId>
![CDATA[media_id]]>
/MediaId>
612 Title>
![CDATA[title]]>
/Title>
613 Description>
![CDATA[description]]>
/Description>
614 /Video>
615 /xml>
".RemoveBr());
616 Assert.AreEqual(WeChatResponse.ResponseMusic(request, "media_id", "MUSIC_Url", "TITLE", "DESCRIPTION", "HQ_MUSIC_Url").Source, @"xml>
617 ToUserName>
![CDATA[OpenId]]>
/ToUserName>
618 FromUserName>
![CDATA[AppId]]>
/FromUserName>
619 CreateTime>
12345678/CreateTime>
620 MsgType>
![CDATA[music]]>
/MsgType>
621 Music>
622 Title>
![CDATA[TITLE]]>
/Title>
623 Description>
![CDATA[DESCRIPTION]]>
/Description>
624 MusicUrl>
![CDATA[MUSIC_Url]]>
/MusicUrl>
625 HQMusicUrl>
![CDATA[HQ_MUSIC_Url]]>
/HQMusicUrl>
626 ThumbMediaId>
![CDATA[media_id]]>
/ThumbMediaId>
627 /Music>
628 /xml>
".RemoveBr());
629 630 Assert.AreEqual(WeChatResponse.ResponseNews(request, 631 new WeChatResponse.Article("title1", "description1", "picurl", "url"), 632 new WeChatResponse.Article("title", "description", "picurl", "url") 633 ).Source, @"xml>
634 ToUserName>
![CDATA[OpenId]]>
/ToUserName>
635 FromUserName>
![CDATA[AppId]]>
/FromUserName>
636 CreateTime>
12345678/CreateTime>
637 MsgType>
![CDATA[news]]>
/MsgType>
638 ArticleCount>
2/ArticleCount>
639 Articles>
640 item>
641 Title>
![CDATA[title1]]>
/Title>
642 Description>
![CDATA[description1]]>
/Description>
643 PicUrl>
![CDATA[picurl]]>
/PicUrl>
644 Url>
![CDATA[url]]>
/Url>
645 /item>
646 item>
647 Title>
![CDATA[title]]>
/Title>
648 Description>
![CDATA[description]]>
/Description>
649 PicUrl>
![CDATA[picurl]]>
/PicUrl>
650 Url>
![CDATA[url]]>
/Url>
651 /item>
652 /Articles>
653 /xml>
".RemoveBr());
654 Assert.AreEqual(WeChatResponse.transferToCustomerService(request).Source, @"xml>
655 ToUserName>
![CDATA[OpenId]]>
/ToUserName>
656 FromUserName>
![CDATA[AppId]]>
/FromUserName>
657 CreateTime>
12345678/CreateTime>
658 MsgType>
![CDATA[transfer_customer_service]]>
/MsgType>
659 /xml>
".RemoveBr());
660 Assert.AreEqual(WeChatResponse.TransferToCustomerService(request, "test1").Source, @"xml>
661 ToUserName>
![CDATA[OpenId]]>
/ToUserName>
662 FromUserName>
![CDATA[AppId]]>
/FromUserName>
663 CreateTime>
12345678/CreateTime>
664 MsgType>
![CDATA[transfer_customer_service]]>
/MsgType>
665 TransInfo>
KfAccount>
![CDATA[test1@test]]>
/KfAccount>
/TransInfo>
666 /xml>
".RemoveBr());
667 }
668 669 [TestMethod] 670 public void WeChatExtensionTest() 671 {
672 var demoQuery = new Dictionarystring, string>
() 673 {
674 {
"nonce","1362870167"}
, 675 {
"openid","oOk2XjhrbcHP3tGgzDGAVHppo3Bs"}
, 676 {
"signature","7940891098b505c22f99b0e3708627ec715aa832"}
, 677 {
"timestamp","1496218735"}
, 678 {
"echostr","demoEchostr"}
679 }
;
680 Assert.IsNotNull(demoQuery.IsValidRequest(Config));
681 Assert.AreEqual(demoQuery.ConfigVerify(Config), "demoEchostr");
682 demoQuery = new Dictionarystring, string>
();
683 Assert.IsNull(demoQuery.IsValidRequest(Config));
684 Assert.AreEqual(demoQuery.ConfigVerify(Config), "");
685 }
686 687 [TestMethod] 688 public void WeChatHanddlerTest() 689 {
690 string demoMsg = @"xml>
691 ToUserName>
![CDATA[toUser]]>
/ToUserName>
692 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
693 CreateTime>
1348831860/CreateTime>
694 MsgType>
![CDATA[test]]>
/MsgType>
695 Content>
![CDATA[this is a test]]>
/Content>
696 MsgId>
1234567890123456/MsgId>
697 /xml>
";
698 bool IsOkReponse(HandlerDemo demo, string text) =>
demo.Result.ToXDocument().SelectValue("Content").Equals(text);
699 700 var request = WeChatRequest.Build(Config, PostModel, demoMsg);
701 var demoHandler = new HandlerDemo(request);
702 Assert.AreEqual(demoHandler.Result, "");
//未支持消息,直接回复空字符串 703 704 #region 微信消息 705 demoMsg = @"xml>
706 ToUserName>
![CDATA[toUser]]>
/ToUserName>
707 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
708 CreateTime>
1348831860/CreateTime>
709 MsgType>
![CDATA[text]]>
/MsgType>
710 Content>
![CDATA[this is a test]]>
/Content>
711 MsgId>
1234567890123456/MsgId>
712 /xml>
";
713 request = WeChatRequest.Build(Config, PostModel, demoMsg);
714 demoHandler = new HandlerDemo(request);
715 Assert.IsTrue(IsOkReponse(demoHandler, "OnMessageText"));
716 717 demoMsg = @"xml>
718 ToUserName>
![CDATA[toUser]]>
/ToUserName>
719 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
720 CreateTime>
1348831860/CreateTime>
721 MsgType>
![CDATA[image]]>
/MsgType>
722 PicUrl>
![CDATA[this is a url]]>
/PicUrl>
723 MediaId>
![CDATA[media_id]]>
/MediaId>
724 MsgId>
1234567890123456/MsgId>
725 /xml>
";
726 request = WeChatRequest.Build(Config, PostModel, demoMsg);
727 demoHandler = new HandlerDemo(request);
728 Assert.IsTrue(IsOkReponse(demoHandler, "OnMessageImage"));
729 730 demoMsg = @"xml>
731 ToUserName>
![CDATA[toUser]]>
/ToUserName>
732 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
733 CreateTime>
1357290913/CreateTime>
734 MsgType>
![CDATA[voice]]>
/MsgType>
735 MediaId>
![CDATA[media_id]]>
/MediaId>
736 Format>
![CDATA[Format]]>
/Format>
737 Recognition>
![CDATA[腾讯微信团队]]>
/Recognition>
738 MsgId>
1234567890123456/MsgId>
739 /xml>
";
740 request = WeChatRequest.Build(Config, PostModel, demoMsg);
741 demoHandler = new HandlerDemo(request);
742 Assert.IsTrue(IsOkReponse(demoHandler, "OnMessageVoice"));
743 744 demoMsg = @"xml>
745 ToUserName>
![CDATA[toUser]]>
/ToUserName>
746 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
747 CreateTime>
1357290913/CreateTime>
748 MsgType>
![CDATA[video]]>
/MsgType>
749 MediaId>
![CDATA[media_id]]>
/MediaId>
750 ThumbMediaId>
![CDATA[thumb_media_id]]>
/ThumbMediaId>
751 MsgId>
1234567890123456/MsgId>
752 /xml>
";
753 request = WeChatRequest.Build(Config, PostModel, demoMsg);
754 demoHandler = new HandlerDemo(request);
755 Assert.IsTrue(IsOkReponse(demoHandler, "OnMessageVideo"));
756 757 demoMsg = @"xml>
758 ToUserName>
![CDATA[toUser]]>
/ToUserName>
759 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
760 CreateTime>
1357290913/CreateTime>
761 MsgType>
![CDATA[shortvideo]]>
/MsgType>
762 MediaId>
![CDATA[media_id]]>
/MediaId>
763 ThumbMediaId>
![CDATA[thumb_media_id]]>
/ThumbMediaId>
764 MsgId>
1234567890123456/MsgId>
765 /xml>
";
766 request = WeChatRequest.Build(Config, PostModel, demoMsg);
767 demoHandler = new HandlerDemo(request);
768 Assert.IsTrue(IsOkReponse(demoHandler, "OnMessageShortVideo"));
769 770 demoMsg = @"xml>
771 ToUserName>
![CDATA[toUser]]>
/ToUserName>
772 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
773 CreateTime>
1351776360/CreateTime>
774 MsgType>
![CDATA[location]]>
/MsgType>
775 Location_X>
23.134521/Location_X>
776 Location_Y>
113.358803/Location_Y>
777 Scale>
20/Scale>
778 Label>
![CDATA[位置信息]]>
/Label>
779 MsgId>
1234567890123456/MsgId>
780 /xml>
";
781 request = WeChatRequest.Build(Config, PostModel, demoMsg);
782 demoHandler = new HandlerDemo(request);
783 Assert.IsTrue(IsOkReponse(demoHandler, "OnMessageLocaltion"));
784 785 demoMsg = @"xml>
786 ToUserName>
![CDATA[toUser]]>
/ToUserName>
787 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
788 CreateTime>
1351776360/CreateTime>
789 MsgType>
![CDATA[link]]>
/MsgType>
790 Title>
![CDATA[公众平台官网链接]]>
/Title>
791 Description>
![CDATA[公众平台官网链接]]>
/Description>
792 Url>
![CDATA[url]]>
/Url>
793 MsgId>
1234567890123456/MsgId>
794 /xml>
";
795 request = WeChatRequest.Build(Config, PostModel, demoMsg);
796 demoHandler = new HandlerDemo(request);
797 Assert.IsTrue(IsOkReponse(demoHandler, "OnMessageLink"));
798 #endregion 799 800 #region 事件消息 801 demoMsg = @"xml>
802 ToUserName>
![CDATA[toUser]]>
/ToUserName>
803 FromUserName>
![CDATA[FromUser]]>
/FromUserName>
804 CreateTime>
123456789/CreateTime>
805 MsgType>
![CDATA[event]]>
/MsgType>
806 Event>
![CDATA[subscribe]]>
/Event>
807 /xml>
";
808 request = WeChatRequest.Build(Config, PostModel, demoMsg);
809 demoHandler = new HandlerDemo(request);
810 Assert.IsTrue(IsOkReponse(demoHandler, "OnEvent关注"));
811 812 813 demoMsg = @"xml>
814 ToUserName>
![CDATA[toUser]]>
/ToUserName>
815 FromUserName>
![CDATA[FromUser]]>
/FromUserName>
816 CreateTime>
123456789/CreateTime>
817 MsgType>
![CDATA[event]]>
/MsgType>
818 Event>
![CDATA[unsubscribe]]>
/Event>
819 /xml>
";
820 request = WeChatRequest.Build(Config, PostModel, demoMsg);
821 demoHandler = new HandlerDemo(request);
822 Assert.ThrowsExceptionNotImplementedException>
(() =>
{
string result = demoHandler.Result;
}
, "OnEvent取消关注");
823 824 demoMsg = @"xml>
825 ToUserName>
![CDATA[toUser]]>
/ToUserName>
826 FromUserName>
![CDATA[FromUser]]>
/FromUserName>
827 CreateTime>
123456789/CreateTime>
828 MsgType>
![CDATA[event]]>
/MsgType>
829 Event>
![CDATA[subscribe]]>
/Event>
830 EventKey>
![CDATA[qrscene_123123]]>
/EventKey>
831 Ticket>
![CDATA[TICKET]]>
/Ticket>
832 /xml>
";
833 request = WeChatRequest.Build(Config, PostModel, demoMsg);
834 demoHandler = new HandlerDemo(request);
835 Assert.IsTrue(IsOkReponse(demoHandler, "OnEvent关注-扫描带参数二维码"));
836 837 demoMsg = @"xml>
838 ToUserName>
![CDATA[toUser]]>
/ToUserName>
839 FromUserName>
![CDATA[FromUser]]>
/FromUserName>
840 CreateTime>
123456789/CreateTime>
841 MsgType>
![CDATA[event]]>
/MsgType>
842 Event>
![CDATA[SCAN]]>
/Event>
843 EventKey>
![CDATA[SCENE_VALUE]]>
/EventKey>
844 Ticket>
![CDATA[TICKET]]>
/Ticket>
845 /xml>
";
846 request = WeChatRequest.Build(Config, PostModel, demoMsg);
847 demoHandler = new HandlerDemo(request);
848 Assert.IsTrue(IsOkReponse(demoHandler, "OnEvent扫描带参数二维码"));
849 850 demoMsg = @"xml>
851 ToUserName>
![CDATA[toUser]]>
/ToUserName>
852 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
853 CreateTime>
123456789/CreateTime>
854 MsgType>
![CDATA[event]]>
/MsgType>
855 Event>
![CDATA[LOCATION]]>
/Event>
856 Latitude>
23.137466/Latitude>
857 Longitude>
113.352425/Longitude>
858 Precision>
119.385040/Precision>
859 /xml>
";
860 request = WeChatRequest.Build(Config, PostModel, demoMsg);
861 demoHandler = new HandlerDemo(request);
862 Assert.IsTrue(IsOkReponse(demoHandler, "OnEvent上报地理位置"));
863 864 demoMsg = @"xml>
865 ToUserName>
![CDATA[toUser]]>
/ToUserName>
866 FromUserName>
![CDATA[FromUser]]>
/FromUserName>
867 CreateTime>
123456789/CreateTime>
868 MsgType>
![CDATA[event]]>
/MsgType>
869 Event>
![CDATA[CLICK]]>
/Event>
870 EventKey>
![CDATA[EVENTKEY]]>
/EventKey>
871 /xml>
";
872 request = WeChatRequest.Build(Config, PostModel, demoMsg);
873 demoHandler = new HandlerDemo(request);
874 Assert.IsTrue(IsOkReponse(demoHandler, "OnEvent点击自定义菜单"));
875 876 demoMsg = @"xml>
877 ToUserName>
![CDATA[toUser]]>
/ToUserName>
878 FromUserName>
![CDATA[FromUser]]>
/FromUserName>
879 CreateTime>
123456789/CreateTime>
880 MsgType>
![CDATA[event]]>
/MsgType>
881 Event>
![CDATA[VIEW]]>
/Event>
882 EventKey>
![CDATA[www.qq.com]]>
/EventKey>
883 MenuId>
123/MenuId>
884 /xml>
";
885 request = WeChatRequest.Build(Config, PostModel, demoMsg);
886 demoHandler = new HandlerDemo(request);
887 Assert.ThrowsExceptionNotImplementedException>
(() =>
{
string result = demoHandler.Result;
}
, "OnEvent点击菜单跳转链接");
888 #endregion 889 890 #region 微信服务相关 891 demoMsg = @"xml>
892 ToUserName>
![CDATA[gh_7f083739789a]]>
/ToUserName>
893 FromUserName>
![CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8]]>
/FromUserName>
894 CreateTime>
1395658920/CreateTime>
895 MsgType>
![CDATA[event]]>
/MsgType>
896 Event>
![CDATA[TEMPLATESENDJOBFINISH]]>
/Event>
897 MsgID>
200163836/MsgID>
898 Status>
![CDATA[success]]>
/Status>
899 /xml>
";
900 request = WeChatRequest.Build(Config, PostModel, demoMsg);
901 demoHandler = new HandlerDemo(request);
902 Assert.ThrowsExceptionNotImplementedException>
(() =>
{
string result = demoHandler.Result;
}
, "OnPush模板消息发送结果");
903 904 demoMsg = @"xml>
905 ToUserName>
![CDATA[gh_4d00ed8d6399]]>
/ToUserName>
906 FromUserName>
![CDATA[oV5CrjpxgaGXNHIQigzNlgLTnwic]]>
/FromUserName>
907 CreateTime>
1481013459/CreateTime>
908 MsgType>
![CDATA[event]]>
/MsgType>
909 Event>
![CDATA[MASSSENDJOBFINISH]]>
/Event>
910 MsgID>
1000001625/MsgID>
911 Status>
![CDATA[err(30003)]]>
/Status>
912 TotalCount>
0/TotalCount>
913 FilterCount>
0/FilterCount>
914 SentCount>
0/SentCount>
915 ErrorCount>
0/ErrorCount>
916 /xml>
";
917 request = WeChatRequest.Build(Config, PostModel, demoMsg);
918 demoHandler = new HandlerDemo(request);
919 Assert.ThrowsExceptionNotImplementedException>
(() =>
{
string result = demoHandler.Result;
}
, "OnPush群发结果");
920 #endregion 921 922 #region 菜单相关推送 923 demoMsg = @"xml>
924 ToUserName>
![CDATA[gh_e136c6e50636]]>
/ToUserName>
925 FromUserName>
![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]>
/FromUserName>
926 CreateTime>
1408090502/CreateTime>
927 MsgType>
![CDATA[event]]>
/MsgType>
928 Event>
![CDATA[scancode_push]]>
/Event>
929 EventKey>
![CDATA[6]]>
/EventKey>
930 ScanCodeInfo>
ScanType>
![CDATA[qrcode]]>
/ScanType>
931 ScanResult>
![CDATA[1]]>
/ScanResult>
932 /ScanCodeInfo>
933 /xml>
";
934 request = WeChatRequest.Build(Config, PostModel, demoMsg);
935 demoHandler = new HandlerDemo(request);
936 Assert.IsTrue(IsOkReponse(demoHandler, "OnPushMenu扫码推事件"));
937 938 demoMsg = @"xml>
939 ToUserName>
![CDATA[gh_e136c6e50636]]>
/ToUserName>
940 FromUserName>
![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]>
/FromUserName>
941 CreateTime>
1408090606/CreateTime>
942 MsgType>
![CDATA[event]]>
/MsgType>
943 Event>
![CDATA[scancode_waitmsg]]>
/Event>
944 EventKey>
![CDATA[6]]>
/EventKey>
945 ScanCodeInfo>
ScanType>
![CDATA[qrcode]]>
/ScanType>
946 ScanResult>
![CDATA[2]]>
/ScanResult>
947 /ScanCodeInfo>
948 /xml>
";
949 request = WeChatRequest.Build(Config, PostModel, demoMsg);
950 demoHandler = new HandlerDemo(request);
951 Assert.IsTrue(IsOkReponse(demoHandler, "OnPushMenu扫码推等待事件"));
952 953 demoMsg = @"xml>
954 ToUserName>
![CDATA[gh_e136c6e50636]]>
/ToUserName>
955 FromUserName>
![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]>
/FromUserName>
956 CreateTime>
1408090651/CreateTime>
957 MsgType>
![CDATA[event]]>
/MsgType>
958 Event>
![CDATA[pic_sysphoto]]>
/Event>
959 EventKey>
![CDATA[6]]>
/EventKey>
960 SendPicsInfo>
Count>
1/Count>
961 PicList>
item>
PicMd5Sum>
![CDATA[1b5f7c23b5bf75682a53e7b6d163e185]]>
/PicMd5Sum>
962 /item>
963 /PicList>
964 /SendPicsInfo>
965 /xml>
";
966 request = WeChatRequest.Build(Config, PostModel, demoMsg);
967 demoHandler = new HandlerDemo(request);
968 Assert.IsTrue(IsOkReponse(demoHandler, "OnPushMenu系统拍照发图"));
969 970 demoMsg = @"xml>
971 ToUserName>
![CDATA[gh_e136c6e50636]]>
/ToUserName>
972 FromUserName>
![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]>
/FromUserName>
973 CreateTime>
1408090816/CreateTime>
974 MsgType>
![CDATA[event]]>
/MsgType>
975 Event>
![CDATA[pic_photo_or_album]]>
/Event>
976 EventKey>
![CDATA[6]]>
/EventKey>
977 SendPicsInfo>
Count>
1/Count>
978 PicList>
item>
PicMd5Sum>
![CDATA[5a75aaca956d97be686719218f275c6b]]>
/PicMd5Sum>
979 /item>
980 /PicList>
981 /SendPicsInfo>
982 /xml>
";
983 request = WeChatRequest.Build(Config, PostModel, demoMsg);
984 demoHandler = new HandlerDemo(request);
985 Assert.IsTrue(IsOkReponse(demoHandler, "OnPushMenu拍照或者相册发图"));
986 987 demoMsg = @"xml>
988 ToUserName>
![CDATA[gh_e136c6e50636]]>
/ToUserName>
989 FromUserName>
![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]>
/FromUserName>
990 CreateTime>
1408090816/CreateTime>
991 MsgType>
![CDATA[event]]>
/MsgType>
992 Event>
![CDATA[pic_weixin]]>
/Event>
993 EventKey>
![CDATA[6]]>
/EventKey>
994 SendPicsInfo>
Count>
1/Count>
995 PicList>
item>
PicMd5Sum>
![CDATA[5a75aaca956d97be686719218f275c6b]]>
/PicMd5Sum>
996 /item>
997 /PicList>
998 /SendPicsInfo>
999 /xml>
";
1000 request = WeChatRequest.Build(Config, PostModel, demoMsg);
1001 demoHandler = new HandlerDemo(request);
1002 Assert.IsTrue(IsOkReponse(demoHandler, "OnPushMenu微信相册发图"));
1003 1004 demoMsg = @"xml>
1005 ToUserName>
![CDATA[gh_e136c6e50636]]>
/ToUserName>
1006 FromUserName>
![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]>
/FromUserName>
1007 CreateTime>
1408091189/CreateTime>
1008 MsgType>
![CDATA[event]]>
/MsgType>
1009 Event>
![CDATA[location_select]]>
/Event>
1010 EventKey>
![CDATA[6]]>
/EventKey>
1011 SendLocationInfo>
Location_X>
![CDATA[23]]>
/Location_X>
1012 Location_Y>
![CDATA[113]]>
/Location_Y>
1013 Scale>
![CDATA[15]]>
/Scale>
1014 Label>
![CDATA[广州市海珠区客村艺苑路 106号]]>
/Label>
1015 Poiname>
![CDATA[]]>
/Poiname>
1016 /SendLocationInfo>
1017 /xml>
";
1018 request = WeChatRequest.Build(Config, PostModel, demoMsg);
1019 demoHandler = new HandlerDemo(request);
1020 Assert.IsTrue(IsOkReponse(demoHandler, "OnPushMenu位置选择"));
1021 #endregion1022 1023 1024 string FillDemoContent(string text) =>
$@"xml>
1025 ToUserName>
![CDATA[toUser]]>
/ToUserName>
1026 FromUserName>
![CDATA[fromUser]]>
/FromUserName>
1027 CreateTime>
1348831860/CreateTime>
1028 MsgType>
![CDATA[text]]>
/MsgType>
1029 Content>
![CDATA[{
text}
]]>
/Content>
1030 MsgId>
1234567890123456/MsgId>
1031 /xml>
";
1032 demoMsg = FillDemoContent("123");
1033 request = WeChatRequest.Build(Config, PostModel, demoMsg);
1034 demoHandler = new HandlerDemo(request);
1035 Assert.IsTrue(IsOkReponse(demoHandler, "123"));
1036 1037 demoMsg = FillDemoContent("34567");
1038 request = WeChatRequest.Build(Config, PostModel, demoMsg);
1039 demoHandler = new HandlerDemo(request);
1040 Assert.IsTrue(IsOkReponse(demoHandler, "123456"));
1041 1042 demoMsg = FillDemoContent("abc");
1043 request = WeChatRequest.Build(Config, PostModel, demoMsg);
1044 demoHandler = new HandlerDemo(request);
1045 Assert.IsTrue(IsOkReponse(demoHandler, "ABc"));
1046 1047 demoMsg = FillDemoContent("BcDeFgh");
1048 request = WeChatRequest.Build(Config, PostModel, demoMsg);
1049 demoHandler = new HandlerDemo(request);
1050 Assert.IsTrue(IsOkReponse(demoHandler, "ABcdEf"));
1051 1052 1053 demoMsg = @"xml>
1054 ToUserName>
![CDATA[toUser]]>
/ToUserName>
1055 FromUserName>
![CDATA[FromUser]]>
/FromUserName>
1056 CreateTime>
123456789/CreateTime>
1057 MsgType>
![CDATA[event]]>
/MsgType>
1058 Event>
![CDATA[CLICK]]>
/Event>
1059 EventKey>
![CDATA[test_menu]]>
/EventKey>
1060 /xml>
";
1061 request = WeChatRequest.Build(Config, PostModel, demoMsg);
1062 demoHandler = new HandlerDemo(request);
1063 Assert.IsTrue(IsOkReponse(demoHandler, "Event点击自定义菜单Test"));
1064 1065 demoMsg = @"xml>
1066 ToUserName>
![CDATA[toUser]]>
/ToUserName>
1067 FromUserName>
![CDATA[FromUser]]>
/FromUserName>
1068 CreateTime>
123456789/CreateTime>
1069 MsgType>
![CDATA[event]]>
/MsgType>
1070 Event>
![CDATA[subscribe]]>
/Event>
1071 EventKey>
![CDATA[qrscene_scanId]]>
/EventKey>
1072 Ticket>
![CDATA[TICKET]]>
/Ticket>
1073 /xml>
";
1074 request = WeChatRequest.Build(Config, PostModel, demoMsg);
1075 demoHandler = new HandlerDemo(request);
1076 Assert.IsTrue(IsOkReponse(demoHandler, "Event扫描带参数二维码scanId"));
1077 1078 demoMsg = @"xml>
1079 ToUserName>
![CDATA[toUser]]>
/ToUserName>
1080 FromUserName>
![CDATA[FromUser]]>
/FromUserName>
1081 CreateTime>
123456789/CreateTime>
1082 MsgType>
![CDATA[event]]>
/MsgType>
1083 Event>
![CDATA[SCAN]]>
/Event>
1084 EventKey>
![CDATA[scanId]]>
/EventKey>
1085 Ticket>
![CDATA[TICKET]]>
/Ticket>
1086 /xml>
";
1087 request = WeChatRequest.Build(Config, PostModel, demoMsg);
1088 demoHandler = new HandlerDemo(request);
1089 Assert.IsTrue(IsOkReponse(demoHandler, "Event扫描带参数二维码scanId"));
1090 1091 }
1092 public class HandlerDemo : MessageHandler1093 {
1094 public HandlerDemo(WeChatRequest request) : base(request)1095 {
1096 AddTextKeyWordHandler(new HandlerRule(HandlerContrast.Equal, "123"), (req, msg) =>
1097 {
1098 return WeChatResponse.ResponseText(req, "123");
1099 }
);
1100 AddTextKeyWordHandler(new HandlerRule(HandlerContrast.Contain, "456"), (req, msg) =>
1101 {
1102 return WeChatResponse.ResponseText(req, "123456");
1103 }
);
1104 AddTextKeyWordHandler(new HandlerRule(HandlerContrast.Superficial, "abc"), (req, msg) =>
1105 {
1106 return WeChatResponse.ResponseText(req, "ABc");
1107 }
);
1108 AddTextKeyWordHandler(new HandlerRule(HandlerContrast.ContainSuperficial, "def"), (req, msg) =>
1109 {
1110 return WeChatResponse.ResponseText(req, "ABcdEf");
1111 }
);
1112 1113 AddEventMenuClickHandler("test_menu", (req, msg) =>
1114 {
1115 return WeChatResponse.ResponseText(req, "Event点击自定义菜单Test");
1116 }
);
1117 AddEventScanIdHandler("scanId", (req, msg) =>
1118 {
1119 return WeChatResponse.ResponseText(req, "Event扫描带参数二维码scanId");
1120 }
);
1121 }
1122 1123 public override WeChatResponse DefaultResponseMessage(WeChatRequest request)1124 {
1125 return null;
//未定义处理的默认方法,不处理则直接返回Null以回复空字符串给微信服务器1126 }
1127 public override WeChatResponse OnMessageText(WeChatRequest request, WeChatRequest.WeChatMessageText text)1128 {
1129 return WeChatResponse.ResponseText(request, "OnMessageText");
1130 }
1131 public override WeChatResponse OnMessageImage(WeChatRequest request, WeChatRequest.WeChatMessageImage image)1132 {
1133 return WeChatResponse.ResponseText(request, "OnMessageImage");
1134 }
1135 public override WeChatResponse OnMessageVoice(WeChatRequest request, WeChatRequest.WeChatMessageVoice voice)1136 {
1137 return WeChatResponse.ResponseText(request, "OnMessageVoice");
1138 }
1139 public override WeChatResponse OnMessageLocaltion(WeChatRequest request, WeChatRequest.WeChatMessageLocation location)1140 {
1141 return WeChatResponse.ResponseText(request, "OnMessageLocaltion");
1142 }
1143 public override WeChatResponse OnMessageVideo(WeChatRequest request, WeChatRequest.WeChatMessageVideo video)1144 {
1145 return WeChatResponse.ResponseText(request, "OnMessageVideo");
1146 }
1147 public override WeChatResponse OnMessageShortVideo(WeChatRequest request, WeChatRequest.WeChatMessageVideo shortVideo)1148 {
1149 return WeChatResponse.ResponseText(request, "OnMessageShortVideo");
1150 }
1151 public override WeChatResponse OnMessageLink(WeChatRequest request, WeChatRequest.WeChatMessageLink link)1152 {
1153 return WeChatResponse.ResponseText(request, "OnMessageLink");
1154 }
1155 1156 public override WeChatResponse OnEvent关注(WeChatRequest request)1157 {
1158 return WeChatResponse.ResponseText(request, "OnEvent关注");
1159 }
1160 public override WeChatResponse OnEvent关注(WeChatRequest request, WeChatRequest.WeChatEvent扫描带参数二维码 msg)1161 {
1162 return WeChatResponse.ResponseText(request, "OnEvent关注-扫描带参数二维码");
1163 }
1164 public override void OnEvent取消关注(WeChatRequest request)1165 {
1166 throw new NotImplementedException("OnEvent取消关注");
1167 }
1168 public override WeChatResponse OnEvent扫描带参数二维码(WeChatRequest request, WeChatRequest.WeChatEvent扫描带参数二维码 msg)1169 {
1170 return WeChatResponse.ResponseText(request, "OnEvent扫描带参数二维码");
1171 }
1172 public override WeChatResponse OnEvent上报地理位置(WeChatRequest request, WeChatRequest.WeChatEvent上报地理位置 msg)1173 {
1174 return WeChatResponse.ResponseText(request, "OnEvent上报地理位置");
1175 }
1176 public override WeChatResponse OnEvent点击自定义菜单(WeChatRequest request, WeChatRequest.WeChatEvent点击自定义菜单 msg)1177 {
1178 return WeChatResponse.ResponseText(request, "OnEvent点击自定义菜单");
1179 }
1180 public override void OnEvent点击菜单跳转链接(WeChatRequest request, WeChatRequest.WeChatEvent点击菜单跳转链接 msg)1181 {
1182 throw new NotImplementedException("OnEvent点击菜单跳转链接");
1183 }
1184 1185 public override WeChatResponse OnPushMenu位置选择(WeChatRequest request, WeChatRequest.WeChatMenuPush位置选择 msg)1186 {
1187 return WeChatResponse.ResponseText(request, "OnPushMenu位置选择");
1188 }
1189 public override WeChatResponse OnPushMenu扫码推事件(WeChatRequest request, WeChatRequest.WeChatMenuPush扫码事件 msg)1190 {
1191 return WeChatResponse.ResponseText(request, "OnPushMenu扫码推事件");
1192 }
1193 public override WeChatResponse OnPushMenu扫码推等待事件(WeChatRequest request, WeChatRequest.WeChatMenuPush扫码事件 msg)1194 {
1195 return WeChatResponse.ResponseText(request, "OnPushMenu扫码推等待事件");
1196 }
1197 public override WeChatResponse OnPushMenu系统拍照发图(WeChatRequest request, WeChatRequest.WeChatMenuPush拍照发图 msg)1198 {
1199 return WeChatResponse.ResponseText(request, "OnPushMenu系统拍照发图");
1200 }
1201 public override WeChatResponse OnPushMenu微信相册发图(WeChatRequest request, WeChatRequest.WeChatMenuPush拍照发图 msg)1202 {
1203 return WeChatResponse.ResponseText(request, "OnPushMenu微信相册发图");
1204 }
1205 public override WeChatResponse OnPushMenu拍照或者相册发图(WeChatRequest request, WeChatRequest.WeChatMenuPush拍照发图 msg)1206 {
1207 return WeChatResponse.ResponseText(request, "OnPushMenu拍照或者相册发图");
1208 }
1209 1210 public override void OnPush模板消息发送结果(WeChatRequest request, WeChatRequest.WeChatPush模板消息发送结果 msg)1211 {
1212 throw new NotImplementedException("OnPush模板消息发送结果");
1213 }
1214 public override void OnPush群发结果(WeChatRequest request, WeChatRequest.WeChatPush群发结果 msg)1215 {
1216 throw new NotImplementedException("OnPush群发结果");
1217 }
1218 }
1219 1220 }
1221 }
单元测试示例代码
以上就是微信公众平台SDK核心库的详细介绍的详细内容,更多请关注其它相关文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 微信公众平台SDK核心库的详细介绍
本文地址: https://pptw.com/jishu/592165.html
