微信公众平台SDK.net版本(weixinSDK.net)

         微信最近比较热,但是目前公布的基于.net的微信SDK做的比较繁琐,本人打算实现一个轻量级,简单明了的SDK,真正的懒人思想,为懒人服务。

一、SDK要实现的目标

1.轻量级:这个概念比较热,相信大家都不想为了开发微信公众平台而去引用一大串的类,引用啥的,搞的项目异常臃肿。现在现有的SDK都犯了一个错误:就是把所有的数据交换的实体:包含微信服务器返回的xml数据,我们提交给微信服务器的json,xml数据都搞成强类型,这样做虽然开发者在写代码的时候能用.就可以访问到数据,但是这样做一个最大的弊端就是增大了SDK体量,不够简明,不够轻量级。而且维护起来很不不方便。对此:我提出了,使用.net的dynamic特性,就像你使用python,json一样,完全的不用任何强类型,SDK就会小很多,彻底实现轻量级这一目标。当然你会说,那这样的话,要手写,我要关心实体的property的拼写。所以说都各有利弊,主要看你自己觉得那种方式更适合你。


2.简单明了:SDK仅对官方API做适当包装,不过度包装,SDK布局和官方API文档保持一致,便于开发者查找。使开发者感觉在使用SDK时,可以方便快捷的找到。不至于向一些现有的SDK一样,让人摸不着他的设计思想。

微信公众平台开发者文档结构如下图:


其实,他主要是围绕用户、消息、公众号这三大块来的。

a.用户:用户管理和用户微信端公众号功能菜单展开,分别对应用户管理和自定义菜单。

b.消息:我们自己的服务器接受微信服务器post过来的消息(用户的消息是先提交到微信服务器,然后微信服务器在转发给我们的服务器),我们接收到消息,回复用户消息(还是一样,先提交到微信服务器,然后微信服务器在发送给用户),搞懂这一点很重要。我开发时,因为这个居然蠢到用session跟踪用户信息。

c.公众号:包括订阅号和服务号(现在又出企业号了),不同的号,调用API的权限不一样,这一点还需要开发者自己多多注意,也就是说,开发者虽然有了SDK,但不要完全不理会官方文档。自己帐号没有调用权限,非要说是SDK写的不好。


二、具体实现:

在博客园上发过一遍文章:

超级懒汉编写的基于.NET的微信SDK

  由于微信服务器Post给我们的是xml消息,返回的是json,而我们程序用的又是Dynamic,所以需要互转。这样就存在3种类型的format,这也是大量的框架定义实体类导致框架不够轻量级的的原因之所在。
  实现第一个目标,我主要用到了.net Framework4.0的Dynamic特性,和一个将xml字符串自动转换成Dynamic Object的DynamicXml.cs类,还有一个将json字符串自动转换成Dynamic Object的DynamicJson.cs类。苦苦寻觅,终于让我找到了我想要的。
1.以下是DynamicXml.cs类,文件头有原作者的版权信息。

