第一部分 微信基础介绍 2
第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 XM L通信格式 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框架介绍 58
第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配置llS 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和ContainerltemCollection 208
8.4本地数据容器缓存策略:Local ContainerCacheStrategy 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创建Cache StrategyFactory 227
8.8.2配置和使用Cache StrategyFactory 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队列项:SenparcMessageQueueltem 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 MessageHandlerException 310
13.3.4 UnknownRequestMsgTypeException 311
13.3.5 UnRegisterAppIdException 311
13.3.6 WeixinMenuException 312
13.4微信官方在线调试工具 314
习题 315
第三部分Senparc&Weixin SDK接口介绍 318
第14章 微信接口 318
14.1微信接口概述 318
14.2开始使用微信接口 319
14.2.1获取接口调用凭据(AccessToken) 319
14.2.2获取凭证接口 320
14.2.3获取微信服务器IP地址 321
14.3自定义菜单管理 322
14.3.1自定义菜单 322
14.3.2个性化菜单 328
14.4消息管理 329
14.4.1发送客服消息 329
14.4.2发送消息-群发接口和原创校验 332
14.4.3发送消息-模板消息接口 334
14.4.4获取公众号的自动回复规则 334
14.5微信网页授权(OAuth) 334
14.6素材管理 335
14.6.1新增临时素材 335
14.6.2获取临时素材 335
14.6.3新增永久素材 335
14.6.4获取永久素材 335
14.6.5删除永久素材 335
14.6.6修改永久图文素材 336
14.6.7获取素材总数 336
14.6.8获取素材列表 336
14.7用户管理 336
14.7.1用户标签管理 336
14.7.2设置用户备注名 338
14.7.3获取用户基本信息(UnionID机制) 338
14.8账号管理 339
14.8.1创建二维码 339
14.8.2获取下载二维码的地址 339
14.8.3长链接转短链接 339
14.9数据统计接口 339
14.9.1用户分析数据接口 340
14.9.2图文分析数据 340
14.9.3消息分析数据 341
14.9.4接口分析数据接口 342
14.10微信JS-SDK 343
14.10.1获取验证地址 343
14.10.2获取AccessToken 343
14.10.3刷新access token 343
14.10.4获取用户基本信息 343
14.10.5检验授权凭证(access token)是否有效 343
14.11微信小店接口 344
14.11.1语义理解接口 344
14.12微信卡券接口 344
14.12.1创建卡券 344
14.12.2投放卡券 345
14.12.3核销卡券 346
14.12.4管理卡券 346
14.12.5会员卡专区 348
14.12.6朋友的券专区 349
14.12.7第三方代制专区 350
14.12.8第三方授权相关接口(开放平台) 352
14.13微信门店接口 352
14.13.1上传图片 352
14.13.2创建门店 352
14.13.3查询门店信息 353
14.13.4查询门店列表 353
14.13.5修改门店服务信息 353
14.13.6删除门店 353
14.13.7获取门店类目表 353
14.13.8设备功能介绍 353
14.14多客服功能 354
14.14.1客服管理接口 354
14.14.2多客服会话控制接口 355
14.14.3获取客服聊天记录接口 356
14.15 摇一摇周边 356
14.15.1申请开通摇一摇周边 356
14.15.2设备管理 356
14.15.3页面管理 357
14.15.4素材管理 358
14.15.5配置设备与页面的关联关系 358
14.15.6数据统计 359
14.15.7 HTML5页面获取设备信息 359
14.15.8获取设备及用户信息 360
14.15.9摇一摇红包 361
14.16微信连Wi-Fi 361
14.16.1第三方平台获取开插件wifi_token 361
14.16.2 Wi-Fi门店管理 362
14.16.3 Wi-Fi设备管理 362
14.16.4配置联网方式 363
14.16.5商家主页管理 363
14.16.6 Wi-Fi数据统计 364
14.16.7卡券投放 364
14.17小程序 364
14.18异步方法 365
习题 366
第15章 模板消息 367
15.1概述 367
15.2使用规则 367
15.3申请模板消息 369
15.3.1开通模板消息功能 369
15.3.2添加消息模板 370
15.3.3创建自定义消息模板 373
15.4接口介绍 374
15.4.1设置所属行业 374
15.4.2获取设置的行业信息 374
15.4.3获得模板ID(添加模板) 374
15.4.4获取模板列表 375
15.4.5删除模板 375
15.4.6发送模板消息 375
15.4.7事件推送 381
15.4.8异步方法 382
习题 383
第16章 微信网页授权(OAuth 2.0) 384
16.1 OAuth 2.0简介 384
16.2设置微信OAuth回调域名 386
16.3开发微信OAuth接口 387
16.3.1创建Controller 387
16.3.2 GetAuthorizeUrl()方法 388
16.3.3 GetAccessToken()方法 391
16.3.4 GetUserlnfo()方法 394
16.3.5 RefreshToken()方法 398
16.3.6 Auth()方法 398
16.4异步OAuth接口 399
16.5调试OAuth 399
16.5.1调试工具 399
16.5.2设置 400
16.6使用SenparcOAuthAttribute实现OAuth自动登录 403
16.6.1 SenparcOAuthAttribute定义 403
16.6.2使用SenparcOAuthAttribute 406
16.7解决OAuth出现40029 (invalid code)错误 408
16.7.1现象和问题 408
16.7.2原因 408
16.7.3解决方案一 411
16.7.4解决方案二 411
16.7.5解决方案三 412
16.7.6解决方案四 412
16.7.7解决方案总结 414
16.8一些误区和注意点 414
16.8.1每次打开页面都使用OAuth获取Openld 414
16.8.2认为不使用HTTPS没有关系 416
16.8.3在Callback (redirectUrl)页面直接输出页面 416
16.8.4短信通知包含需要OAuth的网页(体验问题) 417
16.8.5不使用OAuth,而使用菜单事件判断来访者身份 418
习题 419
第17章 其他帮助类及辅助接口 420
17.1概述 420
17.2序列化和JSON相关 420
17.2.1 SerializerHelper 420
17.2.2 WeixinJsonConventer 422
17.2.3 JsonSetting 422
17.3时间帮助类:DateTimeHelper 423
17.4加密解密 424
17.4.1 MD5 424
17.4.2 SHA 1 425
17.4.3 AES 426
17.5浏览器相关 427
17.5.1判断当前网页是否在浏览器内 427
17.6 JS-SDK 429
17.6.1获取签名信息 429
17.6.2 JsSdkUiPackage 430
17.6.3获取SHA1加密信息 432
17.6.4卡券相关 433
17.7地图及位置 435
17.7.1 LBS位置计算帮助类:GpsHelper 435
17.7.2百度地图 435
17.7.3谷歌地图 435
习题 436
第18章 微信网页开发:JS-SDK 437
18.1概述 437
18.2签名 438
18.2.1通过JsApiTicketContainer获取j sapi- ticket 438
18.2.2获取签名 439
18.3 JS-SDK使用步骤 439
18.3.1第一步:绑定域名 439
18.3.2第二步:引入JS文件 440
18.3.3第三步:通过config接口注入权限验证配置 441
18.3.4第四步:通过ready接口处理成功验证 442
18.3.5第五步:通过error接口处理失败验证 442
18.4接口调用说明 442
18.5基础接口 443
18.6具体业务接口 443
18.6.1分享接口 444
18.6.2图像接口 446
18.6.3音频接口 447
18.6.4智能接口 450
18.6.5设备信息 451
18.6.6地理位置 451
18.6.7摇一摇周边 452
18.6.8界面操作 452
18.6.9微信扫一扫 454
18.6.10微信小店 454
18.6.11微信支付 455
18.6.12微信卡券 455
18.7参考资料 458
18.7.1所有菜单项列表 458
18.7.2卡券扩展字段cardExt说明 459
18.7.3所有JS接口列表 459
习题 461
第19章 微信支付 462
19.1支付模式 463
19.1.1刷卡支付 463
19.1.2扫码支付 463
19.1.3公众号支付 463
19.1.4 APP支付 463
19.2申请微信支付 463
19.2.1流程介绍 463
19.2.2第一步:申请开户 464
19.2.3第二步:小额打款 466
19.2.4第三步:支付验证费用 467
19.3获取商户证书 468
19.3.1接收邮件 468
19.3.2安装操作证书 468
19.3.3下载证书 471
19.3.4一些注意点 474
19.4接口规则 475
19.4.1协议规则 475
19.4.2参数规定 476
19.4.3安全规范 479
19.4.4获取Openld 480
19.5公众号支付 480
19.5.1支付场景介绍 480
19.5.2公众号后台的配置 482
19.5.3设置测试目录 486
19.5.4商户后台的配置 487
19.5.5业务流程 489
19.5.6 HTML5页面调起支付API 491
19.6微信支付API 492
19.6.1统一下单 493
19.6.2查询订单 496
19.6.3关闭订单 497
19.6.4申请退款 498
19.6.5查询退款 499
19.6.6下载对账单 500
19.6.7支付结果通知 502
19.6.8交易保障 503
19.7企业付款 503
19.7.1概述 503
19.7.2企业付款API 505
19.7.3查询企业付款API 506
19.8微信支付Demo开发 507
19.8.1后端开发 507
19.8.2前端开发 514
19.9需要注意的一些事 517
19.9.1关于服务器 SSL版本 517
19.9.2关于IPv6 518
19.9.3关于阿里云主机 518
习题 518
第四部分 微信小程序 522
第20章 微信小程序 522
20.1注册小程序 523
20.2管理信息及微信认证 525
20.2.1信息设置 525
20.2.2微信认证 527
20.3准备开发 528
20.3.1开发参数设置 528
20.3.2添加开发者和体验者 532
20.3.3下载开发工具 532
20.3.4开发第一个小程序 533
20.3.5预览小程序 542
20.3.6发布小程序 542
20.4使用SDK进行后端开发 545
20.4.1 Senparc.Weixin.WxOpen.dll 545
20.4.2对接MessageHandler 545
20.4.3回复客服消息 551
20.4.4获取二维码 555
20.4.5其他高级接口 556
20.5使用模板消息 556
20.5.1概述 556
20.5.2第一步:选取消息模板 556
20.5.3第二步:设置并添加模板 558
20.5.4第三步:发送模板消息 559
20.5.5申请模板 563
20.6实现数据请求 565
20.7登录接口及用户信息管理 569
20.7.1登录:wx.login 569
20.7.2登录状态维护:SessionContainer 571
20.7.3验证:wx.checkSession 573
20.7.4签名加密 573
20.7.5加密数据解密算法 575
20.8实现WebSocket通信 578
20.8.1关于WebSocket 578
20.8.2在服务器上配置WebSocket 578
20.8.3使用Senparc.WebSocket进行WebSocket开发 580
20.9小程序的微信支付 591
20.10小程序开发过程中的常见问题 594
20.10.1使用HTTPS 594
20.10.2安装WMSVC证书 596
20.10.3申请免费的SSL证书 596
20.10.4解决Unexpected response code∶ 200错误 601
习题 602