1.接口代码(thinkphp框架):
<?php namespace Home\Controller; use Think\Controller; use Think\Log; class GitController extends Controller { public function index() { $requestBody = file_get_contents('php://input'); if (empty($requestBody)) { echo '发送失败'; return false; } $content = json_decode($requestBody, true); $message = ""; if ($content['total_commits_count'] > 0) { $message .= $content['user_name'] . '向' . $content['repository']['name'] . '项目的' . $content['ref'] . '分支push了' . $content['total_commits_count'] . '个commit:' . "\n"; $count = 0; foreach ($content['commits'] as $commit) { $count++; $message .= $count . '. ' . $commit['author']['name'] . '在' . date('Y年m月d日 h:i:s', strtotime($commit['timestamp'])) . ' 提交的:' . $commit['message'] . "\n"; $message .= '点击 ' . $commit['url'] . ' 查看本次commit diff' . "\n"; } echo $message; Log::write($message); } else { $message .= $content['user_name'] . '在' . $content['repository']['name'] . '项目创建或者删除了一个分支:' . $content['ref'] . "\n"; } echo D('Dingding', 'Service')->sendTextMsg('@all', $message); } }
<?php namespace Home\Service; use \Think\Model; use \Think\Log; class DingdingService extends Model { private $_url = 'https://oapi.dingtalk.com/gettoken?corpid=你的&corpsecret=你的'; public function sendTextMsg($touser, $text, $agentid = 你的) { $accessToken = $this->_getAccessToken(); if ($accessToken == null) { return '获取accessToken失败'; } $content = array( 'touser' => $touser, 'agentid' => $agentid, 'msgtype' => 'text', 'text' => array('content' => $text) ); $url = 'https://oapi.dingtalk.com/message/send?access_token=' . $accessToken; $result = $this->_sendPost($url, $content); Log::write($result); return $result; } private function _getAccessToken() { $content = $this->_sendGet($this->_url); $json = json_decode($content, true); if ($json['errcode'] == 0) { $accessToken = $json['access_token']; return $accessToken; } else { Log::write('获取accessToken失败'); return null; } } private function _sendPost($url, $data) { $ch = curl_init($url); $payload = json_encode($data); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); return $result; } private function _sendGet($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); return $result; } }
- 团队成员在push代码之后我第一时间收到钉钉的通知,我可以打开diff页面,立刻查看或者等会儿有时间了再看这个网页,我完全可以利用编译代码的零碎时间来做这项工作。记得这个功能上线第一天我就快速review出两个组员的代码bug,他们都万万没想到。
- 让团队中的初级程序员养成提交代码的时候自己先diff的习惯,并且写好comment。以前初级程序员常常乱提交代码,对代码分支造成严重的破坏,现在我告诉他们,只要他们提交代码boss就会看到,他们都非常小心谨慎了。
- 和其他团队的协作开发变得更加透明,其他团队的同学提交什么代码,功能说明我就可以看到。一起联调代码,他提交后我第一时间知道他接口搞定了;要求对方修改的bug对方提交了代码我就知道代码修复了。这两个体验不是我随口说的,现实中我真的遇到,感觉很爽!