说一说yii2-wx这个扩展的设计思路

706 阅读5分钟
原文链接: www.learn-tips.com
今年做了一个小的开源项目 yii2-wx,是一个yii2框架的微信开发sdk,在这里聊聊,希望对刚使用它的开发者有用。

 

为何要做它

在做之前其实已经有了easywechat这个通用性扩展,我在课程 《yii2实战快餐系统》 使用的就是它,easywechat非常棒,无论是使用的简易程度还是设计结构,都很好。

但是作为一个通用性的库,它必然要集成很多扩展作为支持,比如日志、比如缓存,这样就导致easywechat体积其实蛮大的,而像日志、缓存这些我们的yii2已经有了,那为何不直接做个可以和yii2高度整合的微信sdk那,这是最初的想法。

另外当时需要录制两个方面的内容

  1. yii2扩展的搭建
  2. 微信公众号接口的教程

这也促成了yii2-wx的诞生,它是一个yii2的扩展、而它的诞生就是方便公众号和微信支付而服务的。

是的,你看到的 《构造开源的微信SDK》视频汇总贴(共47节) 就是上面的结果。

 

设计成什么样的

安装方便、体积小、配置少、使用简单,一个一个说吧。

安装方便

这个其实是很多库甚至项目的选择,就是采用Composer对代码的发布和依赖进行管理。

在很久以前,我们安装一个扩展时采用归档形式,下载下来,然后引入并使用,A项目可能放到a文件夹、B项目会放到c文件夹,在使用者层面,扩展在网站的结构中并没有统一。

更重要的是当扩展升级的时候,会出现很多问题,这些问题主要来自于版本,比如扩展X在1.1中引入了Y,而Y的运行又要依托于Z,会很麻烦。

Composer就是一个包依赖工具,我们不用管这一切,这些它都帮我们完成。

对于yii2-wx而言,只需要一行代码即可。

composer require abei2017/yii2-wx

参考:《Composer视频手册》

体积小

怎么才会体积小?扩展少呗。这点来说,yii2-wx是有一定优势的,毕竟它只服务于yii2框架,很多东西可以直接使用框架的,比如前面提到的日志和缓存等,在yii2-wx中关于微信access token的存储就使用了yii2的文件缓存。

而当必须引入第三方扩展的时候,也优选选择yii2官方提供的,我相信这样将来更容易让yii2-wx使用yii2的高级功能,当然现在还没有使用。

关于第三方扩展目前仅仅使用了一个

  • yiisoft/yii2-httpclient 它主要负责和微信服务器进行通讯。

 

配置少

没有配置是不可能的,yii2-wx需要知道公众号的ID啊、秘钥啊等等,这些都需要,但是可以少配置,yii2-wx是这样做的,利用yii2的配置文件params.php,我们默认会读取配置文件中的[‘wx’][‘mp’],如果小程序会读取[‘wx’][‘mini’],所以如果按照推荐格式配置,一行代码即可调动一个接口,比如下面的代码

$qrcode = (new Application())->dirver("mp.qrcode");

是的,因为读取默认的,所以在实际的编码中,我们不需要引入配置项并且传入,yii2-wx会自己识别。

当然你也可以传入

$qrcode = (new Application(["conf"=>$conf]))->dirver("mp.qrcode");

有些时候是需要传入的,比如你使用yii2-wx开发了一个多公众号并存的系统。

 

使用简单

在这里借鉴了yii2的设计和easywechat的结构,多谢两位大神,yii2-wx在使用简单上主要是采用了单入口和助手驱动模式,我们来看下面的代码。

$qrcode = (new Application())->dirver("mp.qrcode");

yii2-wx的一切都从Application类的对象开始,实例化这样一个对象,它代表yii2-wx自身,包含了配置信息、http客户端对象、以及各接口的对应表。

而当我们想调用一个微信接口的时候,需要驱动一个助手,比如上面我使用dirver来驱动一个二维码助手,然后调用二维码助手的相应方法进行接口的通讯即可。

因此,在yii2-wx中,你总要先实例化一个Application对象并驱动一个助手类对象,我喜欢这样叫它们。

 

没错,以上是设计上的一些想法及实现。

 

现在要注意的地方

根据我的经验和对yii2-wx的理解,给大家说说在使用yii2-wx开发中当前要注意的地方。

一定要升级 当前yii2-wx的每个版本主要是微信各接口的覆盖和bug修复,所以务必升级,这点是最重要的,每次升级都会出视频,让大家知道都哪部分更改了。

升不上去的问题 一些人反映使用composer不能升级到最新版本问题,这其实是composer镜像问题,如果经济允许,做个翻墙是最好的,国内的composer的镜像很多没有做到同步更新。这个问题我特意录制了一课还 《Composer视频手册》第9节。

关于PHPSTORM在driver后无法智能提醒 因为driver使用了yii2的createObject来生成一个助手对象,phpstorm无法跟踪,这个当前最简单的方法是做一个PHPSTORM的插件来支持,感兴趣的同学可以试试哦,在yii2-wx代码层面当前还没有考虑优化。

 

未来考虑

yii2-wx其实还有很多要做的,比如测试、更好的日志和调试功能等等。

测试其实是必要的,它保证每个版本的更新不会让其他模块引入新的bug。

更好的日志,之前在1.3版本的时候尝试过引入日志(结合chrome的控制台显示),不过中期出现了严重的问题,因此这个日志的形式还是需要再思考思考如何呈现,让大家开发浏览非常方便,写到日志文件我觉得是最后的一个方法,毕竟每次都读文件也挺麻烦的。

一套课程,这个已经在进行,就是yii2-wx视频课程,上个月得了结肠炎没有录制,和《yii2进阶篇》一起,会尽快呈现给大家。

明年的一个重要事情,如果有可能,会做一套基于yii2-wx的api通道,结合hou-admin,让微信开发更简单,当然这个其实是hou-admin的事情。