前言
在我学习公众号开发,也有一段时间了,其中也做过两个公众号项目,最近有友人向我请教公众号该如何学习,特以此篇文章总结一下,同时也巩固一下我的知识~~(套路)~~。
准备环境
系统:*nix(Ubuntu、macOS,不推荐windows)
软件:apache(httpd)、mysql、php7+、composer、phpstorm
库:thinkcmf、overtrue/wechat
参阅文档
学习公众号开发建议参阅以下文档。
库的介绍
本人推荐使用ThinkCmf5+EasyWechat进行开发。
ThinkCmf
ThinkCmf是基于ThinkPHP的一个内容管理系统框架,在公众号开发里,主要担当提供后台管理系统的角色。
ThinkPHP基本知识
MVC设计模式
由于ThinkPHP是一个使用MVC设计思想编写的框架,所以我们必须要对其有简单的了解。
-
模型(Model)
- 与数据进行交互。
- 在tp里,模型主要用于对数据库进行增删改查。
-
视图(View)
- 提供用户界面显示。
- 在tp里,视图(模板)用于对html进行渲染,即按模板的格式注入数据,生成页面。
-
控制器(Controller)
- 逻辑交互的核心,处理视图与模型之间的交互。
- 在tp里,控制器处理用户请求的参数,调用模型获取数据,处理数据,注入到模版,返回页面显示结果。
其它结构
ThinkPHP除了MVC这三个核心内容,还在此基础上作出了一些扩展。
-
服务(Service)
- 对模型进行封装,比如调用模型,获取分页显示等逻辑业务操作。
-
Api
- 对模型以及服务进行封装,比如检查用户权限、遍历用户文件等复杂操作。
-
验证器(Validate)
- 对用户请求参数进行验证,比如邮箱格式、手机号格式、是否必填字段等。
一些基本的方法
-
Controller类
- Controller类对网页所需的大部分基本都进行了封装,使用起来比起原生方式难度极大的降低。
- success(返回成功信息)
- error(返回错误信息)
- assign(向模板注入数据)
- fetch(渲染模板)
- Controller类对网页所需的大部分基本都进行了封装,使用起来比起原生方式难度极大的降低。
-
Model类
- Model类基本上就是对SQL语句进行了封装,使用起来比直接写SQL语句更安全、更方便。
- paginate(分页显示)
- save(插入数据或更新数据)
- find(查找单行数据)
- alias(定义表别名)
- join(联表查询)
- order(数据排序)
- Model类基本上就是对SQL语句进行了封装,使用起来比直接写SQL语句更安全、更方便。
ThinkCmf基本知识
在了解tp的情况下,使用ThinkCmf进行开发,主要要了解以下关键点。
各场景下的控制器
不同场景,需要继承的控制器也不一样,你也可以选择继承tp的控制器基类,以下为Cmf实现的几个主要控制器。
-
HomeBaseController
- 这是一个前台页面控制器,默认会往模板注入网站信息参数。
-
UserBaseController
- 这是一个用户页面控制器,继承HomeBaseController的所有特性,而且用户必须登陆才能访问其页面。
-
AdminBaseController
- 这是一个管理后台页面控制器,必须为管理员登陆时才能访问其页面。
前端开发
ThinkCmf使用了BootStrap3进行开发,详情请参阅以下文档:
-
HTML基础语法学习(由Virgy补充,感谢)
EasyWeChat
这是一个PHP的微信第三方SDK,把微信各种繁琐的操作都封装的十分的友好,所以推荐使用此库。
安装
使用composer进行安装。
composer require overtrue/wechat -vvv
- 如果缺少php扩展,请使用各系统下的包管理软件进行安装。
微信对接
官方对接的方法很麻烦,主要就是用请求的几个参数,计算一个特定的值,返回给微信服务器,但是这一步EasyWechat已经帮我们做好了。
对接准备
1.公众号(测试号)
- 微信公众平台
- 微信公众平台-测试号
- 注册完成后,得到appid、secret,设置好token。
2.一个带有80端口的公网服务器
对接
请看EasyWechat的文档,那里写的很详细!!!
这里要注意的是,ThinkPHP不能直接调用response进行返回值,要通过response取得内容,然后通过echo输出、exit,或是通过die输出内容,因为thinkphp在调试模式会对页面注入一些多余的内容。方法如下:
$response = $app->server->serve();
// 方法1
die($response->getContent());
// 方法2
echo $response->getContent();
exit();
消息处理
消息处理的流程一般为:
用户操作->提交给微信服务器->转发到我们的服务器->处理数据,返回给微信服务器->返回给用户
EasyWechat使用挂接事件的方式处理事件,详情参考文档。
消息类型
在EasyWechat,消息分为两部分,一是Event,二是用户消息(Event以外)。
- 事件(Event)
用户点击菜单、扫码、上报地理位置等等行为,都会通过事件的形式传到我们的服务器。
- 用户消息(Event以外)
用户发送文字、图片、位置、视频、声音等等数据,都会通过消息的形式传到我们的服务器。
返回消息
返回消息支持的消息类型,及创建方法,参考文档。
菜单
详情请参考以下文档。
识别用户/用户绑定(OAuth-开放验证)
用户识别的流程为:
- 用户打开我们的网页
- 网页检测是否有已经验证通过的session,有则无须验证
- session记录当前页面地址
- 重定向到微信服务器进行验证(提交验证方法、回调页面)
- 微信服务器验证通过,返回用户信息到回调页面(其实返回token,不过EasyWechat已经封装好了)
- 回调页面记录验证通过的session,跳转到之前记录的页面地址
- 重复1、2,通过验证。
验证方法有:
- snsapi_base
- 只获取用户的openid,无须用户确认。
- snsapi_userinfo
- 获取用户的基本信息,无需用户确认。
- snsapi_login
- 网页验证授权,需要用户确认。
具体方法参考文档。
总结
总而言之,EasyWechat的出现,使公众号开发的门槛变得很低,学会PHP的基本语法不需要很长时间,搞懂tp的基本使用也不需要很长时间,再有EasyWechat、ThinkCmf封装好了这么多内容,做出一个好的公众号也变得很简单。
可见以后的竞争是多么的激烈。