[本文出自天外归云的博客园]

背景

在git做一些merge或push的操作,我们希望可以自动在企业微信群发送自定义的通知。

服务代码

这里选用php作为网络服务的开发语言,关键的代码如下(githook函数就是对应webhook的服务函数):

  1. <?php
  2. class tools extends CI_Controller
  3. {
  4. function __construct()
  5. {
  6. parent::__construct(false);
  7. $this->load->helper('url');
  8. $dir = APPPATH . "config/conf";
  9. $confFile = "{$dir}/autotestconf.json";
  10. $this->load->library('conffile');
  11. $this->confData = $this->conffile->getConfData($confFile);
  12. $this->nav_top = $this->conffile->get_nav_top($this->confData);
  13. $this->load->database();
  14. $this->load->model("tools/tools_model");
  15. }
  16.  
  17. // 代码CodeReview自动企业微信报告服务等githook服务
  18. // 请求路径:http://localhost/cloud/tools/githook
  19. function githook()
  20. {
  21. $key = $this->input->get('key');
  22. $post_data = file_get_contents("php://input");
  23. $post_data_std_class = json_decode($post_data);
  24. $curl = curl_init();
  25. if ($post_data_std_class->object_kind == "merge_request") {
  26. if ($post_data_std_class->object_attributes->target_branch != "master") {
  27. return;
  28. }
  29. $commitUrl = $post_data_std_class->object_attributes->url;
  30. $postFields = "{\r\n \"msgtype\": \"text\",\r\n \"text\": {\r\n \"content\": \"" . $post_data_std_class->user->username . " " . $post_data_std_class->object_attributes->action . " Merge Request " . $commitUrl . "\n\nFrom " . $post_data_std_class->object_attributes->source_branch . " To " . $post_data_std_class->object_attributes->target_branch . "\nTitle: " . $post_data_std_class->object_attributes->title . "\nDescription:\n" . $post_data_std_class->object_attributes->description . "\"\r\n }\r\n}";
  31. } else if ($post_data_std_class->object_kind == "push") {
  32. $branch = substr($post_data_std_class->ref, 11);
  33. if ($branch != "master") {
  34. return;
  35. }
  36. $commitMessage = "【".$post_data_std_class->commits[0]->message."】";
  37. $http_url = substr($post_data_std_class->repository->git_http_url, 0, -4);
  38. $commitUrl = $http_url . "/commits/" . $branch;
  39. $postFields = "{\r\n \"msgtype\": \"text\",\r\n \"text\": {\r\n \"content\": \"" . $post_data_std_class->user_name . " Push To " . $commitUrl . "\n\n" . $commitMessage . " \"\r\n }\r\n}";
  40. }
  41. curl_setopt_array($curl, array(
  42. CURLOPT_URL => "http://in.qyapi.weixin.qq.com/cgi-bin/webhook/send?key=" . $key,
  43. CURLOPT_RETURNTRANSFER => true,
  44. CURLOPT_ENCODING => "",
  45. CURLOPT_MAXREDIRS => 10,
  46. CURLOPT_TIMEOUT => 30,
  47. CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  48. CURLOPT_CUSTOMREQUEST => "POST",
  49. CURLOPT_POSTFIELDS => $postFields,
  50. CURLOPT_HTTPHEADER => array(
  51. "Cache-Control: no-cache",
  52. ),
  53. CURLOPT_SSL_VERIFYHOST => 0,
  54. CURLOPT_SSL_VERIFYPEER => 0,
  55. ));
  56. $response = curl_exec($curl);
  57. $err = curl_error($curl);
  58.  
  59. curl_close($curl);
  60.  
  61. if ($err) {
  62. echo "cURL Error #:" . $err;
  63. } else {
  64. echo $response;
  65. }
  66. }
  67. }

Git配置

在git项目Setting-Advanced Settings-Web Hooks中勾选Trigger(触发条件)-Add Web Hook(把自己的网络服务请求地址填上去,也就是上面的githook函数的请求地址):

请求url带的参数key为企业微信机器人的webhook地址(在企业微信群创建企业微信机器人后即可看到该地址)。

至此就可以在指定trigger被触发(比如有人进行了push操作)时,自动发送你服务函数中自定义的消息体到指定webhook的企业微信群。

注意:git操作触发的消息内容在请求的post body中,而我们自己传的key在请求的get参数中。

