由于来的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)是Dictionary<string, 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 Dictionary<string, 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 Dictionary<string, 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 Dictionary<string, 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.ThrowsException<NotImplementedException>(() => { 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.ThrowsException<NotImplementedException>(() => { 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.ThrowsException<NotImplementedException>(() => { 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.ThrowsException<NotImplementedException>(() => { 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 }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。