這是在看了超哥(overtrue)的《LX2 PHP 擴展包實戰教程 - 從入門到發佈》課程後,動手摺騰出來的。不過單元測試和自動化測試還沒寫,這部分剛學,還在折騰中。php
源碼地址:OverNaive/DingTalkRobothtml
composer require overnaive/dingtalkrobot ^1.0
android
釘釘官方文檔git
<?php use DingTalkRobot\DingTalkRobot; // 實例化 $robot = new DingTalkRobot([ 'access_token' => 'access_token_string', 'secret' => 'secret_string', ]); // 優雅調用 $result = $robot->message->text ->setTextContent('我就是我, 是不同的煙火@156xxxx8827') ->addAtMobile('156xxxx8827') ->send(); // 原生調用 $result = $robot->message ->send([ 'msgtype' => 'text', 'text' => [ 'content' => '我就是我, 是不同的煙火@156xxxx8827', ], 'atMobiles' => [ '156xxxx8827' ], 'isAtAll' => false, ]);
<?php use DingTalkRobot\DingTalkRobot; // 實例化 $robot = new DingTalkRobot([ 'access_token' => 'access_token_string', 'secret' => 'secret_string', ]); // text 類型 $result = $robot->message->text ->setTextContent('我就是我, 是不同的煙火@156xxxx8827') ->addAtMobile('156xxxx8827') ->addAtMobile('189xxxx8325') ->send(); var_dump($result); // link 類型 $result = $robot->message->link ->setTitle('時代的火車向前開') ->setText('這個即將發佈的新版本,創始人xx稱它爲紅樹林。而在此以前,每當面臨重大升級,產品經理們都會取一個應景的代號,這一次,爲何是紅樹林') ->setMessageUrl('https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI') ->send(); var_dump($result); // markdown 類型 $result = $robot->message->markdown ->setTitle('杭州天氣') ->setText("#### 杭州天氣 @18150089296 \n> 9度,西北風1級,空氣良89,相對溫度73%\n> ![screenshot](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png)\n> ###### 10點20分發布 [天氣](https://www.dingtalk.com) \n") ->addAtMobile('150XXXXXXXX') ->send(); var_dump($result); // 總體跳轉 ActionCard 類型 $result = $robot->message->actionCard ->setTitle('喬布斯 20 年前想打造一間蘋果咖啡廳,而它正是 Apple Store 的前身') ->setText("![screenshot](https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png) ### 喬布斯 20 年前想打造的蘋果咖啡廳 Apple Store 的設計正從原來滿滿的科技感走向生活化,而其生活化的走向其實能夠追溯到 20 年前蘋果一個創建咖啡館的計劃") ->addBtn('閱讀全文', 'https://www.dingtalk.com/') ->verticalBtn() ->send(); var_dump($result); // 獨立跳轉 ActionCard 類型 $result = $robot->message->actionCard ->setTitle('喬布斯 20 年前想打造一間蘋果咖啡廳,而它正是 Apple Store 的前身') ->setText("![screenshot](https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png) ### 喬布斯 20 年前想打造的蘋果咖啡廳 Apple Store 的設計正從原來滿滿的科技感走向生活化,而其生活化的走向其實能夠追溯到 20 年前蘋果一個創建咖啡館的計劃") ->verticalBtn() ->addBtn('內容不錯', 'https://www.dingtalk.com/') ->addBtn('不感興趣', 'https://www.dingtalk.com/') ->send(); var_dump($result); // FeedCard 類型 $result = $robot->message->feedCard ->addLink( '時代的火車向前開', 'https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI', 'https://gw.alicdn.com/tfs/TB1ayl9mpYqK1RjSZLeXXbXppXa-170-62.png' ) ->addLink( '時代的火車向前開2', 'https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI', 'https://gw.alicdn.com/tfs/TB1ayl9mpYqK1RjSZLeXXbXppXa-170-62.png' ) ->send(); var_dump($result);
替換 Guzzle 客戶端github
<?php use GuzzleHttp\Client; use GuzzleHttp\HandlerStack; use GuzzleHttp\Handler\CurlHandler; use DingTalkRobot\DingTalkRobot; // 實例化 $robot = new DingTalkRobot([ 'access_token' => 'access_token_string', 'secret' => 'secret_string', ]); // 自定義 Handler,如下配置代碼來自官方文檔 $handler = new CurlHandler(); $stack = HandlerStack::create($handler); $customClient = new Client(['handler' => $stack]); // 經過預留方法替換掉 Guzzle 客戶端 $message = $robot->message->setHttpClient($customClient); $result = $message->text ->setTextContent('我就是我, 是不同的煙火@156xxxx8827') ->addAtMobile('156xxxx8827') ->send();
配置 Guzzle 客戶端c#
<?php use GuzzleHttp\HandlerStack; use GuzzleHttp\Handler\CurlHandler; use DingTalkRobot\DingTalkRobot; // 自定義 Handler,如下配置代碼來自官方文檔 $handler = new CurlHandler(); $stack = HandlerStack::create($handler); // 實例化,可經過 guzzle_options 來自配置客戶端 $robot = new DingTalkRobot([ 'access_token' => 'access_token_string', 'secret' => 'secret_string', 'guzzle_options' => [ 'handler' => $stack, // 自定義 Handler 'timeout' => 10.0, // 設置請求超時時間 ], ]); $result = $robot->message->text ->setTextContent('我就是我, 是不同的煙火@156xxxx8827') ->addAtMobile('156xxxx8827') ->send();
理論上經過上面替換 Guzzle 客戶端或配置 Handler 來支持協程,還沒有測試。segmentfault
更多 guzzle 配置請查閱:Guzzle Documentationapi
MITmarkdown