第1章 微信公众平台介绍 1
1.1 微信公众账号的注册 2
1.1.1 基本信息 3
1.1.2 邮箱激活 3
1.1.3 信息登记 5
1.1.4 完善公众账号信息 10
1.2 微信公众账号的认证 10
1.3 编辑模式 13
1.3.1 自动回复 13
1.3.2 自定义菜单 18
1.4 开发模式简介 21
1.5 小结 23
第2章 使用云平台快速搭建公众账号 24
2.1 开启公众账号开发模式 24
2.2 使用新浪SAE搭建公众账号 25
2.2.1 注册新浪SAE 25
2.2.2 在新浪SAE上创建App 27
2.2.3 部署代码 29
2.2.4 开发接口的认证 29
2.2.5 实现简单的回复 31
2.3 使用百度BAE搭建公众账号 33
2.3.1 注册百度BAE 33
2.3.2 在百度BAE上创建App 35
2.3.3 部署代码 37
2.3.4 开发者接口的认证 39
2.3.5 实现简单的回复 41
2.3.6 BAE代码下载 42
2.4 在PC端进行开发调试 43
2.5 小结 44
第3章 微信公众平台API详解:基础接口 45
3.1 Token验证 45
3.2 接收消息 46
3.2.1 文本消息 46
3.2.2 图片消息 51
3.2.3 地理消息 53
3.2.4 语音消息 56
3.2.5 视频消息 57
3.2.6 链接消息 59
3.2.7 事件消息 61
3.3 回复消息 62
3.3.1 文本消息 62
3.3.2 图片消息 64
3.3.3 语音消息 66
3.3.4 音乐消息 67
3.3.5 视频消息 69
3.3.6 图文消息 71
3.4 小结 75
第4章 微信公众平台API详解:高级开发 76
4.1 会话界面自定义菜单 76
4.1.1 获取access token凭证 76
4.1.2 自定义菜单创建 78
4.1.3 自定义菜单事件 82
4.1.4 自定义菜单获取 84
4.1.5 自定义菜单删除 85
4.1.6 各接口的调用频次限制 85
4.2 语音识别开发 86
4.3 自动获取用户地理位置信息 88
4.4 用户管理 91
4.4.1 查询分组 91
4.4.2 创建分组 93
4.4.3 修改分组名 94
4.4.4 获取关注者列表 95
4.4.5 获取用户基本信息 96
4.4.6 移动用户分组 97
4.5 上传/下载多媒体文件 98
4.5.1 上传多媒体文件 98
4.5.2 下载多媒体文件 100
4.6 客服接口 101
4.6.1 推送文本消息 101
4.6.2 推送图片消息 102
4.6.3 推送语音消息 104
4.6.4 推送视频消息 105
4.6.5 推送音乐消息 107
4.6.6 推送图文消息 109
4.7 二维码开发 111
4.7.1 创建二维码ticket 111
4.7.2 通过ticket换取二维码 112
4.7.3 扫描带参数二维码事件 114
4.8 网页授权获取用户的基本信息(OAuth2.0) 117
4.8.1 设置授权回调域名 117
4.8.2 微信用户同意授权并获取code 119
4.8.3 通过code换取网页授权access token 121
4.8.4 刷新access token 123
4.8.5 拉取用户信息 125
4.8.6 完整的示例代码 126
4.9 wechat的JS开发 129
4.9.1 隐藏/显示微信中网页右上角按钮 129
4.9.2 隐藏/显示微信中网页底部导航栏 130
4.9.3 网页获取网络状态判断 131
4.9.4 网页内容分享开发 132
4.9.5 完整的示例代码 136
4.10 小结 138
第5章 搭建开发环境和相关技术介绍 139
5.1 AppServ的安装与配置 139
5.2 zendstudio的安装与配置 144
5.3 相关技术介绍 147
5.3.1 PHP 147
5.3.2 HTTP 158
5.3.3 XML 162
5.3.4 MySQL 163
5.3.5 HTML 5 166
5.4 小结 169
第6章 开发你的第一个应用——echo server 170
6.1 实现网址接入 170
6.2 解析用户输入并组装返回 173
6.3 错误处理 175
6.4 封装代码 177
6.4.1 日志封装 178
6.4.2 一个简单的框架 182
6.4.3 数据库访问封装 187
6.5 小结 200
第7章 带自定义菜单的echo server 201
7.1 在编辑模式中使用自定义菜单 201
7.2 使用CURL发送HTTP请求 204
7.2.1 使用CURL发送请求的基本流程 204
7.2.2 获取CURL请求的输出信息 205
7.2.3 使用CURL发送GET请求 206
7.2.4 使用CURL发送POST请求 207
7.2.5 使用CURL上传文件 208
7.3 获取access token 210
7.4 自定义菜单的操作 212
7.5 带自定义菜单的echo server 219
7.6 小结 222
第8章 实战案例1:娱乐性图片应用——“每日十幅图” 223
8.1 需求和交互描述 223
8.2 技术方案 226
8.2.1 为什么使用问号 226
8.2.2 为什么使用图文消息 226
8.2.3 表设计 226
8.2.4 批量重命名 227
8.3 代码实现 228
8.3.1 常量定义 228
8.3.2 成员变量和初始化 229
8.3.3 主业务逻辑 230
8.3.4 总代码清单 235
8.4 小结 239
第9章 实战案例2:人脸识别应用——findface 240
9.1 需求和交互描述 240
9.2 人脸识别基本概念 241
9.3 人脸识别OPENAPI 242
9.4 数据库表设计 243
9.5 后台逻辑设计 244
9.6 代码实现 246
9.6.1 配置定义部分 246
9.6.2 Face++接口封装部分 247
9.6.3 Group的创建和训练 249
9.6.4 findface主逻辑 250
9.7 把照片保存到本地 252
9.8 小结 255
第10章 实战案例3:趣味游戏——命运左轮 256
10.1 游戏过程 256
10.2 数据表设计 258
10.3 自定菜单设计 260
10.4 具体代码实现 262
10.4.1 AbstractInterface.php 265
10.4.2 WeChatCallBackMYZL.php 268
10.4.3 Ready.php 273
10.4.4 Start.php 275
10.4.5 ChipIn.php 278
10.4.6 PutMagic.php 283
10.4.7 Shoot.php 289
10.4.8 GetOp.php 296
10.4.9 AddUser.php 298
10.4.10 Matcher.php 300
10.5 运行截图 301
10.6 小结 301
第11章 海量请求的应对方法 302
11.1 影响公众账号的响应速度的因素 302
11.1.1 网络时延 302
11.1.2 请求处理时间 303
11.2 使用高性能的Web组件 303
11.2.1 安装 304
11.2.2 配置和运行 304
11.2.3 ab测试 308
11.3 监控服务器的各项指标 310
11.3.1 top命令 311
11.3.2 vmstat和sar命令 312
11.3.3 netstat命令 313
11.3.4 Nmon监控 313
11.4 使用缓存系统 314
11.4.1 Redis简介 314
11.4.2 Redis的使用和性能对比 315
11.5 数据库的备份和扩展 320
11.5.1 主从复制和读写分离 320
11.5.2 数据库的垂直划分和水平划分 322
11.6 接入层反向代理 325
11.7 小结 328
第12章 恶意请求的应对方法 329
12.1 URL访问限制 329
12.2 防止SQL注入 332
12.3 用户输入导致XML格式错误 335
12.4 PHP安全 337
12.5 DDOS简介 339
12.5.1 SYN flood 339
12.5.2 应用层DDOS 340
12.5.3 ReDOS 341
12.6 小结 344
附录A 返回码说明 345