如何优雅的扩展easywechat扩展

liyuzhao5年前开发项目遇到的问题2636

项目地址:

1https://github.com/phper666/easywechat-extension.git

扩展easywechat,主要是针对easywechat不及时更新版本时,可以自主扩展微信的api接口

问题

最近开发遇到了一个问题,使用easywechat包时,有些微信接口没有,需要自行扩展这些接口。原来有想过fork easywechat的包来扩展,但是这样不好的是,每次easywechat版本发布都需要去查看该本版有什么改动,然后再修改到自己fork的easywechat包。最近去看了下easywechat的源码包,发现可以不改动easywechat包的情况下扩展微信的接口。

如何扩展接口

1、继承easywechat原有的工厂类,自己自定义一个方法来实例化你扩展的接口,比如我自定义了一个customMake来实例化扩展的企业微信外部联系人标签接口

2、扩展接口,比如现在easywechat没有企业微信外部联系人标签的接口,但是有外部联系人的一些其他接口了,所有我找到了企业微信Work/ExternalContact下外部联系人的接口,然后扩展一个CorpTag类,这个类封装了所有企业微信外部联系人的标签操作接口

3、提供你的扩展接口,如果你看easywechat的源码,你会发现每种类型接口下都有一个ServiceProvider.php的类,这个类就是用来注册你封装好的接口。因为我扩展的外部联系人企业标签接口原来已经有了一些接口,所以我需要重写这个ServiceProvider类下的register方法来注册接口,实际只有一个方法,你可以继承ServiceProvider,然后重写register方法,也可以重新写一个新的ServiceProvider类,目前我是新写一个ServiceProvider

4、easywechat支持微信多种类型接口,比如微信公众号、微信小程序、企业微信、开放平台等,你需要找到需要扩展的接口类型,继承该类型下的Application类,然后重写$providers属性,该属性是会实例化填写的所有的ServiceProvider驱动,比如我刚刚新增了一个\Phper666\EasywechatExtension\Work\ExternalContact\ServiceProvider驱动来加载接口,所以我要把它旧的\EasyWeChat\Work\ServiceProvider驱动删掉,写上自己新增的ServiceProvider驱动,这样就能使用自己扩展的接口了,easywecaht原有的驱动不要删除,直接复制上去,删掉你要扩展的驱动就行。这样也完全不用担心easywechat升级版本了,我们只需要维护自己扩展的接口就行,easywechat新增什么我们更新后照样能用

5、使用扩展接口

// 使用原来的easywechat接口:
$config = []; 
// 自行写上自己的配置
$app = Factory::work($config); 
// 可以继续请求easywechat封装好的接口
// 使用自己扩展的接口(包含了easywechat的原有接口)
$app = Factory::customMake('Work', $config);
$app->corp_tag->getCorpTagList(); // 这里就能拿到了外部联系人企业标签的列表

6、自己维护扩展包

如果你要自己维护一个扩展包,你需要修改几个地方,

1、先拉取项目

1git clone https://github.com/phper666/easywechat-extension.git


2、修改Phper666\EasywechatExtension\Factory下的customMake方法,把里面的命名空间改为你的命名空间

3、全局修改该包的命名空间,把Phper666\EasywechatExtension命名空间修改为你的命名空间

4、修改composer.json文件,把里面的命名空间改为你的命名空间

如果有更好的扩展方法欢迎交流下~~


相关文章

vue 使用axios请求成功的this问题

vue 使用axios请求成功的this问题

一个简单的例子://上面的this.$http.get是中的this是vue的实例。axios的文档中,get请求是如上面所写的,上面代码的意思是请求登录返回数据。一般做的逻辑处理是请求成功后要跳转,...

vue的axios的post跨域问题!

最近在学vue,用axios的post跨域请求api的时候出现了问题。后面查资料,发现是跨域请求是有区别的。一种是简单的跨域请求:get另一种是非简单的跨域请求:post put 等等 。请看http...

chm索引不能使用问题

想查查mysql的一些编程需要的函数,但是在win7 下chm索引用不了,上网查了很久,是因为某些全文的索引没有打开。在运行那里输入:regsvr32 hhctrl.ocxregsvr32 itss....

iview使用v-for循环数据的更新问题。

iview使用v-for循环数据的更新问题。

最近在接数据中,遇到了一个v-for循环数组获取数据,但是这个数组可能会被操作,所以这个数组要实时更新。用了vue的双向绑定,但是不好用,经过查资料,发现:由于 JavaScript 的限制, Vue...

在 hyperf 中使用 MongoDB

欢迎使用 phper666/mongo-db,地址:https://github.com/phper666/mongo-db1、默认使用mongodb提供的库来封装,官方git地址:https://g...

php+redis高并发秒杀方案(个人见解)

需求:1:一个商品,库存只有100。2:网站很出名,估计并发量为50W。3:实现秒杀。 分析:1:库存只有100,只能操作更新db库存 100次2:访问量大,采用redis来做并发处理3:设...

评论列表

名称
2024-07-18 20:08:42

沙发

1
2024-07-25 02:23:19

识别码:zvwhkj32950GE-这游戏真不错!http://www.dnf70.com/1366.html

1
2024-07-25 13:24:21

识别码:kitozv68975LU-这游戏真不错!http://www.a5km.com/yxgl/jdqs/26634.html

11
2024-08-08 02:51:40

识别码:nhxfgm58709KM-这游戏真不错!http://www.a5km.com/yxgl/jdqs/29459.html

1111
2024-08-08 02:52:57

识别码:ivamkj23059BQ-这游戏真不错!http://www.a5km.com/yxgl/jdqs/28727.html

11
2024-08-08 10:00:01

识别码:bplmwe04583WN-这游戏真不错!http://www.dnf70.com/3311.html

1
2024-08-17 17:11:29

识别码:uzdakq73145EK-这游戏真不错!http://www.3553km.com

1
2024-08-19 21:46:32

识别码:ynarof54389PC-这游戏真不错!http://www.3553km.com

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。