腾讯公司资深软件研发工程师兼微信公众平台应用开发先驱者撰写,毋庸置疑
全面介绍微信公众平台应用开发所需各项技术,系统解读微信公众平台开放的API和各项高级功能,逐步讲解微信公众平台应用开发的流程、方法和技巧
注重实战,不仅通过3个案例呈现了娱乐型、应用型、游戏型应用的完整开发过程,而且还实现了一个快速开发公众平台应用的框架,可以直接使用
第1章 搭建开发环境和相关技术介绍
最近这段时间,在任何时候打开任意一个IT媒体,都能在显著位置看到关于微信公众平台的文章,无论是稍有历史的CSDN、51CTO和ITEYE,还是新兴的36Kr、雷锋网、虎嗅和钛媒体等。这些媒体自己都第一时间在微信上注册了公众账号来做新闻推送,相信不少读者也关注了其中一些。不管这些关于微信公众平台的文章是软文还是“小编”或者网友的文章,由此可以肯定一点:大家对微信公众平台是非常关注的。相信很多人都想基于微信公众平台做一些事情,都呈跃跃欲试状。但是当你阅读这些文章,希望从中学到一些自己需要的知识时却会发现,其中大部分都是谈前途、谈看法,有实际指导性意义的非常少。其实,这也不能怪这些文章的作者,因为他们自己应该也不太清楚要怎么做。新事物出现的时候人们总是这种状态,觉得前途一片光明,但是大部分人不知道从哪里开始迈出第一步。在笔者看来,作为开发者,拥抱变化,并写下关于新事物的第一行代码就是我们的第一步。本章就是为写下第一行代码做的准备工作。
本章会先介绍微信公众平台的一些基本概念和公众平台的开发模式;然后讲解如何搭建开发环境—AppServ和zendstudio;然后在部署好的开发环境中讲解PHP的基本语法以及如何使用PHP来操作HTTP、XML和MySQL;最后会介绍一下HTML5。这些知识都是本书中会用到的。
计算机这门学科特别强调“实践出真知”。看IT开发的书籍如果不动手实践,大概在看完一个星期之后就只会记得看过这本书而已。对这一点,本人深有体会。所以读者最好是边看边做,这样看完之后也学会了。
1.1 微信公众平台简介
2013年1月15日,微信的注册用户突破3亿。这距离微信发布第一个版本的2011年1月21日仅2年的时间。海量的用户蕴藏着巨大的营销和推广价值。2012年8月17日,微信推出了公众平台,为个人和企业带来了一个新的机会。通过这一平台,个人和企业都可以打造一个微信公众账号,并实现和特定群体的文字、图片、语音的全方位沟通、互动。
和企业微博相比,微信公众账号具有如下两个重要特点:
微信公众账号更注重私密性。订阅者和公众账号的交流是私密的,不像企业微博那样,所有的粉丝都看得到你的评论和转播。
微信公众账号更注重和订阅者的交流,而企业微博更注重信息的传播。
从公众账号和订阅者的交流方式来看,微信公众平台有三大功能:
群发消息。公众账号每天可以向订阅者群发一定量的消息。
使用编辑模式中的自定义回复消息,公众账号可以自定义一些消息回复规则。
使用开发模式,公众账号的维护者可以开发自己独特的业务逻辑来分析订阅者的消息,并反馈给订阅者。这个功能给了公众账号最大的自由度,使用好它可以极大地扩展公众账号的能力。
结合公众平台的特点和功能,公众账号可以有以下使用方法:
企业移动门户。订阅者可以通过企业账号获取最新的优惠和活动,例如“好乐迪KTV”、“百果园”、“海岸城”等公众账号都属于这一类。
新闻资讯。微信自带的“腾讯新闻”以及“雷锋网”、“36Kr”等都属于这一类。用户订阅这些账号是为了看新闻。
娱乐。“糗事百科”、“百思不得姐”以及本书中将要介绍的“meiri10futu”等账号就属于这一类。
社交应用。“校园爱情”、“错过的他”等都属于这一类,这类应用还不太成熟,使用起来还不是很方便,主要原因是微信还没有开放获取用户信息的API。本书中的“findface”是这类应用的一个尝试。
游戏。这类应用大多是发送一个链接给用户,实际运行还是在浏览器里,没有用到微信公众平台的特性。这种模式被认为是微信公众平台和HTML 5的结合点,“爱屁屁”就是这种类型中的一个。非内嵌连接的游戏还很少,本书中的“命运左轮”是非内嵌链接游戏的一个尝试。
也许大家注意到了,这些账号都很生活化,那些微博中人气非常高的名人不在此列。这让笔者想起了两句非常有意思的话,可以形象地总结出微博和微信的区别:“微博一打开,看到一群公知在忧国忧民,感觉世界好黑暗。微信朋友圈一打开,看到一群朋友在吃喝玩乐,感觉世界好阳光。”读者会发现自己平时遇到的一些账号笔者并没有列出来,这并不奇怪,因为公众账号的使用方式还在不断探索之中。那个最有效,最受欢迎的账号也许会出自你手,谁说得定呢?
……
前 言
第1章 搭建开发环境和相关技术介绍
1.1 微信公众平台简介
1.2 公众平台开发模式的数据交互方式
1.3 AppServ的安装与配置
1.4 zendstudio的安装与配置
1.5 相关技术介绍
1.5.1 PHP
1.5.2 HTTP
1.5.3 XML
1.5.4 MySQL
1.5.5 HTML5
1.6 小结
第2章 微信公众平台API详解
2.1 网址接入
2.1.1 接口配置信息
2.1.2 Token验证
2.2 接收用户信息
2.2.1 文本消息
2.2.2 图片消息
2.2.3 地理位置消息
2.2.4 链接消息
2.3 向用户回复消息
2.3.1 回复文本消息
2.3.2 回复音乐消息
2.3.3 回复图文消息
2.4 事件推送
2.5 会话界面自定义菜单
2.5.1 获取凭证的方法
2.5.2 自定义菜单的创建
2.5.3 自定义菜单的获取
2.5.4 自定义菜单的删除
2.5.5 菜单相关接口的限制
2.6 小结
第3章 开发你的
第一个应用-echo server
3.1 实现网址接入
3.2 解析用户输入并组装返回
3.3 错误处理
3.4 封装代码
3.4.1 日志封装
3.4.2 一个简单的框架
3.4.3 数据库访问封装
3.5 小结
第4章 带自定义菜单的echo server
4.1 在编辑模式中使用自定义菜单
4.2 使用CURL发送HTTP请求
4.2.1 使用CURL发送请求的基本流程
4.2.2 获取CURL请求的输出信息
4.2.3 使用CURL发送GET请求
4.2.4 使用CURL发送POST请求
4.2.5 使用CURL上传文件
4.3 获取access_token
4.4 自定义菜单的操作
4.5 实现带自定义菜单的echo server
4.6 小结
第5章 实战案例1:娱乐性图片应用-“每日十幅图”
5.1 需求和交互描述
5.2 技术方案
5.2.1 为什么使用问号
5.2.2 为什么使用图文消息
5.2.3 表设计
5.2.4 批量重命名
5.3 代码实现
5.3.1 常量定义
5.3.2 成员变量和初始化
5.3.3 主业务逻辑
5.3.4 总代码清单
5.4 小结
第6章 实战案例2:人脸识别应用--findface
6.1 需求和交互描述
6.2 人脸识别基本概念
6.3 人脸识别OPENAPI
6.4 数据库表设计
6.5 后台逻辑设计
6.6 代码实现
6.6.1 配置定义部分
6.6.2 Face++接口封装部分
6.6.3 Group的创建和训练
6.6.4 findface主逻辑
6.7 把照片保存到本地
6.8 小结
第7章 实战案例3:趣味游戏-命运左轮
7.1 游戏过程
7.2 数据表设计
7.3 自定菜单设计
7.4 具体代码实现
7.4.1 AbstractInterface.php
7.4.2 WeChatCallBackMYZL.php
7.4.3 Ready.php
7.4.4 Start.php
7.4.5 ChipIn.php
7.4.6 PutMagic.php
7.4.7 Shoot.php
7.4.8 GetOp.php
7.4.9 AddUser.php
7.4.10 Matcher.php
7.5 运行截图
7.6 小结
第8章 海量请求的应对方法
8.1 影响公众账号的响应速度的因素
8.1.1 网络时延
8.1.2 请求处理时间
8.2 使用高性能的Web组件
8.2.1 安装
8.2.2 配置和运行
8.2.3 ab测试
8.3 监控服务器的各项指标
8.3.1 top命令
8.3.2 vmstat和sar命令
8.3.3 netstat命令
8.3.4 Nmon监控
8.4 使用缓存系统
8.4.1 Redis简介
8.4.2 Redis的使用和性能对比
8.5 数据库的备份和扩展
8.5.1 主从复制和读写分离
8.5.2 数据库的垂直划分和水平划分
8.6 接入层反向代理
8.7 小结
第9章 恶意请求的应对方法
9.1 URL访问限制
9.2 防止SQL注入
9.3 用户输入导致XML格式错误
9.4 PHP安全
9.5 DDOS简介
9.5.1 SYN flood
9.5.2 应用层DDOS
9.5.3 ReDOS
9.6 小结