首页后端开发ASP.NET微信公众平台SDK核心库的详细介绍

微信公众平台SDK核心库的详细介绍

时间2024-01-30 06:33:02发布访客分类ASP.NET浏览723
导读:收集整理的这篇文章主要介绍了微信公众平台SDK核心库的详细介绍,觉得挺不错的,现在分享给大家,也给大家做个参考。NuGet包地址: 由于来的OYMLCN.WeChat存在深度封装,并没有做完整的测试,对于使用不友好,现已重新构建SDK...
收集整理的这篇文章主要介绍了微信公众平台SDK核心库的详细介绍,觉得挺不错的,现在分享给大家,也给大家做个参考。NuGet包地址:

由于来的OYMLCN.WeChat存在深度封装,并没有做完整的测试,对于使用不友好,现已重新构建SDK的接收消息被动回复模块。

现已做到最大程度的简易化及模块化,每个模块都已完成单元测试(根据微信说明文档的示例内容)。

接下来将会重新构建微信接口的调用模块,将会在基本完成后发布。

类jquery操作的方式将会在所有功能完善并完成测试以后再整合到OYMLCN.WeChat当中。

主要使用方式:

VAR postModel = this.Request.GetQuery().IsValidRequest(config);
    if (postModel == null)return Content("");
    return Content(new DemoHandler(WeChatRequest.Build(Config, postModel, this.Request.GetBody().ReadToEnd())).Result);
    
Config是基础接口配置OYMLCN.WeChat.Config的实例,参数依次为【公众平台微信号】、【AppId】、【AppSecret】、【Token】以及可选的【AESKey】。    配置的参数顺序相对于以往版本有变更,若报错无法验证签名有效性则需要检查参数的赋值顺序。Request.GetQuery()是对Request的扩展方法,封装在依赖包OYMLCN.Web当中,主要获取请求附带的参数。若在ASP.Net Web Api当中使用,需要安装兼容扩展包OYMLCN.Web.Api。Request.GetBody()主要是获取请求的正文,相当于Request.Body,为了使代码兼容WebApi而设置的一个方法。ReadToEnd()是Stream的扩展方法,主要是读取Stream中的文本内容。IsValidRequest(Config)是Dictionarystring, string>
    的扩展方法,用于验证请求的有效性并获取PostModel参数。验证失败则返回null。当前示例是使用Handler处理的。
public class DemoHandler : OYMLCN.WeChat.MessageHandler{
public DemoHandler(OYMLCN.WeChat.WeChatRequest request) : base(request) {
 }
public override OYMLCN.WeChat.WeChatResponse DefaultResponSEMessage(OYMLCN.WeChat.WeChatRequest request)    {
    return OYMLCN.WeChat.WeChatResponse.ResponseText(request, "Success");
    }
}
    

若需求简单,可不使用Handler来处理,使用方式如下:

OYMLCN.WeChat.Config config = new OYMLCN.WeChat.Config("微信账号名", "AppId", "AppSecret", "Token", "AESKey");
    OYMLCN.WeChat.PostModel postModel = this.Request.GetQuery().IsValidRequest(config);
    string body = this.Request.GetBody().ReadToEnd();
    OYMLCN.WeChat.WeChatRequest request = OYMLCN.WeChat.WeChatRequest.Build(config, postModel, body);
    OYMLCN.WeChat.WeChatResponse response = null;
    if (request.MessageTyPE == OYMLCN.WeChat.WeChatRequestMessageType.Text)    response = OYMLCN.WeChat.WeChatResponse.ResponseText(request, "我是测试");
    else if (request.MessageType == OYMLCN.WeChat.WeChatRequestMessageType.Event)if (request.EventType == OYMLCN.WeChat.WeChatRequestEventType.Event关注)        response = OYMLCN.WeChat.WeChatResponse.ResponseText(request, "你来晚了");
    if (response != null)return Content(response.Result);
    return Content("");
    

附上单元测试代码,基本用法均已展现。

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

 

以上就是微信公众平台SDK核心库的详细介绍的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

平台核心

若转载请注明出处: 微信公众平台SDK核心库的详细介绍
本文地址: https://pptw.com/jishu/592165.html
javascript中eval的用法是什么 SignalR简介及用法介绍

游客 回复需填写必要信息