在上一篇文章《RabbitHub开源情况及计划》上有提及到了一个新的开源项目——微信SDK,经过几天的努力现在开源发布Beta1版本。

目录

  1. 前言
  2. 特点
  3. 功能
    1. 支持的消息类型
      1. 请求消息
      2. 事件消息
      3. 响应消息
    2. 消息处理中间件
    3. 支持的API
    4. 暂不支持的API
  4. 关于性能
  5. 关于易扩展性
  6. 关于易使用性
  7. 关于架构
    1. 消息处理
    2. 请求消息
    3. 事件消息
    4. 响应消息
    5. 消息格式化器
  8. 开源信息
  9. Get By Nuget
  10. 测试的微信号
  11. 交流方式
  12. 写在最后

前言

在某一个傍晚,与头为产品历经一个下午的讨论的结束而得出一个新的idea,架设一个暂现内部使用的“云”平台,目前主要含有微信相关服务内容,主要目标为实现统一的微信接入地址而可以使用微信自动接入的功能(微信开放平台提供的一种授权方式,可以托管客户的微信,而不需要客户去配置服务器url、token等参数),而次要的目的主要是为了公司内部开发团队更快的接入微信和实现不同项目对微信的统一管理与数据共享。

伴随着这样的需求,我打算重新造一个轮子,微信SDK(Rabbit.WeiXin),旨在提供更好的性能更易扩展的机制。今天它以开源的姿态进入大家的视野,希望大家可以尝试使用起来,更希望大家能够参与进这个项目之中。

特点

  1. 较高的性能
  2. 易扩展性
  3. API易使用性

功能

支持的消息类型

