在 easywechat 包上擴充套件 API 介面

php666發表於2020-04-13

專案地址:

https://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、先拉取專案

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

2、修改Phper666\EasywechatExtension\Factory下的customMake方法,把裡面的名稱空間改為你的名稱空間

3、全域性修改該包的名稱空間,把Phper666\EasywechatExtension名稱空間修改為你的名稱空間

4、修改composer.json檔案,把裡面的名稱空間改為你的名稱空間

如果有更好的擴充套件方法歡迎交流下~~

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章