</pre><p><pre name="code" class="csharp">/*--------------------------------------------------------------------------
 * https://www.captechconsulting.com/blog/kevin-haz
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
WeixinSDK.net使用帮助1.使用对象微信公众平台:http://mp.weixin.qq.com/wiki/home/index.htmlDeepleo.Weixin.SDKSDK源代码Deepleo.Web是一个asp.net mvc的demo2.核心思想运用Dynamic(.net 4.0以及以上版本支持)在程序中传递微信所需的结构化(xml,json)对象,减少大量代码,实现轻量级。 让您可以像Python一样书写代码。3.疑难问题1)API返回的Dynamic对象应该如何使用?答:如果您调用API,return的是 a.由DynamicJson.Parse转换而来,您可以用.[属性名称] 访问到该属性的值; 譬如 BasicAPI.cs中GetAccessToken: var token = DynamicJson.Parse(result.Content.ReadAsStringAsync().Result); 那么调用时:string newToken = BasicAPI.GetAccessToken(AppId, AppSecrect).access_token; b.如果是DynamicXml转换而来的,您可以用.[属性名称].Value 访问到该属性的值; 譬如 AcceptMessageAPI.cs中Parse: msg.Body = new DynamicXml(message); string msgType = msg.Body.MsgType.Value;2)遇到其他问题该如何解决?答:如果开发者遇到开发问题或者遇到SDK的bug,请到  a.官方QQ群:173564082   b.官方论坛:http://www.weixinsdk.net/  c.作者QQ:2586662969  d.作者微信号: deepleo (加好友注明weixinsdk)4.源代码唯一托管地址:https://github.com/night-king/weixinSDK5.Copyright and licenseCode and documentation copyright 2011-2015. Code released under the MIT license. Docs released under Creative Commons. 标签:微信sdk
支持的消息类型请求消息参考文档:http://mp.weixin.qq.com/wiki/10/79502792eef98d6e0c6e1739da387346.htmlRequestMessageImage(图片消息)RequestMessageLink(链接消息)RequestMessageLocation(位置消息)RequestMessageShortVideo(短视频消息)RequestMessageText(文本消息)RequestMessageVideo(视频消息)RequestMessageVoice(语音消息)事件消息由于较多直接给出GitHub地址:https://github.com/RabbitTeam/WeiXinSDK/tree/master/Rabbit.WeiXin/SDK/Rabbit.WeiXin/Messages/Events响应消息ResponseMessageImage(图片消息)ResponseMessageMusic(音乐消息)ResponseMessageNews(图文消息)ResponseMessageText(文本消息)ResponseMessageTransferCustomerService(多客服消息)ResponseMessageVideo(视频消息)ResponseMessageVoice(语音消息)消息处理中间件SignatureCheckHandlerMiddleware(验证签名中间件)CreateRequestMessageHandlerMiddleware(创建消息中间件)SessionSupportHandlerMiddleware(会话支持中间件)IgnoreRepeatMessageHandlerMiddleware(忽略重复的消息中间件)GenerateResponseXmlHandlerMiddleware(生成相应XML处理中间件)AgentHandlerMiddleware(代理请求中间件)支持的API基础接口获取access token获取微信服务器IP地址发送消息客服接口(http://mp.weixin.qq.com/wiki/1/70a29afed17f56d537c833f89be979c9.html)高级群发接口(http://mp.weixin.qq.com/wiki/15/5380a4e6f02f2ffdc7981a8ed7a40753.html)模板消息接口(http://mp.weixin.qq.com/wiki/17/304c1885ea66dbedf7dc170d84999a9d.html)素材管理用户管理自定义菜单账号管理多客服接口客服管理多客服会话控制获取客服聊天记录微信门店接口微信卡券接口(部分)上传卡券Logo创建卡券获取卡券可用颜色微信卡券接口投放卡券核销卡券管理卡券卡券事件推送暂不支持的API数据统计接口微信小店接口微信智能接口摇一摇周边关于性能在之前的文章就有提及新的SDK是比较追求性能的而在beta1版本中通过一些性能测试还算是达标,后续我会继续在性能上做足优化,争取提升并发量。下面是与市面上一个较成熟的微信SDK的性能测试对比:测试环境:CPU:i7-3610qm内存:16gb系统:Windows 8.1 x64编译配置:Release迭代次数:10000(一万次)计数工具:CodeTimer对比的SDK:暂不透露测试结果:为了防止和用来做对比的SDK粉丝或作者争吵,所以具体的测试代码我不放出了,同样用来被对比的SDK名称我也不公布了,但测试结果绝对公正。关于扩展性在消息处理过程中采用了管道模式的设计,借鉴了Open Web Interface的思想和一些规范来打造整个消息处理的模型,使消息处理变得更加轻便。同时SDK内部内置了一个简单的依赖注入实现 IDependencyResolver,解耦了很多服务与服务实现。下面的Demo项目的中的微信请求Action:使用者可以自行注册处理的中间件来完成自定的逻辑,后面会专门写具体的使用教程。关于架构消息处理请求消息事件消息响应消息消息格式化器Get By Nuget主要分为两个组件Rabbit.Web地址:https://www.nuget.org/packages/Rabbit.WeiXin/命令:Install-Package Rabbit.WeiXinRabbit.WeiXin.MvcExtension地址:https://www.nuget.org/packages/Rabbit.WeiXin.MvcExtension/命令:Install-Package Rabbit.WeiXin.MvcExtension交流方式QQ群:384413261Email:majian159@live.com 标签:微信sdk

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值