前言

在我学习公众号开发,也有一段时间了,其中也做过两个公众号项目,最近有友人向我请教公众号该如何学习,特以此篇文章总结一下,同时也巩固一下我的知识~~(套路)~~。

准备环境

系统:*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(渲染模板)
  • Model类

    • Model类基本上就是对SQL语句进行了封装,使用起来比直接写SQL语句更安全、更方便。
      • paginate(分页显示)
      • save(插入数据或更新数据)
      • find(查找单行数据)
      • alias(定义表别名)
      • join(联表查询)
      • order(数据排序)

ThinkCmf基本知识

在了解tp的情况下,使用ThinkCmf进行开发,主要要了解以下关键点。

各场景下的控制器

不同场景,需要继承的控制器也不一样,你也可以选择继承tp的控制器基类,以下为Cmf实现的几个主要控制器。

  • HomeBaseController

    • 这是一个前台页面控制器,默认会往模板注入网站信息参数。
  • UserBaseController

    • 这是一个用户页面控制器,继承HomeBaseController的所有特性,而且用户必须登陆才能访问其页面。
  • AdminBaseController

    • 这是一个管理后台页面控制器,必须为管理员登陆时才能访问其页面。
前端开发

ThinkCmf使用了BootStrap3进行开发,详情请参阅以下文档:

EasyWeChat

这是一个PHP的微信第三方SDK,把微信各种繁琐的操作都封装的十分的友好,所以推荐使用此库。

安装

使用composer进行安装。

composer require overtrue/wechat -vvv
  • 如果缺少php扩展,请使用各系统下的包管理软件进行安装。

微信对接

官方对接的方法很麻烦,主要就是用请求的几个参数,计算一个特定的值,返回给微信服务器,但是这一步EasyWechat已经帮我们做好了。

对接准备

1.公众号(测试号)

2.一个带有80端口的公网服务器

  • 经济宽裕的选项:阿里云

    • 买个ECS云服务器,在上面部署。
  • 经济拮据的选项:花生壳

    • 交个端口映射费,下载花生壳,映射到你的开发环境。
对接

请看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-开放验证)

用户识别的流程为:

  1. 用户打开我们的网页
  2. 网页检测是否有已经验证通过的session,有则无须验证
  3. session记录当前页面地址
  4. 重定向到微信服务器进行验证(提交验证方法、回调页面)
  5. 微信服务器验证通过,返回用户信息到回调页面(其实返回token,不过EasyWechat已经封装好了)
  6. 回调页面记录验证通过的session,跳转到之前记录的页面地址
  7. 重复1、2,通过验证。

验证方法有:

  • snsapi_base
    • 只获取用户的openid,无须用户确认。
  • snsapi_userinfo
    • 获取用户的基本信息,无需用户确认。
  • snsapi_login
    • 网页验证授权,需要用户确认。

具体方法参考文档。

传送门 - 网页授权

总结

总而言之,EasyWechat的出现,使公众号开发的门槛变得很低,学会PHP的基本语法不需要很长时间,搞懂tp的基本使用也不需要很长时间,再有EasyWechat、ThinkCmf封装好了这么多内容,做出一个好的公众号也变得很简单。

可见以后的竞争是多么的激烈。