摘要: 还在用第三方推送工具?教你用企业微信自建应用,实现无限制的消息推送服务。更有针对家庭宽带动态IP的终极绕过方案!
做自动化、跑定时任务、挂NAS或者写监控脚本的朋友,都会遇到一个刚需:怎么让脚本在运行结束后,把结果自动发到我的微信上?
目前市面上有不少第三方推送平台,比如 Server酱、PushPlus(貌似现在不能用了) 等。它们接口简单,但大多有免费额度限制 。如果你的脚本跑得比较频繁,或者对隐私要求极高,第三方平台往往捉襟见肘。
今天,就教教大家一种最正规、最稳定且免费 的方案:使用企业微信自建应用 。不仅没有任何发送条数限制,而且消息直接由腾讯官方下发,体验极佳。
很多人的误区是“注册企业微信需要营业执照”。其实不需要!个人完全可以免费注册一个企业微信 。
https://work.weixin.qq.com/wework_admin/register_wx,填入信息并扫码绑定管理员微信:
2. 创建应用: 登录企业微信网页版后台,在“应用管理 – 自建”中创建一个应用。
上传应用logo和命名,如“服务通知”
3. 获取核心参数:
* ` CorpId`(在“我的企业”中获取)
* Secret(在自建应用详情页发送到企业微信获取)
* `AgentId`(在自建应用详情页获取)
注意:Secret是发送到企业微信,这里需要安装企业微信并登录才能获取到:
这里我拿到了三个值:CorpId(ww9d30674c8fb35728),AgentId(1000002)和Secret(5DdR9WnOJ5KMuQSwhw7oxm_c5izToVh2nwsefzfT3p8)
直接用以上信息给微信发送消息会出现推送失败,60020错误:
推送失败: {'errcode': 60020, 'errmsg': 'not allow to access from your ip, hint: [1774076770194831599883132], from ip: 211.92.30.96, more info at https://open.work.weixin.qq.com/devtool/query?e=60020'}
因为,现在推送需要设置企业可信IP才能正常推送,否则接口直接报错拦截 。这对于使用家庭宽带(动态IP)跑脚本的个人玩家来说,公网IP变更就需要重新填写一次可信IP 。
解法:借助带有固定 IP 的虚拟主机/云服务器做一个“中转站”。
下面直接上干货代码!
进入应用管理-自建的应用,配置企业可信IP时, 需要配置 设置接收消息服务器URL 并能正确解密它发来的 echostr 才能填写可信 IP 。
验证URL:
URL填写你自己虚拟主机+verify.php,示例:http://52kds.cc.cd/verify.php,
EncodingAESKey点击随机获取并填入到verify.php文件的$AES_KEY值,verify.php文件代码如下:
<?php
// verify.php
// 填写你在企业微信后台“随机获取”到的 EncodingAESKey (43个字符)
$AES_KEY = "GwjAyjeBtzQHgP4zf6ab98AG1w5LA4fJVvIn2cZOHSG";
// 接收企业微信 GET 请求中的参数
$echostr = $_GET['echostr'] ?? '';
// 如果没有传递 echostr,直接返回 ok
if (empty($echostr)) {
echo"ok";
exit;
}
try {
// 1. 对 echostr 中的空格进行还原(URL传输时加号可能会变成空格)
$echostr = str_replace(' ', '+', $echostr);
// 2. 对 AESKey 进行 Base64 解码
$key = base64_decode($AES_KEY . "=");
// 3. 对企业微信发来的密文 echostr 进行 Base64 解码
$aes_msg = base64_decode($echostr);
// 4. 获取 AES 解密的 IV (初始向量),即 key 的前 16 字节
$iv = substr($key, 0, 16);
// 5. 使用 openssl 进行 AES-256-CBC 解密
// 注意:OPENSSL_RAW_DATA 和 OPENSSL_ZERO_PADDING 用于处理自定义的 PKCS[#7](javascript:;) 补位
$decrypted = openssl_decrypt($aes_msg, 'AES-256-CBC', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);
if ($decrypted === false) {
echo"error: decrypt failed";
exit;
}
// 6. 去除 PKCS[#7](javascript:;) 补位字符
$pad = ord(substr($decrypted, -1));
if ($pad < 1 || $pad > 32) {
$pad = 0;
}
$content = substr($decrypted, 16, -$pad);
// 7. 提取明文字符串长度并截取明文
// 企业微信的包头:前16字节是随机串,接下来的4字节是内容长度(网络字节序/大端)
$content_len_bytes = substr($content, 0, 4);
$msg_len = unpack('N', $content_len_bytes)[1]; // 'N' 代表无符号长整型(大端字节序)
// 8. 截取真正的明文内容
$real_echostr = substr($content, 4, $msg_len);
// 9. 输出明文给企业微信完成验证
echo $real_echostr;
} catch (Exception $e) {
echo"error: " . $e->getMessage();
}
?>
把这个文件传到网站目录,在企业微信可信IP的URL验证填入该文件的访问链接,点击保存,瞬间就能验证通过!
既然本地公网 IP 老是变,那我们就把发微信的活儿交给固定 IP 的服务器来做。我们在虚拟主机上再放一个 send_msg.php,并加上一个简单的密码校验 防止别人蹭你的接口 。
<?php
// send_msg.php
header('Content-Type: application/json; charset=utf-8');
// ================= 安全配置 =================
// 设定你的专属 API 密码(尽量复杂一点,比如随机生成的字符串)
$my_secret_token = "secret_key";
// ============================================
// 1. 安全拦截:获取请求发来的 Token 进行比对
// 这里我们从 JSON 数据体中提取 token
$input_data = json_decode(file_get_contents('php://input'), true);
$client_token = $input_data['token'] ?? '';
if ($client_token !== $my_secret_token) {
// 如果密码不对,直接返回 403 错误并终止脚本
http_response_code(403);
echo json_encode(['status' => 'error', 'msg' => '非法请求:Token验证失败!']);
exit;
}
// 2. 获取消息内容(验证通过后才执行到这里)
$content = $input_data['message'] ?? '【空消息】';
if (empty($content)) {
echo json_encode(['status' => 'error', 'msg' => '消息内容不能为空']);
exit;
}
// ================= 替换为你的企业微信配置 =================
$corp_id = "ww9d30674c8fb35728";
$secret = "5DdR9WnOJ5KMuQSwhw7oxm_c5izToVh2nwsefzfT3p8";
$agent_id = "1000002";
$to_user = "@all"; // 或者填 "@all" 发给所有人
// =========================================================
// 3. 获取企业微信 access_token
$token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={$corp_id}&corpsecret={$secret}";
$token_res = json_decode(file_get_contents($token_url), true);
if (!isset($token_res['access_token'])) {
echo json_encode(['status' => 'error', 'msg' => '获取企业微信Token失败', 'data' => $token_res]);
exit;
}
$access_token = $token_res['access_token'];
// 4. 构建发送给企业微信的数据
$send_url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={$access_token}";
$post_data = [
"touser" => $to_user,
"msgtype" => "text",
"agentid" => $agent_id,
"text" => [
"content" => $content
],
"safe" => 0
];
// 5. 使用 cURL 发送请求
$ch = curl_init($send_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data, JSON_UNESCAPED_UNICODE));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$msg_res = curl_exec($ch);
curl_close($ch);
// 6. 返回企业微信的响应结果
echo $msg_res;
?>
部署好后,别忘了在企业微信后台的“企业可信 IP”里,填上你这台虚拟主机的 IP!
如我虚拟主机IP为 103.137.185.66,在自建应用的可信IP填入103.137.185.66:
现在,无论你的脚本跑在树莓派、本地电脑还是各种动态 IP 环境中,再也不用管企业微信那些复杂的配置了。以 Python 为例,只需发起一个简单的 POST 请求 :
import requests
# 1. 你的 PHP 接口地址
PHP_API_URL = "http://52kds.cc.cd/send_msg.php"
# 2. 这里的 Token 必须和 PHP 里设置的 $my_secret_token 一模一样
API_TOKEN = "secret_key"
def send_to_php(content):
# 构建包含 token 和 message 的数据包
payload = {
"token": API_TOKEN,
"message": content
}
try:
# 发送请求,设定 5 秒超时,防止卡死脚本
response = requests.post(PHP_API_URL, json=payload, timeout=5)
# 检查 HTTP 状态码
if response.status_code == 200:
print("✅ 消息发送成功!返回结果:", response.text)
elif response.status_code == 403:
print("❌ 消息发送失败:Token 密码错误,被服务器拒绝!")
else:
print(f"❌ 请求失败,状态码: {response.status_code}")
except requests.exceptions.Timeout:
print("❌ 请求超时,请检查虚拟主机网络或接口地址是否正确。")
except Exception as e:
print("❌ 发生其他错误:", e)
if __name__ == "__main__":
message = "【安全通知】\n带安全验证的 PHP 接口测试成功!\n服务器状态:安全。"
send_to_php(message)
只需 3 秒钟,你的个人微信就能收到一条干净利落的系统通知。
后面需要通知的地方使用requests post 即可将message推送到微信了,例如我的自动更新IPTV通知项目:
通过 企业微信自建应用 + PHP 中转接口 的方式,我们完美避开了动态 IP 的限制,同时给接口加了一把“安全锁”。这个方案一次配置,终身受用,对于喜欢折腾服务器、NAS 和自动化脚本的玩家来说,绝对是现阶段的最佳实践!相关源码回复【260321】获取。
💡 觉得有帮助的话,别忘了点个“在看”和“赞”!你的支持是我持续分享干货的最大动力!
🌟 与你互动
嗨~这里是【医工学习日志】的温暖小窝!
📩 随时戳一戳 :后台留言任何问题,树树会带着光速回复闪现!
💡 奇思妙想征集令 :
👉 遇到有趣资源?戳我分享!
👉 想看的硬核测评?甩题过来!
🔥 你的脑洞,可能成为下期爆款文章哦~
如需商务,请加V注明来意,不闲聊:
📝 栏目信息
策划编辑 ✨ 树树 ✨
技术支撑 @恩山无线论坛 & Github & 瀚思彼岸
📜 版权声明
内容说明:
原创文章转载请私信授权;
部分素材源自网络,版权归属原作者;
如觉侵权,请凭权属证明联系删除