接口概览

API推送服务平台提供简单易用的HTTP API,支持多种消息推送渠道。您可以通过API将消息推送到企业微信、钉钉、飞书、邮件等渠道。

API基础地址:https://pushhub.fengye.wang
接口版本:V1

接口特点

  • ✅ 支持 GET 和 POST 请求方式
  • ✅ 支持多渠道同时发送
  • ✅ 按渠道数量扣费,发送多个渠道扣多次额度
  • ✅ 实时返回发送结果和剩余配额

认证方式

所有API请求都需要通过Token进行认证。Token可以在用户中心的 "API令牌" 页面创建和管理。

安全提示:请妥善保管您的API Token,不要在客户端代码中暴露Token。如需在公共环境使用,建议配合后端服务调用。

请求方式

将Token作为URL参数传递:

URL参数
/api/send?token=YOUR_API_TOKEN

配额说明

系统采用三级配额管理机制:

配额类型说明重置周期
日配额每天最多调用次数每天0点重置
月配额每月最多调用次数每月1号重置
总配额整个使用期间最多调用次数永不重置
扣费规则:按渠道数量扣费。例如:发送给企业微信和邮件两个渠道,扣2次额度。

发送消息

通过此接口发送消息到指定渠道。如果不指定渠道,将发送到Token绑定的所有渠道。

请求地址

GET/POST https://pushhub.fengye.wang/api/send

请求参数

参数名类型必填说明
tokenstringAPI令牌(已绑定渠道)
titlestring消息标题
contentstring消息内容
渠道说明:Token 在创建时已绑定指定渠道,调用 API 时会自动发送到这些渠道,无需额外指定渠道参数。

响应参数

参数名类型说明
statusboolean请求是否成功
codeint状态码,200表示成功
msgstring响应消息
data.success_countint成功发送的渠道数量
data.total_countint总共发送的渠道数量
data.resultsobject各渠道发送结果
data.remaining_quotaobject剩余配额信息

成功响应示例

200 OK - 发送成功
{
    "status": true,
    "code": 200,
    "msg": "发送成功",
    "data": {
        "success_count": 1,
        "total_count": 1,
        "results": {
            "wecom": {
                "status": true,
                "msg": "发送成功"
            }
        },
        "remaining_quota": {
            "daily": 79,
            "monthly": 2979,
            "total": 379
        }
    },
    "time": 1774967730
}

错误响应示例

401 Unauthorized
{
    "status": false,
    "code": 401,
    "msg": "Token无效或已过期",
    "data": [],
    "time": 1774966976
}

状态码说明

状态码说明
200请求成功
400请求参数错误
401Token无效或已过期
403无权限访问(IP不在白名单或会员已过期)
429配额已用完或请求过于频繁
500服务器内部错误

详细错误码

系统采用统一的错误码体系,格式为 A-BB-CCC

  • A: 系统标识 (1=系统级, 2=业务级, 3=第三方)
  • BB: 模块标识 (01=认证, 02=配额, 03=渠道, 04=队列等)
  • CCC: 具体错误序号

系统级错误 (1-xx-xxx)

错误码说明解决建议
100001系统繁忙请稍后重试
100003请求过于频繁降低请求频率,建议60秒后再试
100004请求参数错误检查请求参数是否符合规范

认证模块错误 (2-01-xxx)

错误码说明解决建议
201001缺少Token参数在URL中添加token参数
201002Token不存在或已失效检查Token是否正确,或重新创建Token
201003Token已停用在用户中心启用该Token
201005用户不存在联系管理员检查账号状态
201006用户已被禁用联系管理员解除禁用
201007会员已过期及时续费恢复会员服务
201008IP不在白名单中将当前IP添加到白名单,或关闭IP白名单

配额模块错误 (2-02-xxx)

错误码说明解决建议
202001日配额已用完等待次日0点重置,或升级套餐
202002月配额已用完等待次月1号重置,或升级套餐
202003总配额已用完升级套餐获取更多配额

渠道模块错误 (2-03-xxx)

错误码说明解决建议
203001Token未绑定任何渠道在"API令牌"页面绑定推送渠道
203002渠道已停用在"推送渠道"页面启用渠道
203003渠道配置错误检查渠道配置参数是否正确
203005所有渠道发送失败检查各渠道配置和网络状态

消息内容错误 (2-05-xxx)

错误码说明解决建议
205003消息内容不能为空添加content参数
205004消息内容超过500字符缩短消息内容长度
205005消息内容包含非法字符移除特殊字符或HTML标签

高级功能

幂等性请求

为防止重复发送,可以使用幂等性Key。相同Key在24小时内只会处理一次。

幂等性请求示例
# 添加 idempotency_key 参数
curl "https://pushhub.fengye.wang/api/send?token=YOUR_TOKEN&idempotency_key=order_12345&title=订单通知&content=您有新订单"

请求限流

系统采用Token级别限流,每个Token每分钟有独立的请求配额。超限后会返回429错误。

限流规则:基于Token+IP组合限流,防止代理IP绕过。限流配额可在后台设置。

cURL示例

GET方式发送

Bash
curl "https://pushhub.fengye.wang/api/send?token=YOUR_TOKEN&title=测试标题&content=测试内容"

PHP示例

GET方式

PHP
<?php
// 你的API Token
$token = 'YOUR_TOKEN';
$title = urlencode('告警通知');
$content = urlencode('服务器异常,请尽快处理');

// 构建请求URL
$url = 'https://pushhub.fengye.wang/api/send?token=' . $token . '&title=' . $title . '&content=' . $content;

$response = file_get_contents($url);
$result = json_decode($response, true);

if ($result['status']) {
    echo "发送成功!剩余日配额:" . $result['data']['remaining_quota']['daily'];
} else {
    echo "发送失败:" . $result['msg'];
}

Python示例

Python
import requests
import urllib.parse

token = 'YOUR_TOKEN'
title = '系统告警'
content = '磁盘空间不足,请及时清理'

# 编码参数
title_encoded = urllib.parse.quote(title)
content_encoded = urllib.parse.quote(content)

url = f"https://pushhub.fengye.wang/api/send?token={token}&title={title_encoded}&content={content_encoded}"

response = requests.get(url)
result = response.json()

if result['status']:
    print(f"发送成功!剩余配额:日{result['data']['remaining_quota']['daily']}")
else:
    print(f"发送失败:{result['msg']}")

JavaScript示例

JavaScript
const token = 'YOUR_TOKEN';
const title = encodeURIComponent('新订单通知');
const content = encodeURIComponent('您有新的订单,请及时处理');

const url = `https://pushhub.fengye.wang/api/send?token=${token}&title=${title}&content=${content}`;

fetch(url)
    .then(response => response.json())
    .then(data => {
        if (data.status) {
            console.log('发送成功!');
            console.log('剩余日配额:', data.data.remaining_quota.daily);
        } else {
            console.error('发送失败:', data.msg);
        }
    })
    .catch(error => {
        console.error('请求错误:', error);
    });