# FEERAPI **Repository Path**: xunjinlu/feer-api ## Basic Information - **Project Name**: FEERAPI - **Description**: 一个小白写的,api官网程序,功能不多但是可以正常使用,以后的版本就随性开源喽,当前更新7.8.0版本, - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2026-04-09 - **Last Updated**: 2026-07-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: API, PHP, MySQL ## README

FeerApi(PHP + MySQL)免费 API 接口管理/发布系统

> 当前版本:v7.8.0(以 `config/config.php` 为准) > 运行模式:MySQL(`core/JsonDB.php` 为兼容层,底层仅使用 MySQL) FeerApi 是一个面向开发者的 API 接口聚合与发布系统,包含前台展示、在线测试、接口中转代理、用户投稿与审核、后台管理、调用统计与实时日志等功能,并提供 **Web 一键安装向导**,适合快速部署到服务器并开源发布。 --- ## 演示地址 - **线上演示**:[https://api.xunjinlu.fun](https://api.xunjinlu.fun) ## 主要功能 ### 前台(官网) - **API 列表/搜索/分类**:`index.php`、`apis.php` - 首页底部「在线调试」选择接口弹窗中,列表项展示与卡片相同的 **免费 / 积分·次 / KEY / 维护中** 标签 - **API 详情页**:`api-detail.php` - 请求参数展示(JSON 美化) - 响应示例展示(自动 JSON 格式化) - 在线测试(通过 `api-proxy.php` 规避 CORS) - **需密钥接口**:已登录且存在可用密钥时,在线测试区可自动随机填入一条密钥并提示;无密钥或未登录时给出简短说明(样式随明暗主题变量适配) - 接口反馈功能(支持填写联系方式) - **文章/页面**:`articles.php`、`article.php`、`about.php`、`pages.php` - 文章评论支持配图上传(后台可配置图床;默认 521.im) - 评论内图片点击灯箱预览,关闭后保持原滚动位置(无页顶滑回) - **友链**:`links.php`、`apply-link.php` - **首页合作伙伴**:首页底部新增响应式合作伙伴 Logo 网格,支持后台启用/关闭与可选跳转 - **首页公告横幅**:滚动公告条 + 自动弹窗;横幅不含图片;弹窗正文由 JS 从 `application/json` 注入(减少爬虫把长公告当摘要;`meta`/`og:description` 仍为后台站点描述);首页 DOM 先 `main` 后公告块、CSS `order` 保持原视觉顺序;弹窗内 Markdown 由 `core/Parsedown.php` 解析(**围栏代码按行闭合**、可选 **` ```html` / ` ```h5` 白名单 HTML**、**输出消毒** 避免异常内容破坏整页;**`![](url)` 空 alt**、表格、引用 `>`、`.mp4/.webm` 视频等);首页额外加载 `markdown-content.css`;自动弹窗 **「不再提示」** / **「我知道了」** 行为同前;横幅点击查看仅 **「我知道了」** - **赞助我们**:`donate.php`(赞助榜单置顶展示,收款码区域位于下方) ### 用户后台(开发者) - **注册/登录**:`user/register.php`、`user/login.php` - 滑块人机验证 + IP 错误限流(登录/注册/找回密码分场景独立计数) - 可选「注册邮箱域名白名单」(后台配置,留空不限制) - 未完成滑块时点击登录会提示「请先完成滑块验证」(按钮保持可点击,非 disabled) - 前端 MD5 加密传输:登录 `MD5(MD5(明文)+nonce)` 防重放;注册/重置 `MD5(明文)` - 邮箱验证码发信限流(防轰炸):单 IP/单邮箱多维度配额 + 超限锁定 - 用户密码存储为 MD5,登录成功后自动将历史 BCrypt 哈希升级为 MD5 - 登录成功自动回跳来源页(`?redirect=`);已登录访问登录页自动跳转控制台 - **用户权限分级**:注册时可选择"普通用户 / 开发者" - 普通用户:更聚焦密钥、积分与调用消费,不显示开发者投稿管理视图 - 开发者:保留原有投稿与接口管理全功能 - **第三方登录(可选)**:QQ / Gitee(见后台设置页) - OAuth 发起改为 POST + 一次性 Session 令牌,client_id 仅服务端拼接,前端不暴露 - **控制台/概览**:`user/index.php`(统计图表 + 实时调用日志;自动轮询刷新,无手动刷新按钮;列表滚动至底部时提示「仅展示最近的 100 条记录」) - **投稿 API / 编辑 API**:`user/api-add.php`、`user/api-edit.php` - 投稿后默认进入 **待审核**(`review_status=0`) - 二次编辑会触发重新审核 - API 详细文档使用内置简易 Markdown 工具栏(GFM 预览由 marked 统一配置) ### 用户后台(普通用户) - **密钥管理**:`user/api-keys.php` - 支持生成多个 API 密钥(最多 5 个) - 密钥明文展示,一键复制 - 查看调用次数和最后调用时间 - 密钥禁用/重置功能 - **积分充值**:`user/points.php` - 支持套餐充值和自定义积分充值 - 码支付/易支付多网关支持 - 支付二维码弹窗展示,扫码支付 - 取消订单后自动清除支付横幅与 URL 参数(仅更新本平台订单状态) - 充值成功后自动更新积分余额 - 支持多种支付方式(支付宝/微信/QQ) - 用户可取消待支付订单(仅更新本平台数据库状态为「已取消」,不向支付平台发起撤销) - **积分记录**:`user/points-logs.php` - 查看积分变动明细(充值/调用扣费/签到奖励/分成收入) - 显示关联订单号,点击可复制 - 实时展示积分余额 - 接口调用类型显示 API 名称 - **每日签到**:`user/checkin.php` - 每日签到随机赠送积分 - 连续签到奖励机制 - 无刷新签到体验 - **接口反馈**:`user/feedbacks.php` - 查看自己提交的接口收到的用户反馈 - 反馈处理状态跟踪 - 管理员回复邮件通知 ### 管理员后台 - **安全登录**:`admin/login.php` - 滑块人机验证(Session 令牌 + 客户端拖动交互) - 未完成滑块时点击登录会提示「请先完成滑块验证」 - 错误次数限制:连续 5 次密码错误 → 锁定 IP 15 分钟 - 锁定期间前端实时倒计时提示 - 首次安装设置密码时无需验证码和限流 - **控制台**:`admin/index.php`(趋势图 + 实时调用日志) - 多维度用户统计图表 - 实时调用日志筛选;列表滚动至底部时提示「仅展示最近的 100 条记录」(与接口返回条数上限一致) - 统计卡片显示(API总数/活跃API/分类数量/总调用次数/开发者/普通用户) - **API 管理**:`admin/apis.php` - 审核与运行状态分离(`review_status` 与 `runtime_status`) - 批量启用/禁用/维护(已避免与审核状态冲突) - 支持配置访问鉴权三档(`require_api_key`:**开放访问 / 密钥必传 / 密钥可选**;积分扣费仍强制密钥必传) - 请求参数类型支持内置扩展项 + 自定义类型;表格内 combobox 选择器(`param-type-picker`) - 支持配置每分钟请求上限(`qps_limit`,滑动 60 秒窗口) - 列表卡片/表格展示限流标签(与用户后台一致:「N 次/分」或「不限」) - 支持配置积分扣费(`points_cost`) - API 详细文档编辑为简易 Markdown 工具栏 - **待审核/已拒绝**:`admin/pending-apis.php`、`admin/rejected-apis.php` - **调用统计**:`admin/stats.php` - 多维度用户统计(全部用户/密钥用户/积分用户/游客用户) - 图表筛选功能,灵活查看不同类型数据 - 统计数据接口性能优化(文件缓存 + HTTP 缓存头) - **调用日志**:`admin/api-call-logs.php` - 详细调用记录(API/请求方法/用户/密钥/IP/**来源域**/时间) - 无搜索时分页采用 `MAX(id)` 估算 + `id` 上限,减轻大表 COUNT/OFFSET 压力 - 支持按用户类型筛选(全部/密钥/积分/游客) - 综合搜索框(支持搜索 API 名称/用户名/密钥/URL/IP/来源域名等) - **积分变动**:`admin/points-logs.php` - 全站用户积分流水记录 - 变动类型标签(充值/接口调用/签到/接口分成等) - 支持搜索和筛选功能 - **订单管理**:`admin/orders.php` - 充值订单查看与管理 - 订单状态跟踪(待支付/已支付/已取消/已退款) - 中文标签化显示 - 支持分页和搜索功能 - **系统设置**:`admin/settings.php` - 中转代理基础路径 `api_proxy_base_path` - 站点标题/Logo/域名等基础配置 - **调用日志 IP 归属地**:完整 GET 链接(含 `{ip}` 与 key),可选 JSON 点号路径;URL 自动规范化 `&` → `&` - **评论配图图床**:可配置 POST 上传接口(默认 521;支持自定义 URL/参数名/Token/JSON 路径);密钥明文展示 - **AI 文档**:OpenAI Chat Completions 兼容(API URL / 模型 / 密钥) - 支付网关配置(码支付/易支付) - **用户注册**:允许注册的邮箱域名白名单(逗号/换行分隔,留空不限制) - 积分比例与签到配置 - 首页合作伙伴/公告开关 - 赞助收款码配置 - **合作伙伴管理**:`admin/partners.php` - 支持合作伙伴名称、Logo、跳转链接、显示状态与排序管理 - 电脑端侧边栏与手机端"更多"页均可直达 - **公告管理**:`admin/announcements.php` - 支持公告发布、编辑、置顶、启用/关闭、**首页自动弹窗**(`fa_announcements.popup_enabled`);列表与卡片上提供 **开弹窗 / 关弹窗** 快捷按钮(无需进编辑页) - 公告内容编辑为简易 Markdown 工具栏(弹窗内支持图片语法) - 支持直接置顶/取消置顶快捷操作 - 多置顶冲突处理(默认展示最新发布的置顶公告) - **赞助管理**:`admin/sponsors.php` - 管理员手动登记赞助者头像/名称/链接/赞助内容 - 支持 QQ 自动头像 与自定义头像链接 - 支持多条"固定最后"并保持其余随机排序 - 赞助榜单排序规则优化 - **用户管理**:`admin/users.php` - 用户类型切换(普通用户/开发者) - 管理员积分直充能力 - 用户详情弹窗(包含调用记录/积分流水/密钥记录) - **反馈/评论/文章/友链**:`admin/feedback.php`、`admin/comments.php`、`admin/articles.php`、`admin/links.php` - 文章管理卡片/表格可抽屉查看该文专属评论(参考订单详情抽屉) - **友链审核**:`admin/pending-links.php` - 三态滑动切换:待审核 / 已拒绝 / 已通过(与用户后台图表模式切换同款 thumb 滑动效果) - 拒绝申请标记 status=2 保留记录,可恢复待审;已通过列表读取正式友链表 - 桌面端表格 + 手机端卡片双布局 - **Markdown 编辑**:`admin/apis.php`、`admin/articles.php`、`admin/pages.php`、`admin/announcements.php`、`user/api-add.php`、`user/api-edit.php` 使用 `core/markdown-editor` 简易工具栏 + `assets/js/markdown-config.js`(marked GFM/表格等);工具栏含「视频」(插入 `![](*.mp4|webm|ogg)` 模板),`markdown-editor.css` 随后台明暗主题白底/面板底自适应 ### 代理与在线测试 - **API 中转代理**:`proxy.php` - 路由格式:`/{api_proxy_base_path}/{proxy_path}?参数...` - 上游可为公网或内网/本机(由你在后台配置的 `endpoint` 决定;生产环境请自行做好网络与权限隔离) - 传递真实客户端 IP(`X-Forwarded-For` / `X-Real-IP`,多段时取链首合法地址写入 `fa_api_call_logs`) - 记录调用统计(见下方统计) - 支持 API 密钥验证(密钥必传或积分接口时强制;**密钥可选**模式下不传 key 亦可调用,传 key 则识别用户) - 支持每分钟请求上限(滑动 60 秒窗口) - 支持积分扣费和分成 - **在线测试跨域代理**:`api-proxy.php` - 高仿浏览器请求头、自动解压(`CURLOPT_ENCODING`) - 来源检查、简单频控;测试目标可为内网/本机 URL(与 `proxy.php` 一致,由部署环境自担风险) - 向中转 `proxy.php` 传递规范化后的单一客户端 IP,保证首页/详情页在线测试写入调用日志的 IP 正确 ### 调用统计 - 统计写入:`core/ApiCallLogger.php` - `fa_apis.call_count / last_call / heat` 更新 - `fa_api_call_logs` 记录每次调用(含密钥上下文、请求来源等详细信息) - 积分扣费链路修复与小数支持 - 统计入口: - 后台统计页:`admin/stats.php` - 后台控制台趋势与实时日志:`admin/index.php`(依赖 Chart.js 与 `chart-line-tooltip.js` 多系列 tooltip 对齐;实时日志列表最多 100 条,滑到底部可见提示) - 用户后台统计:`user/index.php`(同上) ### 本地接口统计 - 目录:`api/` - `api/index.php` 不再提供全站「按 IP / 小时」聚合限流;与 `record.php` 守卫一致的频控为各接口 **`qps_limit`(每分钟)**。 - 实现方式:通过手动引入 `record.php` 文件 - 使用方法:在本地接口文件中先调用 `api_record_guard_or_exit($apiId)` 进行校验,再调用 `api_record_send_async($apiId)` 进行统计 - 直接请求:可通过 `api/record.php?id=API_ID&key=API_KEY` 直接进行统计 - 示例代码: ```php // ==================== 统计功能 ==================== $statsId = 14; // 对应后台配置的API ID require_once __DIR__ . '/../record.php'; api_record_guard_or_exit($statsId); api_record_send_async($statsId); // ==================== 统计功能结束 ==================== ``` --- ## 目录结构(核心) - `config/` - `config.php`:系统入口配置、安装检测、资产加载策略、站点配置、注入前端数据 - `database.php`:**不再随仓库提供**,由安装向导自动生成 - `core/` - `MySQLDB.php`:MySQL 连接与基础 CRUD - `JsonDB.php`:兼容层(保留旧类名/方法名,底层仅用 MySQL) - `UserAuth.php`:用户认证/第三方登录/绑定/验证码发信 - `UserAuthGuard.php`:用户端滑块验证 + 发信前校验 - `Auth.php`:管理员认证 - `LoginRateLimiter.php`:登录/IP 限流(管理员 + 用户多场景) - `EmailSendRateLimiter.php`:邮箱验证码发信限流 - `OAuthHelper.php`:OAuth 发起 POST 安全 - `ApiCallLogger.php`:调用统计统一写入(`proxy.php` 与 `api/record.php` 共用) - `Security.php`:CSRF、密码哈希(MD5/BCrypt 兼容)、传输层校验 - `Mailer.php`:邮件发送(评论通知、反馈通知等) - `pay_notify.php`:支付回调处理 - `core/markdown-editor/`:`loader.php` 与 `assets/js/markdown-editor.js`、`markdown-config.js`、`assets/css/markdown-content.css` 等 - `install/` - `index.php`:Web 安装向导(5 步) - `database.sql`:建表结构(安装时自动跳过 INSERT,保证空白库) - `install.lock`:安装锁(安装完成自动生成;重装需删除) - `upgrade_*.sql`:各版本增量升级脚本 - `admin/`:后台管理 - `user/`:用户后台 - `assets/`:前端静态资源与本地 vendor - `docs/`:部署与伪静态文档 - `api/`:本地接口目录 - `.user.ini`:自动统计钩子配置 - `auto-stats-prepend.php`:自动统计前置脚本 --- ## 环境要求 - PHP:建议 **7.4+ / 8.x** - MySQL:建议 **5.7+ / 8.0** - 扩展:PDO MySQL、cURL、mbstring、openssl(建议) - Web 服务器:Nginx / Apache 均可 --- ## 一键安装(推荐) 1. 上传源码到站点目录(建议网站根目录)。 2. 访问域名首页: - 若未安装(不存在 `install/install.lock`),会自动跳转到 `/install/` 3. 按向导完成 5 步: - 服务器检测 - 数据库信息填写(默认 `localhost:3306`,其它为空) - 检测连接 - 创建数据库表结构(同时生成 `config/database.php`) - 创建管理员账号 4. 完成后进入后台登录:`/admin/login.php` 更详细说明见:`docs/install-deploy.md` --- ## 版本号规则 版本号采用 `主.中.小`(SemVer)规范,升级规则见:`docs/versioning.md` --- ## 伪静态 / 重写 FeerApi 采用"通用伪静态 + API 代理路径分离"方案: ### Nginx(推荐) 精简 28 行配置(完整说明见 `nginx.conf.example`): ```nginx # ────── 通用伪静态(隐藏 .php 后缀,保留 PATH_INFO)────── location / { try_files $uri $uri/ @php; } location @php { rewrite ^(/[^/]+)(/.*)?$ $1.php$2 last; } # ────── API 代理路径(默认 /apis/)────── # 自定义代理路径时需同步修改此 location 路径 location /apis/ { try_files $uri $uri/ @api_proxy; } location @api_proxy { rewrite ^ /proxy.php last; } # ────── 执行 PHP ────── location ~ \.php$ { fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } ``` > **注意**:如果在后台自定义了 API 代理基础路径(默认 `apis`),需同步修改 nginx 中 `location /apis/` 的路径。 ### Apache 仅需在网站根目录 `.htaccess` 中添加一行(Apache 2.2.16+ 原生支持,无需 mod_rewrite): ``` FallbackResource /proxy.php ``` ### 无伪静态备用 如果以上两种方案都不可用,系统还支持 PATH_INFO 直连模式: ``` https://你的域名/proxy.php/apis/接口路径?参数 ``` --- ## 中转代理使用方式 1. 后台设置 `API 中转代理基础路径`(默认 `apis`) - 该值对应 `settings.api_proxy_base_path` 2. 为某个 API 设置 `proxy_path`(如 `weather`) 3. 外部访问: - `https://你的域名/{api_proxy_base_path}/{proxy_path}?city=beijing` - 例如:`https://example.com/apis/weather?city=beijing` `proxy.php` 会: - 根据 `proxy_path` 查找真实 `endpoint` - 透传请求方法/部分头/请求体 - 记录调用统计 - 处理 API 密钥验证 - 执行每分钟请求上限(滑动 60 秒窗口) - 处理积分扣费和分成 --- ## 审核状态与运行状态(重要) 系统将 **审核状态** 与 **运行状态** 分离: - `review_status`:审核状态(1通过 / 0待审 / -1拒绝) - `runtime_status`:运行状态(1启用 / 0禁用) - `maintenance`:维护状态(1维护 / 0正常) 前台展示默认只显示: - `review_status = 1` 且 `runtime_status = 1` 的接口(见 `core/JsonDB.php` 的 `getApis()`) --- ## 数据库说明 安装时会导入 `install/database.sql` 的表结构。 核心表(节选): - `fa_admins`:管理员 - `fa_users`:用户(含 `user_type` 区分普通/开发者、`points_balance` 积分余额等) - `fa_apis`:API 主表(包含 `proxy_path`、审核/运行/维护状态、统计字段、`require_api_key`、`qps_limit`(每分钟上限)、`points_cost` 等) - `fa_api_call_logs`:调用日志 - `fa_settings`:系统设置 - `fa_categories`:分类 - `fa_articles`:文章 - `fa_links`:友链 - `fa_feedback`:反馈 - `fa_user_api_keys`:用户 API 密钥 - `fa_points_orders`:积分充值订单 - `fa_user_points_logs`:积分流水 - `fa_announcements`:公告(含 `popup_enabled` 首页自动弹窗) - `fa_partners`:合作伙伴 - `fa_sponsors`:赞助记录 - `fa_points_packages`:积分充值套餐 --- ## 本地资源与加载策略 为提升访问速度与稳定性,系统对前端关键依赖采用: - **本地优先** - **远程兜底** - **并行预热** 本地资源位于:`assets/vendor/` 说明见:`assets/vendor/README.md` --- ## 常见问题(FAQ) ### 1. 重新安装怎么做? - 删除 `install/install.lock`,再访问 `/install/` ### 2. 为什么在线测试/代理会失败? - 目标接口可能禁止跨域/校验 Referer/Origin(在线测试已尽量模拟浏览器头) - 频控限制:`api-proxy.php` 默认 2 秒内限制同 IP 重复请求 - Nginx/PHP 对 `proxy.php` 的 `client_max_body_size` 过小会导致大文件 POST 失败 ### 3. 为什么某些接口不在前台显示? 检查 `fa_apis`: - `review_status` 是否为 1 - `runtime_status` 是否为 1 - `maintenance` 是否为 1(维护中会提示不可用) ### 4. 如何配置积分功能? - 在后台 `系统设置` 中配置支付网关(码支付或易支付) - 设置积分充值套餐和比例 - 在 API 管理中为接口配置 `points_cost`(积分扣费) - 系统会自动处理积分扣费、分成和流水记录 ### 5. 如何使用 API 密钥? - 用户在 `user/api-keys.php` 中生成密钥 - 调用接口时在 URL 中添加 `key=你的密钥` 参数 - 或在请求头中添加 `X-API-Key: 你的密钥` ### 6. 如何配置支付功能? - 在后台 `系统设置` 中选择支付网关(码支付或易支付) - 填写相应的支付网关配置信息 - 码支付支持两种支付模式:跳转支付和直接扫码 - 易支付固定使用跳转支付模式 ### 7. 如何管理积分充值套餐? - 在后台 `系统设置` 中配置积分充值套餐 - 支持设置多个充值套餐,用户可选择适合的套餐进行充值 - 也支持自定义积分充值 --- ## 安全说明(请务必阅读) - 系统提供代理与在线测试能力,请务必在生产环境开启必要的访问控制策略。 - `proxy.php` / `api-proxy.php` 允许访问内网上游(便于本地联调);公网暴露时请用 WAF、内网隔离或限制 `api-proxy.php` 访问来源,避免被滥用扫描内网。 - 建议使用 HTTPS 部署,以保证复制、登录等浏览器能力正常。 - 支付密钥等敏感信息请妥善保管,不要泄露。 - **管理员登录**:滑块验证 + IP 限流(`core/LoginRateLimiter.php`);密码 MD5+Nonce 传输(`assets/js/pages/auth-password-transport.js`)。 - **用户登录/注册/找回密码**:滑块验证 + 分场景 IP 限流(`core/UserAuthGuard.php`);密码 MD5 传输;邮箱验证码发信限流(`core/EmailSendRateLimiter.php`)。 - **OAuth 发起**:须 POST + 一次性令牌(`core/OAuthHelper.php`),避免 client_id 泄露与 GET 重放。 - 限流运行时文件位于 `config/.admin_login_fails.json`、`config/.login_fails_*.json`、`config/.email_send_rate.json`(已加入 `.gitignore`)。 --- ## License / 开源协议 本项目为开源免费项目。首次进入安装向导会弹出"开源部署协议",请在开源发布前根据你的需求补充仓库 LICENSE 文件与协议内容。