自建企业微信消息推送通知通道接口PHP版

方糖气球的Server酱服务由于其广泛的使用已经成为微信消息通知的代名词,黑鸟博客一直也用其来接收站内的新评论通知。但是微信官方发布通知将在4月底下线模板消息,受到影响的Server酱旧版将在4月后下线,新开发的是以企业微信为主的多通道版本( Turbo版 )。

而新Turbo版服务是有一些限制的,没氪金情况为每分钟最多1条,免费版每天5条的限制。实际上这个企业微信是随便都可以注册的,暂时无需提供任何企业证明,且稍微操作后微信 app 端也可以收到推送,那我们就不如自己整一个推送通道。

《自建企业微信消息推送通知通道接口PHP版》

要先注册企业微信,我们可以直接看server酱的教程,记下教程里的应用ID( agentid ),应用Secret( secret ),企业ID。

代码比较简陋,仅仅是能用的程度。企业微信支持很多种消息,这只卡片消息一种

企业微信的api文档:https://work.weixin.qq.com/api/doc/90000/90135/90236

访问时带上参数就行,get post都可以。如
http://example.com/server.php?corpid=xxx&corpsecret=xxx&agentid=xxx&title=title&description=desc&url=url

申请企业微信具体操作(搬运方糖气球的教程):

第一步,注册企业

用电脑打开企业微信官网,注册一个企业

第二步,创建应用

注册成功后,点「管理企业」进入管理界面,选择「应用管理」 → 「自建」 → 「创建应用」

《自建企业微信消息推送通知通道接口PHP版》

应用名称填入「Server酱」,应用logo到这里下载,可见范围选择公司名。

《自建企业微信消息推送通知通道接口PHP版》

创建完成后进入应用详情页,可以得到应用ID( agentid ),应用Secret( secret ),复制并填到上方。

《自建企业微信消息推送通知通道接口PHP版》

第三步,获取企业ID

进入「我的企业」页面,拉到最下边,可以看到企业ID,复制并填到上方。推送UID直接填 @all ,推送给公司全员。

第四步,推送消息到微信进入「我的企业」 → 「微信插件」,拉到下边扫描二维码,关注以后即可收到推送的消息。

《自建企业微信消息推送通知通道接口PHP版》

代码:

<?php

$corpid = $_REQUEST['corpid']; //企业id
$corpsecret = $_REQUEST['corpsecret']; //应用secret
$agentid = $_REQUEST['agentid']; //应用id

// 2021-04 
// 黑鸟博客 guihet.com

//如果就自己用,可以把参数写到这里。
//$corpid = '';
//$corpsecret = '';
//$agentid = ;

$title = $_REQUEST['title']; //消息title
$description = $_REQUEST['description']; //消息内容
$description = str_replace(PHP_EOL, '<br>', $description);
$url = $_REQUEST['url']; //消息跳转url

if(!$corpid or !$corpsecret or !$agentid){
    exit("canshu buquan");
}

//获取access_token
$response = CurlGet("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$corpid&corpsecret=$corpsecret","","");

$access_token = json_decode($response)->access_token;
if(!$access_token){
    exit("canshu cuowu");
}else{

    $json = '{"touser":"@all","msgtype":"textcard","agentid":"","textcard":{"title":"","description":"","url":"","btntxt":"更多"},"safe":1,"enable_id_trans":0,"enable_duplicate_check":0}';
    $json = json_decode($json);

    $json->agentid = $agentid;
    $json->textcard->title = $title ? $title : '无标题';
    $json->textcard->description = $description ? $description : '无内容';
   
    $json->textcard->url = $url ? $url : 'URL';

    echo CurlPost("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$access_token","", json_encode($json));
}

function CurlGet($url,$cookies = "",$UserAgent = "")
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
        curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
    curl_setopt($curl, CURLOPT_URL, $url);     
        curl_setopt($curl, CURLOPT_REFERER, '');
        curl_setopt($curl, CURLOPT_COOKIE, $cookies);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    if ($UserAgent != "") {
        curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
    }
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $response = curl_exec($curl);
    curl_close($curl);
    return $response;
}

function CurlPost($url, $cookies="", $post_data="", $headers=array(), $refer="", $UserAgent = '')
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
        curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
    curl_setopt($curl, CURLOPT_URL, $url);     
    curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
        curl_setopt($curl, CURLOPT_COOKIE, $cookies);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    if ($refer != '') {
        curl_setopt($curl, CURLOPT_REFERER, $refer);
    }
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
    $response = curl_exec($curl);
    curl_close($curl);
    return $response;
}

实测通过

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

  1. mContext 说道:

    {"errcode":0,"errmsg":"ok","invaliduser":""} 会报这个错 但是推送可以成功

    1. 黑鸟 说道:

      这个不是报错,是服务器给你的回应,包括是否支持成功等状态信息,你看那个ok ,就表示这次请求问题不大 :007: