微信公众平台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)是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 }
单元测试示例代码
 

相关文章

原文地址:http://msdn.microsoft.com/en-us/magazine/cc163...
前言 随着近些年微服务的流行,有越来越多的开发者和团队所采...
最近因为比较忙,好久没有写博客了,这篇主要给大家分享一下...
在多核CPU在今天和不久的将来,计算机将拥有更多的内核,Mic...
c语言输入成绩怎么判断等级
字符型数据在内存中的存储形式是什么