这是在看了超哥(overtrue)的《LX2 PHP 扩大包实战教程 - 从入门到公布》课程后,入手折腾进去的。不过单元测试和自动化测试还没写,这部分刚学,还在折腾中。

源码地址:OverNaive/DingTalkRobot

Requirement

  • PHP >= 7.2.5
  • Composer

Installation

composer require overnaive/dingtalkrobot ^1.0

Documents

钉钉官网文档

Usage

<?phpuse 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,    ]);

Example

<?phpuse 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);

Advanced Usage

自定义 Guzzle 客户端

替换 Guzzle 客户端

<?phpuse 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 客户端

<?phpuse 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 来反对协程,尚未测试。

更多 guzzle 配置请查阅:Guzzle Documentation

License

MIT