Git操作自动触发企业微信机器人webhook的更多相关文章

  1. PostMan向企业微信机器人传送数据测试

    1 在企业微信中创建机器人  获取:webhook 地址 2.在Postman软件中创建Post文件 Post文件请求类型要与机器人所接受的类型一致.Get  或者 Post Url地址为上面webh ...

  2. 拉仇恨!webhook + 企业微信给同事做了个代码提交监听工具

    本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富~ 最近接个任务,用webhook做了个代码提交监听功能,就是有人 ...

  3. [企业微信通知系列]Jenkins发布后自动通知

    一.前言 最近使用Jenkins进行自动化部署,但是部署后,并没有相应的通知,虽然有邮件发送通知,但是发现邮件会受限于接收方的接收设置,导致不能及时看到相关的发布内容.而由于公司使用的是企业微信,因此 ...

  4. jenkins构建结果企业微信提醒

    每当jenkin在构建之后我们想把构建结果SUCCESS/FAILURE或者其他信息通知给其他人,也许有人会说,不是有邮件提醒吗?但是我这里的环境邮件提醒的话所被通知者并不会第一时间去阅读,所以我们用 ...

  5. 基于 Serverless +企业微信打造 nCoV 疫情监控小助手

    最近的一些疫情信息很让人揪心,为了方便大家掌握疫情信息,在空闲之余做了一个关于 nCoV 的疫情监控小助手.主要的功能是通过企业微信的 WebHook 来推送疫情信息.这里将使用 Serverless ...

  6. 参照企业微信审批业务,在Winform开发框架中工作流模块的实现业务审批

    目前微信的企业号已经切换到企业微信里面,这个是一个APP程序,提供了很丰富的企业应用,其中包括了业务审批处理,审批业务包括请假.报销.费用.出差等很多个审批场景,在Winform开发框架中工作流模块这 ...

  7. CabloyJS一站式助力微信、企业微信、钉钉开发 - 企业微信篇

    前言 现在软件开发不仅要面对前端碎片化,还要面对后端碎片化.针对前端碎片化,CabloyJS提供了pc=mobile+pad的跨端自适应方案,参见:自适应布局:pc = mobile + pad 在这 ...

  8. Python自制微信机器人:群发消息、自动接收好友

    运营公众号也有半年了,今年5月份开始的,之前一直用一款windows工具来运营自动接受好友请求.群发文章.自动回复等操作,但颇有不便. 举几个场景: 突然在外面看到一篇文章很好,临时写了一篇,想群发一 ...

  9. C#-MVC开发微信应用(5)--自动应答系统-自动回复机器人

    前几篇已经介绍菜单和有回复信息操作,下面我们就结合snf微信端管理页面,看一下什么才是自动应答系统. 定制的服务 对于微信服务号来说,最主要的功能是提供更好的服务.用户更方便的操作,以及更快的反馈响应 ...

随机推荐

  1. BZOJ.4821.[SDOI2017]相关分析(线段树)

    BZOJ LOJ 洛谷 恶心的拆式子..然后就是要维护\(\sum x_i,\ \sum y_i,\ \sum x_iy_i,\ \sum x_i^2\). 操作三可以看成初始化一遍,然后同操作二. ...

  2. 流畅的Python——切片

    2.4 切片 在 Python 里,像列表(list).元组(tuple)和字符串(str)这类序列类型都支持切片操作,但是实际上切片操作比人们所想象的要强大很多. 在我个人的使用经历来看,在算法实践 ...

  3. 第一章 初始STM32

    1.3什么是STM32? ST是意法半导体,M是MIcroelectronisc的缩写,32表示32位. 合起来就是:ST公司开发的32位微控制器. 1.4 STM32 能做什么? STM32属于一个 ...

  4. Java转型

    集合转型 通过中间类型List List<String> strs=new ArrayList<>(); List list=(List)strs; List<Objec ...

  5. 通过Redis、Memcache的 incr 原子操作防刷机制的使用差别

    我的版本如下: Redis:3.2.100 Memcache:1.4.4 最近在处理服务器压力测试的时候,想到一个方案,在一定时间段内限制用户访问次数.具体的实现就是通过redis的院子操作incre ...

  6. python系统编程(七)

    多线程-共享全局变量 from threading import Thread import time g_num = 100 def work1(): global g_num for i in r ...

  7. C++程序设计方法3:类中的静态成员

    在类型前面加static修饰的数据成员,是隶属于类的,成为类的静态数据成员,也称为“类的变量” 静态数据成员被该类的所有对象共享(即所有对象中的这个数据域实际上处于同一个内存位置) 静态数据要在实现文 ...

  8. Redis设计与实现:读书笔记之一

    第一部分:数据结构与对象 Redis支持的数据类型 字符串对象 列表对象 Hash对象 集合对象 有序集合对象 2.数据结构 Redis的所有数据类型都是: key-value pair 对象 Red ...

  9. Java类集 List, Set, Map, Stack, Properties基本使用

    首先看下继承结构: ArrayList(常用): /** * List接口继承Collection接口 * ArrayList, Vector为List接口的实现类 * add()添加新元素,remo ...

  10. 全排列 ---java

    排列的一种好方法,用链表来记录数据,简单明了,简称模板,值得记录 public class main{ static int count=0; public static void f(List< ...