前 言
为什么要写这本书
截至本书完成时,微信已有超过6亿的用户,公众平台给了我们接触这6亿用户的机会。公众平台对于我们来说是一个全新的平台,任何人都可以在公众平台上注册一个账号并进行自己的探索,这意味着大家的机会都是平等的。和大家一样,笔者也是众多探索者中的一个。在本书的第1版完成时,公众平台只开放了一些非常简单的接口,给到开发者的自由度很有限。截至目前,公众平台不仅开放了9大高级接口,还开放了支付接口,可以支持到闭环的用户体验。
关于机会,唐骏在新书《重新出发》中给出了他的理解:“机会有三种,第一种是别人给的,第二种是争取的,第三种是运作出来的。迂回前进是运作机会的最佳方式之一,对于处在弱势态势下的人来说尤其有效。”也许读者目前对公众平台一无所知,但现在开始并不晚,也许最好的那个公众账号就是你将来苦心经营的那个。
笔者是在2013年年初的时候第一次接触到公众平台的,一番了解之后,对它的开发模式非常感兴趣,于是自己开发了一些公众账号,包括本书中将会介绍的meiri10futu、findface和mingyunzuolun。在开发和运营这些账号的过程中记录了遇到的问题和相应的处理方法,本书其实是把笔者的开发过程展现给读者,希望读者能够从中得一些帮助,同时也希望通过本书认识更多的同样对公众平台开发感兴趣的人。
读者对象
对微信公众平台感兴趣的人;
有程序开发经验,想尝试微信公众平台开发的人;
没有程序开发经验,想入门微信公众平台开发的人,本书的第1~2 章是专门为这类读者准备的;
想通过开发一些实际应用提升自己开发能力的人,本书用到的知识都是开发互联网应用通用的;
已经开发了自己的公众账号,想进一步提升的人。
如何阅读本书
本书分为四大部分:
第一部分为第1~2章,介绍了微信公众平台的一些基本概念和操作方法,并通过BAE和SAE,介绍如何通过云平台使用公众账号的开发模式。这一部分相对简单,可以照顾到开发基础薄弱的初学者。
第二部分为第3~7章,着重讲解了公众平台的基础接口、高级接口以及开发中需要用到的技术(HTTP、PHP、XML和SQL等),帮助读者了解一些基础的背景知识。然后使用接口和相关技术实现一个入门的echo server账号。在这部分,笔者还进一步实现了一套快速开发公众账号的框架,读者使用这个框架可以快速实现自己的公众账号。
第三部分为第8~10章,依次向读者展示了三个公众账号(meiri10futu、findface和mingyunzuolun)的开发过程,这三个公众账号分别属于娱乐型、应用型和游戏型。掌握这部分知识之后,读者可以独立实现一个有复杂逻辑的公众账号。
第四部分为第11~12章,介绍了如何处理海量订阅和用户消息、如何防御恶意攻击。这部分意在提高读者多方面的能力,这部分内容是运营互联网应用需要重点关注的。这部分给出了一些实用的方法,掌握这些方法,读者将有能力独自运营一个有相当订阅数量的公众账号。
如果读者是公众账号开发的新手,建议从第一部分开始阅读,如果读者开发过一些公众账号,可以直接选择自己感兴趣的章节阅读。
第2版和第1版的比较
第2版不但新增了微信公众平台9大高级接口的详细介绍和示例代码,而且增加了基本接口的示例代码(这部分放在了第3章和第4章)。另外,一些第1版的读者反映,对代码理解有困难,开发上手有难度,为了照顾到这部分读者,尽量使没有程序开发经验的读者也可以享受开发公众账号的乐趣,笔者特意新增了对微信公众平台开发模式基本概念的介绍和如何使用BAE和SAE进行微信公众账号的开发(这部分放在第1章和第2章)。有了这些内容,相信任何读者都能顺利入门微信公众账号的开发,完成自己特有公众账号的开发。
目 录
第1章 微信公众平台介绍
1.1 微信公众账号的注册
1.2 微信公众账号的认证
1.3 编辑模式
1.4 开发模式简介
1.5 小结
第2章 使用云平台快速搭建公众账号 /
2.1 开启公众账号开发模式 /
2.2 使用新浪SAE搭建公众账号 /
2.2.1 注册新浪SAE /
2.2.2 在新浪SAE上创建App /
2.2.3 部署代码 /
2.2.4 开发接口的认证 /
2.2.5 实现简单的回复 /
2.3 使用百度BAE搭建公众账号 /
2.3.1 注册百度BAE /
2.3.2 在百度BAE上创建App /
2.3.3 部署代码 /
2.3.4 开发者接口的认证 /
2.3.5 实现简单的回复 /
2.3.6 BAE代码下载 /
2.4 在PC端进行开发调试 /
2.5 小结 /
第3章 微信公众平台API详解:基础接口 /
3.1 Token验证 /
3.2 接收消息 /
3.2.1 文本消息 /
3.2.2 图片消息 /
3.2.3 地理消息 /
3.2.4 语音消息 /
3.2.5 视频消息 /
3.2.6 链接消息 /
3.2.7 事件消息 /
3.3 回复消息 /
3.3.1 文本消息 /
3.3.2 图片消息 /
3.3.3 语音消息 /
3.3.4 音乐消息 /
3.3.5 视频消息 /
3.3.6 图文消息 /
3.4 小结 /
第4章 微信公众平台API详解:高级开发 /
4.1 会话界面自定义菜单 /
4.1.1 获取access_token凭证 /
4.1.2 自定义菜单创建 /
4.1.3 自定义菜单事件 /
4.1.4 自定义菜单获取 /
4.1.5 自定义菜单删除 /
4.1.6 各接口的调用频次限制 /
4.2 语音识别开发 /
4.3 自动获取用户地理位置信息 /
4.4 用户管理 /
4.4.1 查询分组 /
4.4.2 创建分组 /
4.4.3 修改分组名 /
4.4.4 获取关注者列表 /
4.4.5 获取用户基本信息 /
4.4.6 移动用户分组 /
4.5 上传/下载多媒体文件 /
4.5.1 上传多媒体文件 /
4.5.2 下载多媒体文件 /
4.6 客服接口 /
4.6.1 推送文本消息 /
4.6.2 推送图片消息 /
4.6.3 推送语音消息 /
4.6.4 推送视频消息 /
4.6.5 推送音乐消息 /
4.6.6 推送图文消息 /
4.7 二维码开发 /
4.7.1 创建二维码ticket /
4.7.2 通过ticket换取二维码 /
4.7.3 扫描带参数二维码事件 /
4.8 网页授权获取用户的基本信息(OAuth2.0) /
4.8.1 设置授权回调域名 /
4.8.2 微信用户同意授权并获取code /
4.8.3 通过code换取网页授权access_token /
4.8.4 刷新access_token /
4.8.5 拉取用户信息 /
4.8.6 完整的示例代码 /
4.9 wechat的JS开发 /
4.9.1 隐藏/显示微信中网页右上角按钮 /
4.9.2 隐藏/显示微信中网页底部导航栏 /
4.9.3 网页获取网络状态判断 /
4.9.4 网页内容分享开发 /
4.9.5 完整的示例代码 /
4.10 小结 /
第5章 搭建开发环境和相关技术介绍 /
5.1 AppServ的安装与配置 /
5.2 zendstudio的安装与配置 /
5.3 相关技术介绍 /
5.3.1 PHP /
5.3.2 HTTP /
5.3.3 XML /
5.3.4 MySQL /
5.3.5 HTML 5 /
5.4 小结 /
第6章 开发你的第一个应用——echo server /
6.1 实现网址接入 /
6.2 解析用户输入并组装返回 /
6.3 错误处理 /
6.4 封装代码 /
6.4.1 日志封装 /
6.4.2 一个简单的框架 /
6.4.3 数据库访问封装 /
6.5 小结 /
第7章 带自定义菜单的echo server / 21
7.1 在编辑模式中使用自定义菜单 /
7.2 使用CURL发送HTTP请求 /
7.2.1 使用CURL发送请求的基本流程 /
7.2.2 获取CURL请求的输出信息 /
7.2.3 使用CURL发送GET请求 /
7.2.4 使用CURL发送POST请求 /
7.2.5 使用CURL上传文件 /
7.3 获取access_token /
7.4 自定义菜单的操作 /
7.5 带自定义菜单的echo server /
7.6 小结 /
第8章 实战案例1:娱乐性图片应用——“每日十幅图” /
8.1 需求和交互描述 /
8.2 技术方案 /
8.2.1 为什么使用问号 /
8.2.2 为什么使用图文消息 /
8.2.3 表设计 /
8.2.4 批量重命名 /
8.3 代码实现 /
8.3.1 常量定义 /
8.3.2 成员变量和初始化 /
8.3.3 主业务逻辑 /
8.3.4 总代码清单 /
8.4 小结 /
第9章 实战案例2:人脸识别应用——findface /
9.1 需求和交互描述 /
9.2 人脸识别基本概念 /
9.3 人脸识别OPENAPI /
9.4 数据库表设计 /
9.5 后台逻辑设计 /
9.6 代码实现 /
9.6.1 配置定义部分 /
9.6.2 Face++接口封装部分 /
9.6.3 Group的创建和训练 /
9.6.4 findface主逻辑 /
9.7 把照片保存到本地 /
9.8 小结 /
第10章 实战案例3:趣味游戏——命运左轮 /
10.1 游戏过程 /
10.2 数据表设计 /
10.3 自定菜单设计 /
10.4 具体代码实现 /
10.4.1 AbstractInterface.php /
10.4.2 WeChatCallBackMYZL.php /
10.4.3 Ready.php /
10.4.4 Start.php /
10.4.5 ChipIn.php /
10.4.6 PutMagic.php /
10.4.7 Shoot.php /
10.4.8 GetOp.php /
10.4.9 AddUser.php /
10.4.10 Matcher.php /
10.5 运行截图 /
10.6 小结 /
第11章 海量请求的应对方法 /
11.1 影响公众账号的响应速度的因素 /
11.1.1 网络时延 /
11.1.2 请求处理时间 /
11.2 使用高性能的Web组件 /
11.2.1 安装 /
11.2.2 配置和运行 /
11.2.3 ab测试 /
11.3 监控服务器的各项指标 /
11.3.1 top命令 /
11.3.2 vmstat和sar命令 /
11.3.3 netstat命令 /
11.3.4 Nmon监控 /
11.4 使用缓存系统 /
11.4.1 Redis简介 /
11.4.2 Redis的使用和性能对比 /
11.5 数据库的备份和扩展 /
11.5.1 主从复制和读写分离 /
11.5.2 数据库的垂直划分和水平划分 /
11.6 接入层反向代理 /
11.7 小结 /
第12章 恶意请求的应对方法 /
12.1 URL访问限制 /
12.2 防止SQL注入 /
12.3 用户输入导致XML格式错误 /
12.4 PHP安全 /
12.5 DDOS简介 /
12.5.1 SYN flood /
12.5.2 应用层DDOS /
12.5.3 ReDOS /
12.6 小结 /
附录A 返回码说明 /