一个接口搞定企业微信告警通知

0、创建企业微信应用

一、登录企业微信后台(需要管理员身份)。

二、创建应用

image-20210726175034522

三、拿到AgentId、Secret

四、拿到企业id

image-20210726175157429

1、搭建PHP环境

php环境可以使用宝塔一键安装,而且是免费的。安装完毕之后,新建一个网站,并且填写好相应的信息。

image-20210726174502947

image-20210726174528915

2、上传告警代码

找到刚刚创建网站对应的文件。将下面的代码复制进去:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php
// config
// ======================================
define('SENDKEY', '发送密钥');
define('WECOM_CID', '企业微信公司id');
define('WECOM_SECRET', '应用密钥');
define('WECOM_AID', '应用id');
//define('WECOM_TOUID', '@all');

// 以下配置需要有 redis 服务和 phpredis 扩展
define('REDIS_ON', false);
define('REDIS_HOST', '127.0.0.1');
define('REDIS_PORT', '6379');
define('REDIS_EXPIRED', '7000');
define('REDIS_KEY', 'wecom_access_token');

// code
// ======================================

if (strlen(@$_REQUEST['sendkey']) < 1
|| strlen(@$_REQUEST['text']) < 1 || strlen(@$_REQUEST['touid']) < 1 || @$_REQUEST['sendkey'] != SENDKEY
) {
die('bad params');
}

header("Content-Type: application/json; charset=UTF-8");
echo send_to_wecom(@$_REQUEST['text'], WECOM_CID, WECOM_SECRET, WECOM_AID, @$_REQUEST['touid']);


function redis()
{
if (!isset($GLOBALS['REDIS_INSTANCE']) || !$GLOBALS['REDIS_INSTANCE']) {
$GLOBALS['REDIS_INSTANCE'] = new Redis();
$GLOBALS['REDIS_INSTANCE']->connect(REDIS_HOST, REDIS_PORT);
}

return $GLOBALS['REDIS_INSTANCE'];
}

function send_to_wecom($text, $wecom_cid, $wecom_secret, $wecom_aid, $wecom_touid = '@all')
{
$access_token = false;
// 如果启用redis作为缓存
if (REDIS_ON) {
$access_token = redis()->get(REDIS_KEY);
}

if (!$access_token) {
$info = @json_decode(file_get_contents("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=".urlencode($wecom_cid)."&corpsecret=".urlencode($wecom_secret)), true);

if ($info && isset($info['access_token']) && strlen($info['access_token']) > 0) {
$access_token = $info['access_token'];
}
}

if ($access_token) {
$url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token='.urlencode($access_token);
$data = new \stdClass();
$data->touser = $wecom_touid;
$data->agentid = $wecom_aid;
$data->msgtype = "text";
$data->text = ["content"=> $text];
$data->duplicate_check_interval = 600;

$data_json = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$response = curl_exec($ch);
if ($response !== false && REDIS_ON) {
redis()->set(REDIS_KEY, $access_token, ['nx', 'ex'=>REDIS_EXPIRED]);
}
return $response;
}


return false;
}

注意:需要修改文件开头的这几个变量,这几个变量在文章最开始提到了:

1
2
3
4
define('SENDKEY', '发送密钥');
define('WECOM_CID', '企业微信公司id');
define('WECOM_SECRET', '应用密钥');
define('WECOM_AID', '应用id');

3、让微信也能够接受到企业微信的通知

一、打开手机微信,扫码关注。

二、打开企业微信:我-》设置-》新消息通知-》仅在企业微信中接受消息-》关闭“应用消息”。

4、发送告警

访问网址:http://xxxxx.com/notify.php?sendkey=123&text=测试测试&touid=YinWenJun

这里面有3个参数:

  • sendkey:密钥,和php文件中保持一致即可。
  • text:要发送的通知内容。
  • touid:用户在企业微信中的id,登录企业微信后台即可看到。