请求消息(参考文档:http://mp.weixin.qq.com/wiki/10/79502792eef98d6e0c6e1739da387346.html

  1. RequestMessageImage(图片消息)
  2. RequestMessageLink(链接消息)
  3. RequestMessageLocation(位置消息)
  4. RequestMessageShortVideo(短视频消息)
  5. RequestMessageText(文本消息)
  6. RequestMessageVideo(视频消息)
  7. RequestMessageVoice(语音消息)

GitHub:https://github.com/RabbitTeam/WeiXinSDK/tree/master/Rabbit.WeiXin/SDK/Rabbit.WeiXin/Messages/Request

事件消息

由于较多直接给出GitHub地址:https://github.com/RabbitTeam/WeiXinSDK/tree/master/Rabbit.WeiXin/SDK/Rabbit.WeiXin/Messages/Events

响应消息

  1. ResponseMessageImage(图片消息)
  2. ResponseMessageMusic(音乐消息)
  3. ResponseMessageNews(图文消息)
  4. ResponseMessageText(文本消息)
  5. ResponseMessageTransferCustomerService(多客服消息)
  6. ResponseMessageVideo(视频消息)
  7. ResponseMessageVoice(语音消息)

GitHub:https://github.com/RabbitTeam/WeiXinSDK/tree/master/Rabbit.WeiXin/SDK/Rabbit.WeiXin/Messages/Response

消息处理中间件

  1. SignatureCheckHandlerMiddleware(验证签名中间件)
  2. CreateRequestMessageHandlerMiddleware(创建消息中间件)
  3. SessionSupportHandlerMiddleware(会话支持中间件)
  4. IgnoreRepeatMessageHandlerMiddleware(忽略重复的消息中间件)
  5. GenerateResponseXmlHandlerMiddleware(生成相应XML处理中间件)
  6. AgentHandlerMiddleware(代理请求中间件)

支持的API

  1. 基础接口
    1. 获取access token
    2. 获取微信服务器IP地址
  2. 发送消息
    1. 客服接口(http://mp.weixin.qq.com/wiki/1/70a29afed17f56d537c833f89be979c9.html
    2. 高级群发接口(http://mp.weixin.qq.com/wiki/15/5380a4e6f02f2ffdc7981a8ed7a40753.html
    3. 模板消息接口(http://mp.weixin.qq.com/wiki/17/304c1885ea66dbedf7dc170d84999a9d.html
    4. 素材管理
    5. 用户管理
    6. 自定义菜单
    7. 账号管理
    8. 多客服接口
      1. 客服管理
      2. 多客服会话控制
      3. 获取客服聊天记录
    9. 微信门店接口
    10. 微信卡券接口(部分)
      1. 上传卡券Logo
      2. 创建卡券
      3. 获取卡券可用颜色

暂不支持的API

  1. 数据统计接口
  2. 微信小店接口
  3. 微信智能接口
  4. 摇一摇周边
  5. 微信卡券接口
    1. 投放卡券
    2. 核销卡券
    3. 管理卡券
    4. 卡券事件推送

关于性能

在之前的文章就有提及新的SDK是比较追求性能的而在beta1版本中通过一些性能测试还算是达标,后续我会继续在性能上做足优化,争取提升并发量。

下面是与市面上一个较成熟的微信SDK的性能测试对比:

测试环境:

CPU:i7-3610qm

内存:16gb

系统:Windows 8.1 x64

编译配置:Release

迭代次数:10000(一万次)

计数工具:CodeTimer

对比的SDK:暂不透露

测试结果:

为了防止和用来做对比的SDK粉丝或作者争吵,所以具体的测试代码我不放出了,同样用来被对比的SDK名称我也不公布了,但测试结果绝对公正。

关于扩展性

在消息处理过程中采用了管道模式的设计,借鉴了Open Web Interface的思想和一些规范来打造整个消息处理的模型,使消息处理变得更加轻便。

同时SDK内部内置了一个简单的依赖注入实现 IDependencyResolver,解耦了很多服务与服务实现。

下面的Demo项目的中的微信请求Action:

使用者可以自行注册处理的中间件来完成自定的逻辑,后面会专门写具体的使用教程。

关于易使用性

这一块不过多阐述,因为目前这一块并不是很突出,会在后续的版本优化这一块的内容。

关于架构

消息处理

请求消息

事件消息

响应消息

消息格式化器

开源信息

开源协议:Apache License 2.0

托管地址:https://github.com/RabbitTeam/WeiXinSDK

示例地址:https://github.com/RabbitTeam/WeiXinSDK/tree/master/Rabbit.WeiXin/Sample/Rabbit.WeiXin.Sample

Get By Nuget

主要分为两个组件

Rabbit.Web

地址:https://www.nuget.org/packages/Rabbit.WeiXin/

命令:Install-Package Rabbit.WeiXin

Rabbit.WeiXin.MvcExtension

地址:https://www.nuget.org/packages/Rabbit.WeiXin.MvcExtension/

命令:Install-Package Rabbit.WeiXin.MvcExtension

交流方式

QQ群:384413261

Email:majian159@live.com

写在最后

后面会在继续完善SDK(性能和还未实现的API及一些调优)的同时,写一些文章来说明如何使用SDK,和关于SDK设计的相关文章。

.NET平台下的微信SDK(Rabbit.WeiXin)开源发布的更多相关文章

  1. 微信公众平台开发,图文回复、access_token生成调用、以及微信SDK的实现(2)

    上一节课,我给大家分享了微信API接入以及事件推送的回复,这是微信开发的第二节课,重点给说一说单图文回复,多图文回复,access_token,微信SDK. 公众号消息回复很多种形式,常见的形式有,文 ...

  2. .net下4款不错的微信SDK

    .net下4款不错的微信SDK: 一款值得推荐的.Net微信开发SDK http://www.17ky.net/soft/474.html.Net微信公开帐号接口 WeiXinSDK http://w ...

  3. ASP.NET CORE下用盛派微信SDK取微信openid

    用CORE做项目用到微信的相关东西,听说那个盛派微信SDK很火,自己弄了下,只是简单的用用,用户访问页面取微信openid

  4. 微信公众平台Java版极速SDK

    JEEWX-API 是第一个微信公众平台Java版极速SDK,基于 jeewx-api 开发可以立即拥有简单易用的API,让开发更加轻松自如,节省更多时间 http://www.jeewx.com/

  5. 【Win10 UWP】微信SDK基本使用方法和基本原理

    上回讲到,作为一个长期散播温暖,散播希望的小清新无公害WP开发者,继QQ SDK之后,又把UWP微信SDK这茬了结了,仅供学习交流. 1.安装微信SDK for UWP 微信官方此前明确说明短时间内暂 ...

  6. NET 平台下的插件化开发内核

    .NET 平台下的插件化开发内核(Rabbit Kernel)   每个程序猿都有一个框架梦,曾经在2013年8月15日写过一篇“Koala Framework是什么?我为什么要写这个框架?”的文章, ...

  7. iOS开发总结--三方平台开发之微信支付

    1.前言 现在很多应用都有支付功能,支付也是开发中比较麻烦的一个部分.其实,最麻烦的部分是商户帐号的审核,如果没有商户帐号,就没有你要给钱的那个对公账户. 2.关于交易 在这个金融类项目的开发中,接触 ...

  8. 微信登陆,微信SDK授权登陆经验分享

    From:http://www.eoeandroid.com/thread-547012-1-1.html 最近因为项目需要做了微信登陆,好像也是微信最近才放出来的接口.还需要申请才能有权限实现授权. ...

  9. iOS-不用微信SDK唤起微信支付

    作者:TianBai 原文链接:http://www.jianshu.com/p/8930b4496023 要想知道微信SDK是如何调起微信客户端,那么咱们先看看微信SDK到底做了什么 前期准备 接入 ...

随机推荐

  1. centos 安装maven

    1.环境: 操作系统:centos7 maven:apache-maven-3.3.9-bin.tar.gz 2.安装JDK(1.7) 3.安装maven mkdir -p /opt/usr/loca ...

  2. 一个有趣的SQL Server 层级汇总数据问题

        看SQL Server大V宋大侠的博客文章,发现了一个有趣的sql server层级汇总数据问题.          具体的问题如下:     parent_id emp_id emp_nam ...

  3. 注解学习(模仿springMvc的注解注入方式)

    最近在看springMvc的源码,看到了该框架的注入注解的部分觉的有点吃力,可能还是对注解的方面的知识还认识的不够深刻,所以特意去学习注解方面的知识.由于本人也是抱着学习的态度来阅读源码,若文章在表述 ...

  4. 入门级的按键驱动——按键驱动笔记之poll机制-异步通知-同步互斥阻塞-定时器防抖

    文章对应视频的第12课,第5.6.7.8节. 在这之前还有查询方式的驱动编写,中断方式的驱动编写,这篇文章中暂时没有这些类容.但这篇文章是以这些为基础写的,前面的内容有空补上. 按键驱动——按下按键, ...

  5. [译] OpenStack Kilo 版本中 Neutron 的新变化

    OpenStack Kilo 版本,OpenStack 这个开源项目的第11个版本,已经于2015年4月正式发布了.现在是个合适的时间来看看这个版本中Neutron到底发生了哪些变化了,以及引入了哪些 ...

  6. MMORPG大型游戏设计与开发(part4 of net)

    上一节简单的介绍了服务器消息处理的流程,想必大家对这方面有了初步的认识,接下来我们需要知道和掌握的便是其中一些重要的方法,进一步深入熟悉整个构架. 1.FD_*系列宏函数 FD_ZERO(fd_set ...

  7. hdu-5493 Queue(二分+树状数组)

    题目链接: Queue Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  8. 炮(棋盘DP)

    一直以为自己写的就是状态压缩,结果写完才知道是个棋盘dp 首先看一下题目 嗯,象棋 ,还是只有炮的象棋 对于方案数有几种,我第一个考虑是dfs,但是超时稳稳的,所以果断放弃 然后记得以前有过和这个题差 ...

  9. Unity3D中Update()与FixedUpdate()的区别

    Unity3D中Update()与FixedUpdate()的区别是什么呢?从字面上理解,它们都是在更新时会被调用,并且会循环的调用.但是Update会在每次渲染新的一帧时,被调用.而FixedUpd ...

  10. noip模拟赛(一)宠物之战

    宠物之战 (senso.pas/c/cpp) [问题描述] 众所周知,moreD的宠物已经被moreD奴役得体无完肤.这只宠物实在忍无可忍,把自己每天走魔法树的经历告诉了自己的宠物.同时他还说明了自己 ...