因业务需要,特此记录一下。
业务逻辑如下:
因为每次推送消息时有人数限制,所以就用了两个变量来接收处理。
//推送带链接的内容
$content = '您一条消息,<a href="这里放链接">请查看</a>!';
//获取推送对象
$user = M('user')->select();
if(!$user) return '没有可推送用户';
//因企业微信推送应用消息一次不能超过1000
$userData = [];//用户标识数组,用户数量未超过一定数量
$userDataArr = [];//用户标识数组,用户数量超过一定数量
//推送到企业微信
$url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token='.accessToken();
foreach ($user as $item)
{
if (count($userData) < 1000)
{
$userData[] = $item['企业微信用户标识字段'];
}else{
$userDataArr[] = $userData;
$userData = [];
}
}
if (!$userDataArr)
{
$userDataArr[] = $userData;
$userData = [];
}
if ($userData)
{
$userDataArr[] = $userData;
}
if ($userDataArr)
{
foreach ($userDataArr as $value)
{
$data_ = [
'touser' => implode('|',$value),
'msgtype' => 'text',
'agentid' => '应用ID',
'text' => [
'content' => $content,
]
];
$arr = https_request($url,json_encode($data_));
}
}
return 'OK';
获取access_token函数,因为access_token值获取的频率不能过高,所以做了缓存处理:
/**
* 获取access_token
*/
function accessToken()
{
//获得access_token
if(empty(Cache::get("ACCESS_TOKEN"))){
$url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=企业微信APPID&corpsecret=应用密钥";
$res = file_get_contents($url);
$res = json_decode($res,1);
if($res['errcode']!=0){
var_dump($res);
die;
}
$accessToken=$res['access_token'];
Cache::set("ACCESS_TOKEN",$accessToken,3600);
}else{
$accessToken=Cache::get("ACCESS_TOKEN");
}
return $accessToken;
}
https请求函数:
/**
* https请求
* @param string $url
* @param string $data
* @return mixed
*/
function https_request($url,$data = null){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}