国内流行的开源.net微信公众平台SDK对比分析

一、引言

目前微信公众平台正如火如荼的进行中,微信虽然在海外市场不敌WhatsApp,但是已经俘获了国内绝大部分用户的心。作为国内最大的,超级"app",微信已算是成功问鼎了。公众帐号百花齐放,各自SDK层出不穷,但是单单.net平台/C#的SDK也就那么几个值得一提:Senparc.Weixin.MP(以下简称Senparc) 和WeixinSDK.net(以下简称WeixinSDK)。ps:为什么官方没有完整的.net/C#版本?谁知道可以告诉我下。
 
(1) Senparc.Weixin.MP    
Github: https://github.com/JeffreySu/WeiXinMPSDK (Fork:500+)
标语:微信公众平台SDK Senparc.Weixin for C#
达到1000+ commits,15个contributors,5个branches。

(同时由于易信的API目前与微信保持一致,此SDK也可以直接用于易信,如需使用易信的自定义菜单,通用接口改成易信的通讯地址即可)。已经支持用户会话上下文(解决服务器无法使用Session处理用户信息的问题)。

(2)WeixinSDK.net  
Github:  https://github.com/night-king/weixinSDK(Fork:30+)
标语:一个超级轻量级的,像Python一样自由书写代码的微信公众平台SDK(.net版本)
达到60+ commits,1个contributors,1个branches。

目前只针对微信公众平台开发者文档所有API进行包装也就是微信服务号和订阅号的开发,不支持微信企业号和移动端API。但是不排除企业号和移动端API共有部分的调用,对于这部分本SDK不保证其能调用成功。

 

 
 
从数据来看两者不在一个数量级上,从标语来看,Senparc更谦虚中庸一些,WeixinSDK显得激进许多,到底谁好谁坏,谁优谁劣,且听楼主慢慢道来。
 
二、设计思路
     Senparc的设计思路是大而全,功能完备且强大,所有用到的中间对象都用实体类的形式表达出来,所以显得重了些;
     WeixinSDK的设计思路是小而美,对代码有洁癖的程序员很容易为之着迷,基本上API涉及到的业务他都用Dynamic对象表示,所以显得一下子比Senparc轻了许多。轻量级,结构清晰,简单灵活。
     Senparc更像是集团军作战,有大量的用户和贡献者为其服务,所以迭代要快很多。所有微信官方API的功能他都包含了,所以成为了主流也不奇怪。而WeixinSDK像是单兵作战,当然不是一般的兵,用户少,迭代慢,目前还不支持企业号API(正在紧急筹划中,见官方论坛)。
 
三、开发者该如何选择
    一个大而全,一个小而美,我们开发者该如何选择呢?
    其实这个问题只有这两个都用过之后的人才有权利发表看法,我只能从表面上来说:
    如果你是一个保守的人,对Dynamic对象没有概念,入门级的程序员建议你选择Senparc,因为他更符合传统思维;
    如果你是一个激进的人,喜欢轻量级,喜欢用像python一样的弱类型语言编写程序,建议您不妨试试WeixinSDK。
    另外:WeixinSDK需要.net framework4.0版本,所以如果你的程序比这个低还不能用。

 

转载于:https://www.cnblogs.com/deepleo/p/weixinsdk-senparc.html

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
C#版的微信公众号开发SDK Senparc.Weixin.MP几个关键类介绍如下: Entities/Request*.cs 用于接收微信平台自动发送到服务器的实体(发送过来的是XML),包括文本、位置、图片三类 Entities/Response*.cs 用于反馈给发送人的信息实体(最终会转成XML),包括文本、新闻(图文)两类 Helpers/EntityHelper.cs 用于实体和XML之间的转换(由于其中有许多需要特殊处理的字段和类型,这里不能简单用XML序列化) Helpers/MsgTypeHelper.cs 用于获取消息类型 CheckSignature.cs 验证请求合法性类 Enums.cs 各种枚举 RequestMessageFactory.cs 用于自动生成不同Request类型的实体,并作必要的数据填充 Senparc.Weixin.MP几个关键类及重要方法(按一般使用过程排序) 生成验证字符串:Senparc.Weixin.MP.CheckSignature.GetSignature(string timestamp, string nonce, string token = null),返回根据微信平台提供的数据,SHA1加密后的验证字符串(注意token必须跟公众平台的设置一直) 验证请求:Senparc.Weixin.MP.CheckSignature.Check(string signature, string timestamp, string nonce, string token = null),验证请求是否合法 获取请求实体:var requestMessage = Senparc.Weixin.MP.RequestMessageFactory.GetRequestEntity(XDocument doc); 根据不同请求的类型,自动生成可用于操作的实体(doc只需要用XDocument.Parse(xmlString)就能生成),requestMessage.MsgType就是请求枚举类型。 进行判断及各类操作。 根据需要,创建响应类型的实体,如:var responseMessage = ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Text) as ResponseMessageText; 即可返回文本类型信息。 由于目前微信只接受XML的返回数据,所以在返回之前还需要做一次转换:XDocument responseDoc = Senparc.Weixin.MP.Helpers.EntityHelper.ConvertEntityToXml(responseMessage); var xmlString =responseDoc.ToString();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值