博客列表 >PHP群机器人定时推送企业微信

PHP群机器人定时推送企业微信

樂成的开发笔记
樂成的开发笔记原创
2019年07月11日 15:13:3010045浏览

1、群机器人功能

- 支持markdown格式、图文卡片等多种消息类型,还可@成员作为单独提醒。

e8e7e4a3588a11493752abe8566cf110dda09ba0_ceshijiqiren.png

- 员工可自己创建群机器人,也可以添加同事发布到公司的机器人使用。

24a2fc60f6342bfb0954c1a4ce1fb00d9ae37e06_ceshijiqiren2.png

官方文档说明接口文档

代码说明:
1、因为是用了简单粗暴的定时任务,所以先定义一个开关
config.php

<?php
return 1; //0关1开
?>

2、inde.php
无关紧要的先定义

date_default_timezone_set("Asia/Shanghai");
header('Content-Type:text/html;charset=utf-8');

$run = include 'config.php';  //控制开关
if(!$run) die('process abort');

ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
$times = 60; //等待时间

$urls="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

$h = date("H",time());
$i = date("i",time());
$w = date('w');
//时,分,周

//已发送文本例子,图文参考文本

//每天早上8点30推送天气预报
if($h == 8 && $i == 0){
    weathers(); //接口自行去获取,我用的是百度的
}

//每周五18点提醒周报
if($h == 18 && $i == 0 && $w == 5){
    $url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=添加机器人提示的KEY';
    $cont = "今天是".date("Y-m-d",time())." 星期五,你交周报了吗?";
    text($url,$cont,array("@all"));
}

//每周一10点提醒周例会
if($h == 10 && $i == 0 && $w == 1){
	$url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=添加机器人提示的KEY';
	$cont = "今天是".date("Y-m-d",time())." 星期一,请各部门安排好周例会";
	text($url,$cont,array("@all"));
}

sleep($times); // 等待时间
file_get_contents($urls);

以下是写的方法,可自行封装好

//天气助手
function weathers(){
	$url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=添加机器人提示的KEY';
	$resdata = json_decode(getWeather('城市'),true);
	$weatherData = $resdata['results'][0];
	$tipt = '';
	foreach($weatherData['index'] as $indexkey => $indexvalue){
		$tipt.="> ##### ".$indexvalue['tipt']."(".$indexvalue['zs'].")\n".$indexvalue['des']."\n";
	}
	$weather_data = $weatherData['weather_data'][0];
	$weatherstr = $weather_data['date'].",\n ##### ".$weather_data['weather'].','.$weather_data['wind'].",".$weather_data['temperature'];
	$data = array(
		"msgtype"=>"markdown",
		"markdown"=>array(
			"content"=>'#### '.$weatherData['currentCity']." :".$weatherstr."\n".$tipt,
			"mentioned_list"=>array("@all")
		)
	);
	$res = request_post($url, json_encode($data,'320'),'json');
	print_r($res);
}

//发送文本
function text($url,$cont,$list){
	$data = array(
		"msgtype"=>"text",
		"text"=>array(
			"content"=>$cont,
			"mentioned_list"=>$list
		)
	);
	$res = request_post($url, json_encode($data,'320'),'json');
	print_r($res);
}

/**
 * 根据城市名称/ID获取详细天气预报
 * @param string $city [城市名称/ID]
 * @return array
 */
function getWeather($city){
	//百度天气接口API
	$location = $city;  //地区
	$ak = ""; //秘钥,需要申请,百度为了防止频繁请求
	$weatherURL = "http://api.map.baidu.com/telematics/v3/weather?location=$location&output=json&ak=$ak";   
	$res = httpGet($weatherURL);
	return $res;
}

/**
 * 模拟get进行url请求
 * @param string $url
 * @return json
 */
function httpGet($url) {
	
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($curl, CURLOPT_TIMEOUT, 500);
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($curl, CURLOPT_URL, $url);

	$res = curl_exec($curl);
	curl_close($curl);

	return $res;
}

/**
 * 模拟post进行url请求
 * @param string $url
 * @param array $post_data
 * @param string $dataType
 * @return bool|mixed
 */
function request_post($url = '', $post_data = array(),$dataType='') {
	if (empty($url) || empty($post_data)) {
		return false;
	}
	$curlPost = $post_data;
	$ch = curl_init($url);
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	if($dataType=='json'){
		curl_setopt($ch, CURLOPT_HTTPHEADER, array(
				'Content-Type: application/x-www-form-urlencoded;charset=UTF-8',
				'Content-Length: ' . strlen($curlPost)
			)
		);
	}
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
	$data = curl_exec($ch);
	return $data;
}

好了,打开浏览器运行大功告成

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议
再回首2022-01-20 10:31:106楼
看着不错,现在一般用PC版企微模拟操作了,提供一些接口 2645542961还可以二次开发
kanglecheng2020-04-17 10:27:185楼
回4楼:这是本地调试用的,正确使用的话,可以在服务器加定时任务去推送
移动用户-10179742020-04-15 13:56:234楼
一条信息重复发该怎么办?
移动用户-11247772019-10-30 17:20:213楼
你好博主,你可以实现消息的推送之外,能否实现针对用户的消息内容进行特定的反馈呢?
kanglecheng2019-10-30 16:59:452楼
@all是企业微信@群聊中所有成员的意思
手机用户15719297792019-10-24 23:13:031楼
请问“@all”这个是哪个知识点,表示啥意思呢?