描述
开 本: 128开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121317385
★历经2年精心雕琢,堪称微信开发白皮书
★详解微信公众号、小程序开发的方方面面
★从宝贵“实战案例”中总结“踩坑”经验
★助你快速搭建微信公众号、小程序的同时
★掌握盛派网络多年的架构设计思想和技巧
★作者*认真负责赋予本书不一般的品质
★Senparc.Weixin SDK GitHub C# 开源首位
★真正全面介绍微信开发所需所有关键技能
★腾讯资深工程师推荐
★★微信 c# 开发必须选它
本书以深度剖析Senparc.Weixin SDK框架的设计思想和使用方法为主干,全面介绍了开发微信公众号(包含了订阅号、服务号和小程序)所需的关键技能,包括了从需求分析、策划,到账号申请、验证,再到全面的API及开发工具介绍,侧重于服务器端开发。本书也涵盖了盛派网络团队在多年的研发过中收集到的大量注意点,帮助开发者“避坑”。
本书包含了四个部分:微信基础介绍(第1~3章)、Senparc.Weixin SDK框架介绍(第4~13章)、Senparc.Weixin SDK接口介绍(第14~19章)和微信小程序(第20章),由浅入深指导开发者学习微信开发,在此过程中可以结合配套系统进行阅读和练习:https://book.weixin.senparc.com。
同时,本书也是Senparc.Weixin SDK作者为开发者奉上的一份官方文档,书中详细介绍了SDK中各个接口的位置及用法,可以帮助开发者灵活应用和改写代码。对于需要学习编程架构思想的开发者,本书也凝结了较多精华的思想和思考过程,可以作为参考。
Senparc.Weixin SDK已经支持了多个.NET版本,包括.NET Core、.NET Framework 4.5和.NET Framework 4.0,各个版本的接口和使用方法保持了高度的一致,本书以目前使用率zui高的.NET 4.5(C#)版本为例进行介绍,针对其他框架本书也同样适用,读者可以举一反三。
本书除提供给专业开发人员使用以外,也适合大专院校、培训机构作为相关教材和参考书使用。
★部分 微信基础介绍
第1章 使用本书 2
1.1 我是否适合读这本书 3
1.2 如何用好这本书 3
1.3 各章节导读 5
1.4 名词解释 7
1.5 学习资源 8
1.6 帮助我们改进 9
习题 9
第2章 策划你的个微信项目 10
2.1 需求分析 10
2.1.1 沟通需求 10
2.1.2 整理需求 13
2.1.3 制定方案 14
2.2 数据库设计 17
2.3 接口统计 21
2.4 业务逻辑 22
2.5 技术架构 24
2.6 微信公众号策划 26
2.7 统一培训 27
习题 28
第3章 开发微信公众号前的准备 29
3.1 准备工作 29
3.1.1 基本技能 29
3.1.2 开发环境 30
3.1.3 域名 31
3.1.4 服务器 31
3.1.5 SSL证书 31
3.2 消息通信 31
3.2.1 公众平台的消息通信过程 31
3.2.2 XML通信格式 32
3.2.3 消息通信中需要注意的问题 33
3.3 访问网页 34
3.4 使用测试号进行测试 34
3.5 使用微信 Web 开发者工具调试微信 36
3.5.1 下载和安装 36
3.5.2 使用开发者工具 37
3.6 单元测试 39
3.7 在线接口调试工具 39
3.8 服务号、订阅号和认证账号的功能差别 40
3.8.1 服务号 40
3.8.2 订阅号 44
3.9 微信公众号申请 47
习题 56
★第二部分 Senparc.Weixin SDK框架介绍
第4章 Senparc.Weixin SDK设计架构 58
4.1 开源项目 58
4.2 开源协议 58
4.3 微信平台生态与 Senparc.Weixin SDK 59
4.4 文件目录 61
4.4.1 根目录 61
4.4.2 src目录 61
4.5 Senparc.Weixin.dll 62
4.5.1 Senparc.Weixin文件结构 62
4.5.2 Senparc.Weixin类库结构 65
4.5.3 使用Senparc.Weixin注意点 65
4.6 Senparc.Weixin.MP.dll 66
4.6.1 Senparc.Weixin.MP.dll文件结构 66
4.6.2 Senparc.Weixin.MP.dll类库 69
4.7 Senparc.Weixin.WxOpen.dll 69
4.8 Senparc.Weixin.MP.MvcExtension.dll 71
4.9 Senparc.Weixin.Cache.Redis.dll 71
4.10 Senparc.Weixin.Cache.Memcached.dll 72
4.11 其他类库 72
4.12 单元测试 72
4.13 修改源代码和贡献代码 72
4.13.1 注册 GitHub 账号 73
4.13.2 Fork项目 75
4.13.3 修改代码 76
4.13.4 提交代码 78
4.13.5 贡献代码 79
习题 82
第5章 微信公众号开发全过程案例 83
5.1 开发准备 83
5.1.1 安装开发环境及工具 83
5.1.2 创建解决方案 84
5.1.3 创建项目 85
5.1.4 使用 Nuget 安装 Senparc.Weixin SDK 88
5.2 开发 90
5.2.1 准备基础框架 91
5.2.2 创建数据库 91
5.2.3 同步数据库 92
5.2.4 建立数据库框架 95
5.2.5 开发Repository仓储模块 98
5.2.6 缓存 100
5.2.7 开发业务逻辑 102
5.2.8 Controller控制器 105
5.2.9 Web项目和UI 111
5.3 单元测试 111
5.4 部署 112
5.5 消息验证和线上测试 112
5.6 在Microsoft Azure上运行微信公众号示例 112
习题 116
第6章 使用SDK Demo:Senparc.Weixin.MP.Sample 117
6.1 文件位置及结构 117
6.1.1 Senparc.Weixin.MP.Sample 解决方案文件夹 117
6.1.2 Senparc.Weixin.MP.Sample 解决方案 118
6.1.3 Senparc.Weixin.MP.Sample Web项目 119
6.1.4 Senparc.Weixin.MP.Sample.CommonService 项目 121
6.2 配置项目 122
6.2.1 Web.Config文件 122
6.2.2 Global.asax 文件 124
6.2.3 首页 125
6.3 微信消息 126
6.3.1 消息处理 127
6.3.2 消息模拟及并发消息测试 134
6.4 微信菜单 135
6.5 OAuth 138
6.6 JS-SDK 140
6.7 微信支付 141
6.8 素材 143
6.9 缓存测试 143
6.10 异步方法 145
6.11 微信内置浏览器过滤 146
6.12 微信小程序 147
6.12.1 消息处理 147
6.12.2 模板消息 148
6.12.3 WebSocket 148
6.13 其他 148
6.13.1 开放平台 148
6.13.2 企业号 149
6.13.3 文档下载 149
6.14 WebForms项目 150
6.15 单元测试 150
6.15.1 单元测试项目 150
6.15.2 单元测试方法 151
6.16 配置服务器和参数 153
6.16.1 配置IIS 153
6.16.2 安装 .NET Framework 4.5 154
6.16.3 设置IIS站点 155
6.16.4 解析域名 156
6.16.5 检查 Web.config 文件 156
6.17 部署 156
习题 157
第7章 MessageHandler:简化消息处理流程 158
7.1 设计思想 158
7.2 消息类型 160
7.2.1 概述 160
7.2.2 命名规则 161
7.2.3 全局消息基类 161
7.2.4 请求消息 161
7.2.5 响应消息 165
7.3 原始消息处理方法 169
7.4 使用MessageHandler 170
7.4.1 步:通过Nuget安装Senparc.Weixin.MP 170
7.4.2 第二步:创建你自己的MessageHandler 170
7.4.3 第三步:写3行关键代码 175
7.5 OnExecuting()和OnExecuted() 175
7.6 解决用户上下文(Session)问题 176
7.6.1 消息容器:MessageContainer 177
7.6.2 消息队列:MessageQueue 178
7.6.3 单用户上下文:MessageContext 179
7.6.4 全局上下文:WeixinContext 183
7.6.5 上下文移除事件:WeixinContextRemovedEventArgs 185
7.7 消息去重 185
7.8 消息加密 187
7.9 消息格式转换 189
7.9.1 XML转实体 190
7.9.2 实体转XML 190
7.10 消息代理 191
7.11 了解MessageHandler设计原理 191
7.11.1 Senparc.Weixin.MessageHandlers.MessageHandler结构 192
7.11.2 Senparc.Weixin.MP.MessageHandlers.MessageHandler结构 196
7.11.3 抽象类及虚方法 198
7.11.4 构造函数 198
7.11.5 Execute()方法 200
7.11.6 CancelExcute属性 201
7.11.7 OnExecuting()方法 202
7.11.8 DefaultResponseMessage()方法 202
习题 203
第8章 缓存策略 204
8.1 设计原理 204
8.2 基础缓存策略接口:IBaseCacheStrategy 206
8.3 数据容器缓存策略接口:IContainerCacheStragegy 207
8.3.1 原始IContainerCacheStragegy设计思路 207
8.3.2 优化IContainerCacheStragegy设计思路 208
8.3.3 优化IContainerItemCollection和ContainerItemCollection 208
8.4 本地数据容器缓存策略:LocalContainerCacheStrategy 211
8.4.1 创建LocalContainerCacheStrategy类 211
8.4.2 定义数据源 212
8.4.3 实现容器缓存策略 214
8.4.4 运用单例模式 216
8.4.5 测试 218
8.5 分布式缓存 219
8.5.1 起因 219
8.5.2 负载均衡 220
8.5.3 分布式缓存 220
8.5.4 分布式使用的注意点 221
8.6 Redis分布式缓存策略:RediscontainerCacheStrategy 222
8.6.1 Redis简介 222
8.6.2 安装Redis 222
8.6.3 StackExchange.Redis缓存扩展 222
8.6.4 实现Redis缓存策略 224
8.6.5 单元测试 225
8.7 Memcached分布式缓存策略:MemcachedContainerCacheStrategy 225
8.7.1 Memcached简介 225
8.7.2 安装Memcached 226
8.7.3 EnyimMemcached缓存扩展 226
8.7.4 实现Memcached缓存策略 227
8.8 缓存策略工厂:CacheStrategyFactory 227
8.8.1 创建CacheStrategyFactory 227
8.8.2 配置和使用CacheStrategyFactory 229
习题 230
第9章 并发场景下的分布式锁 231
9.1 概述 231
9.2 为什么需要分布式锁 231
9.3 分布式锁的设计 232
9.3.1 IBaseCacheStrategy 接口设计 232
9.3.2 ICacheLock 接口设计 234
9.3.3 分布式锁基类:BaseCacheLock 236
9.4 本地锁 236
9.4.1 LocalCacheLock 236
9.4.2 实现 BeginCacheLock 238
9.5 Redis 锁 238
9.5.1 RedisCacheLock 238
9.5.2 Redlock.CSharp 240
9.5.3 实现BeginCacheLock 240
9.6 Memcached锁 241
9.6.1 MamcachedCacheLock 241
9.6.2 实现BeginCacheLock 242
习题 242
第10章 Container:数据容器 243
10.1 设计思路及原理 243
10.2 BaseContainerBag 245
10.3 BaseContainer 246
10.4 AccessTokenContainer 253
10.5 JsApiTicketContainer 262
10.6 BindableBase 262
10.7 ContainerHelper 264
习题 265
第11章 SenparcMessageQueue:消息队列 266
11.1 设计原理 266
11.2 队列项:SenparcMessageQueueItem 267
11.3 消息队列:SenparcMessageQueue 268
11.3.1 GenerateKey()方法 269
11.3.2 MessageQueueDictionary 269
11.3.3 MessageQueueList 269
11.3.4 有关Dictionary和List的效率测试 270
11.4 自动线程处理:SenparcMessageQueueThreadUtility 272
11.4.1 SenparcMessageQueueThreadUtility 272
11.4.2 线程工具类:ThreadUtility 274
11.4.3 优化扩展 276
习题 278
第12章 接口调用及数据请求 279
12.1 设计规则 279
12.2 响应类型 281
12.2.1 基类:WxJsonResult 281
12.2.2 扩展响应类型 282
12.3 请求 284
12.3.1 GET请求 284
12.3.2 POST请求 286
12.3.3 JSON 请求 290
12.3.4 文件上传/下载 292
12.3.5 公共方法 293
12.4 使用AccessToken请求接口:CommonJsonSend 293
12.4.1 Sent<T>() 方法 293
12.4.2 JsonSetting 295
12.4.3 WeixinJsonConventer 298
12.5 AccessToken自动处理器:ApiHandlerWapper 299
习题 302
第13章 Debug模式及异常处理 303
13.1 Debug模式设计原理 303
13.2 WeixinTrace 304
13.3 异常处理 308
13.3.1 WeixinException 308
13.3.2 ErrorJsonResultException 309
13.3.3
自 2013 年 1 月 13 日 Senparc.Weixin SDK 开源项目发布以来,得到了 .NET 开发者的广泛关注,成为了目前使用率的微信 .NET(C#)SDK,借着微信开发的风口,这个项目也成为国内关注度的 .NET 开源项目之一。
在这四年多的时间里,我带领着盛派团队一直保持着项目更新,目前也已经建立了 13个 QQ 群和多个微信群,以及 1 个问答平台为开发者们答疑解惑、交流开发经验。但是,我们的能力和精力终究是有限的,所谓“授人以鱼,不如授人以渔”,将 SDK 的设计思想和使用方法整理成册,提供给开发者们索引查阅,我想这或许是一件更有意义的事情。同时,在这多年的时间里,我们也接触了众多的项目,收集了许多开发者的交流内容,于是,我们将微信开发过程中的许多“坑”和注意点也整理到书中,方便开发者们“避坑”。书中的章节顺序及内容都经过了仔细推敲,从微信开发的必备基础知识,到 SDK 的原理介绍,再到接口的调用及使用技巧,辅以真实的开发案例和 Demo 介绍,帮助开发者轻松地搭建微信公众号(包括小程序)的应用。
在盛派的文化中,“爱”和“分享”是两个非常重要的元素。“爱”使我们能“爱人如己”,用爱人的心去对待每一件事,用感恩的心去对待每一份收获和挑战;“分享”使我们乐意敞开自己,奉献自己。向需要帮助的人分享自己的知识和见解已经成为盛派人几乎每天的必修课,Senparc.Weixin SDK 开源项目就是在这样的文化中孕育成长起来的。我们用“爱”不断地“分享”着我们的成果,使越来越多的人受益,与此同时,我们也收到了来自开发者们大量的反馈和帮助,以及来自各界的捐赠,这一切助推着 SDK 的成长,也助力着中国的开源事业。看到越来越多的人相互帮助、乐于分享,是给我们的鼓舞。这里,我要真心地感谢曾经帮助过 Senparc.Weixin SDK 项目和盛派团队的人们,以及现在、曾经在盛派一起奋斗的同事们,有你们才有盛派的今天,有你们才有盛派的未来!
本书从策划到终完稿历经 2 年时间,除去经营两家公司已经非常忙碌的原因,我花了大量的时间反复推敲章节的设置和内容的表达,甚至将几十页不满意的内容全部删掉,这一切只是希望将这本书可以秉承 SDK 精益求精的品质,成为精心雕琢的又一件良心产品。当然,我也自知水平有限,书中一定会有不少瑕疵,恳请读者们多多包涵,更重要的是多多反馈和交流,使我们能一同进步。
苏震巍
2017年5月20日
Senparc 微信 SDK 是目前zui优秀的 C# 开源项目之一。完全覆盖了微信开发的各个方面,通过优秀的高并发的缓存模式设计架构,大大简化了微信消息处理等完整流程的编码。特别是 C# 很多优秀的语言特性被发扬光大,加上 .NET Core 的完全开源,为开源项目的长远发展奠定了坚实的基础。希望更多的开发者通过 Senparc 微信 SDK,加入到 .NET Core 开发者队伍中来,并预祝本书热卖!
—— 微软中国云计算创新中心 shou席产品经理 宋青见
如果你想基于 .NET 开发微信公众号和小程序,那么 Senparc.Weixin SDK 是你的shou选函数库。它不仅功能强大接口清晰,还开源高星,尤其支持 .NET Core让你轻松跨平台。这本出自官方的指导性书籍,理所当然将会是你的shou选学习材料。用 .NET,用 Senparc.Weixin SDK 将会让你微信公众号和小程序开发更快捷更省心。
—— 软件工匠 10届MVP 朱永光
本书使用了大量的代码和实例,指导读者怎样从零开始搭建一个基础的微信公众号服务。之后又进一步介绍了并发的环境及数据容器,为开发大规模、高可用的公众号服务提供了很好的模板和支持,zui后本书涵盖了网页授权、微信支付及微信小程序,可以说,本书的内容覆盖了微信相关开发的各个方面,读者阅读完本书,完全可以从零开始搭建一个个性化的、可商用级别的公众号服务。
—— 微软公司 开发者工具事业部 软件工程师 严祥
曾经买过一些技术书籍,有的只是简单 Demo 或官方文档整理,有的作者没有真正开发过大型项目,很难总结出实战项目的宝贵“踩坑”经验。而这本书让人眼前一亮,难得的“理论 实战案例 趟坑经验”总结。作者是专注于微信应用解决方案开发的盛派公司 CEO、微软 Ignite 技术大会讲师,微信开源 SDK在GitHub 国内 C# 开源项目 Star 数排shou位。本书讲解了很多微信开发实战经验与注意事项,例如高并发微信接口调用、缓存、分布式锁、消息队列、微软云 Azure、阿里云的微信部署“踩坑”经验,以及微信小程序开发指导等,无论你用 .NET C#,还是Java、PHP、Go、Python、JavaScript、TypeScript 等,相信都能从本书得到帮助与指导!
—— .NET新时代CTO联盟微信群群主 新东方研发经理 Mike
第7章 MessageHandler:简化消息处理流程
MessageHandler 是一个微信消息的处理模块,也是整个微信开发过程中不可缺少的一部分。在 MessageHandler 中,开发者可以非常轻松地处理所有类型的微信消息。
本章将介绍 MessageHandler 的原理以及使用方法,包括支撑MessageHandler 运行所必需的实体类型、工厂方法等相关知识的介绍。
7.1 设计思想
在第3章3.1节中,我们已经了解微信消息的基本通信原理,因此我们可以非常方便地构造出一个简单的消息处理功能,例如 141#487:
//此处省略了代码,详见书中
这个方法也是目前很多其他框架甚至微信官方的Demo使用的,但是这种方法我可以用“不美好”来形容。
不美——首先使用字符串拼接的方式非常丑陋,其次哪怕使用 XmlDocument 或 XDocument 等面向对象的方式去处理,面对几十种不同的微信消息类型以及一一对应的不同的格式,代码将变得非常冗长而且难以维护。这样的代码你的老板或客户会喜欢吗?
不好——这样的写法坏处太多:
n 可移植性差
n 并没有做到很好地分离(无论是和整个应用程序还是不同请求类型之间)
n 如果要做单元测试就必须整体代码一起上
n 基本上不具备可扩展性
n 容错能力很差,即使做到了,代码已经无法直视
n 正常人用多了会心情不好
那么,“美好”的消息处理方式应该是怎么样的呢?
下面就将 Senparc.Weixin.MP.MessageHandler 介绍给你。
首先,美好的 MessageHandler 必须具有对消息类型的自动识别和分类能力。
第二,美好的 MessageHandler 必须能够同时、自动处理“明文”“兼容模式”“加密模式”三种(所有)消息加密类型,并且让开发者忘掉加密这回事情的存在。
第三,美好的 MessageHandler 必须能够提供很好的消息容器以及储存容器,来解决消息去重、Session 等一系列的问题。
第四,美好的 MessageHandler 必须能够兼容 MVC 和 WebFroms 不同的请求处理方式。
第五,美好的 MessageHandler 必须能够提供统一逻辑处理的接口,方便在特定的环节对消息进行统一处理。
第六,美好的 MessageHandler 必须具备优秀的可测试性和扩展能力。
第七,美好的 MessageHandler 必须能做到很好的逻辑分离。
第八,美好的 MessageHandler 必须让你用起来心情好。
第九,美好的 MessageHandler 不能保证你能在 10 分钟内,完成一个满足以上八条的简单微信应用从开发到上线、发布的全过程。但是我们做到了。
评论
还没有评论。