PHP + Server酱:任务完成/出错,微信立刻知道
效果:在 PHP 程序中调用 Server酱 API,任务完成、异常告警等消息实时推送到你的微信。
前置条件
- 一个 Server酱 SendKey(30 秒获取教程)
- 本机可运行 PHP 的环境
方式一:官方 SDK(推荐)
安装:
composer require easychen/serverchan-sdk
调用(来自官方 README):
$ret = scSend('sendkey', 'title', 'desp', ['tags'=>'服务器报警|图片']);
print_r($ret);
SDK 按 SendKey 前缀自动识别 Server酱Turbo(SCT 开头)与 Server酱³(sctp 开头),无需关心端点差异。
方式二:官方示例直调实现
以下代码来自官方示例仓库 serverchan-demo(php/send.php),同样自动识别两种 SendKey,可直接复制使用:
<?php
$data = parse_ini_file(__DIR__ . '/../.env');
$key = $data['SENDKEY'];
$ret = sc_send('主人服务器宕机了 via PHP', "第一行\n\n第二行", $key);
echo $ret;
function sc_send($text, $desp = '', $key = '[SENDKEY]')
{
$postdata = http_build_query(array( 'text' => $text, 'desp' => $desp ));
// 判断 $key 是否以 'sctp' 开头,并根据匹配到的数字部分拼接相应的 URL
if (strpos($key, 'sctp') === 0) {
// 使用正则表达式提取 sctp 开头后面的数字
preg_match('/^sctp(\d+)t/', $key, $matches);
$num = $matches[1];
$url = "https://{$num}.push.ft07.com/send/{$key}.send";
} else {
$url = "https://sctapi.ftqq.com/{$key}.send";
}
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata));
$context = stream_context_create($opts);
return $result = file_get_contents($url, false, $context);
;
}
运行方式:
php send.php
官方示例从仓库根目录的
.env文件读取SENDKEY;集成到你的项目时,可改为读取环境变量SERVERCHAN_SENDKEY或你的配置系统。
常见问题
免费额度够用吗?
免费版每天 5 条。程序类通知建议在任务结束时合并推送一条摘要;量大可订阅会员目前特价最低 3 元/月,一天最多可发 1000 条(价格详情)。
消息没收到怎么办?
先检查返回 JSON 的 code 是否为 0,再按 常见问题与排查 逐项检查。
有频率限制吗?
每分钟最多 50 条,注意不要在循环里逐条推送,先聚合再发送。