由于来的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 }
单元测试示例代码
以上就是微信公众平台sdk核心库的详细介绍的详细内容。