❮
❯
苹果cms采集授权系统
# 苹果CMS影视系统 API 采集接口授权系统(v1.3.0)
一套面向 **苹果CMS(Maccms v10)** 影视系统的 **API 采集接口授权管理系统**,纯 PHP 开发,自带完整的前台用户中心与后台管理系统。
- 对外提供标准苹果CMS采集接口(`/api.php/provide/vod/?ac=list&token=xxx`),未授权/非法调用自动拦截
- **v1.1.0 新增**:易支付付费开通、邮件通知模板、多条采集线路、IP 黑白名单、到期时间与到期提醒、自助授权(自助重置授权码/续期)、公告管理、套餐与订单管理、多格式输出等
- **v1.2.0 新增**:修复代理采集(每个授权绑定上游数据源,取消系统默认源)、去除后台影片管理、多数据源分开授权(前台按授权分行展示接口)、用户登录记录、授权设备数限制(一个号允许多台电脑)、前后台解绑/换绑、接口输出免疫与连通性自检(`/api.php?ac=ping`)
- **v1.3.0 新增**:支付升级为 **微信支付 / 支付宝 / QQ钱包 三个独立渠道**,各自独立配置易支付网关/商户/密钥,购买页三选一,回调按订单渠道自动验签;修复回调地址拼接(未配置站点地址时也能正确回调)
---
## 一、功能特性
| 模块 | 功能 |
|------|------|
| 采集接口 | 标准苹果CMS v10 协议,支持 `list` / `detail` / `videolist` 动作,输出 **XML / JSON / 纯文本(text)** 三种格式 |
| 授权校验 | 授权码校验、启用/禁用、到期时间、域名绑定、每日限额、IP 频率限制、**IP 黑白名单(全局+授权级)**、**设备数限制** |
| 多数据源分开授权 | 上游数据源可添加多条,**每个授权绑定一个数据源**,采集按各自绑定源转发;前台「我的授权」分行展示每个授权可用的接口地址 |
| 多条采集线路 | 数据源可配置多条线路,接口支持 `play_from` 参数按线路名筛选返回 |
| 数据模式 | 本机数据库模式 / 代理转发上游数据源模式(可切换,代理模式每个授权必须指定数据源) |
| 付费开通 | **易支付(彩虹易支付)在线支付**,支持 **微信支付 / 支付宝 / QQ钱包 三个独立渠道**(各自配置网关/商户/密钥),套餐购买(新开通/续期),异步回调+同步返回页,回调按订单渠道自动验签 |
| 订单管理 | 前台我的订单、待支付重新支付;后台订单统计、筛选、手动确认收款、关闭订单 |
| 套餐管理 | 后台自定义套餐(名称/天数/价格/每日限额/排序/启停) |
| 设备绑定 | 每个授权可设置「允许绑定设备数」(按来源 IP 识别一台电脑),超出上限新设备被拒(错误码 1009),前后台均可**解绑/换绑**,7 天未活跃自动释放 |
| 登录记录 | 前后台登录成功/失败均记录(账号、IP、UA、状态、说明),后台可查看并导出 CSV |
| 通知模板 | 邮件通知模板(注册成功/支付成功/管理员新订单/到期提醒),`{变量}` 占位符渲染,支持 SMTP 发送 |
| 到期提醒 | `cron_expire.php` 计划任务脚本,按提前天数(默认 7/3/1 天)扫描即将到期授权并发邮件,去重防重复 |
| 自助授权 | 前台自助重置授权码、一键续期、自助解绑设备(换绑) |
| 公告管理 | 后台发布/停用公告,前台用户中心展示 |
| 调用日志 | 记录每次调用的应用、用户、IP、参数、状态、耗时,**支持 CSV 导出** |
| 管理后台 | 仪表盘(含订单/收入统计)、用户、授权、数据源、套餐、订单、公告、调用日志、**登录记录**、系统设置(tab 分页) |
| 用户中心 | 注册、登录、申请授权、购买开通、我的订单、个人资料/改密、接口文档 |
| 安全 | 密码加盐哈希、CSRF 防护、SQL 预处理、XSS 输出转义、安装向导锁、IP 黑白名单 |
---
## 二、环境要求
- PHP 5.6+(推荐 PHP 7.4 / 8.x)
- 扩展:`pdo`、`pdo_mysql`(必装);`curl`(代理转发/易支付/远程测试需要,本机模式可选);`openssl`、`mbstring`(SMTP 邮件与模板渲染需要,建议开启)
- MySQL 5.5+(推荐 5.7 / 8.x)
- 建议部署环境:宝塔面板 / LNMP / XAMPP 等
---
## 三、安装步骤
### 全新安装
1. 将项目全部文件上传到服务器网站根目录(如 `/www/wwwroot/你的域名/`);
2. 浏览器访问 `http://你的域名/install/`,进入安装向导;
3. 按提示完成环境检查 → 填写数据库信息 → 设置管理员账号密码;
4. 安装完成后,访问 `http://你的域名/admin/login.php` 登录管理后台;
5. 建议删除服务器上的 `install` 目录。
> 数据库需提前创建(或授权账号具备建库权限,向导会自动创建)。
### 从旧版本升级(v1.0.0 / v1.1.0 / v1.2.0 → v1.3.0)
1. 备份数据库;
2. 用新版本覆盖旧版本文件(保留 `config/config.php`);
3. 浏览器访问 `http://你的域名/install/upgrade.php`,脚本会**幂等**地增量升级数据库(幂等可重复执行):v1.0→v1.1 新增套餐/订单/公告表、授权字段、系统设置项并写入默认套餐;v1.1→v1.2 新增授权设备限制字段 `app.device_limit`、设备表 `app_device`、登录记录表 `login_log`、订单数据源字段 `orders.source_id`;v1.2→v1.3 新增微信/支付宝/QQ 三渠道支付配置项,并自动把旧版单渠道易支付配置迁移到对应渠道;
4. 完成后删除 `install/upgrade.php` 或限制访问。
> v1.2 起取消「系统默认数据源」,请在后台为每个授权指定其绑定的数据源(未绑定授权的接口将返回错误码 1022)。
### 默认账号
- 后台:安装时设置(示例 `admin / admin888`)
- 前台:注册或由后台创建
---
## 四、目录结构
```
maccms-auth/
├── index.php # 前台入口(跳转用户中心)
├── api.php # 苹果CMS采集接口入口
├── pay_notify.php # 易支付异步回调(验签+自动开权)
├── pay_return.php # 易支付同步返回页
├── cron_expire.php # 授权到期提醒计划任务
├── config/ # 数据库配置(安装时生成)
├── includes/ # 核心类库
│ ├── init.php # 公共初始化
│ ├── db.php # PDO 数据库封装
│ ├── functions.php # 公共函数(IP匹配/设备/登录日志/订单/模板/配置等)
│ ├── auth.php # 采集接口授权校验与数据处理(含设备数限制)
│ ├── epay.php # 彩虹易支付签名与下单
│ ├── mailer.php # 纯 PHP SMTP 邮件发送
│ └── order.php # 订单完成处理(开通/续期+通知)
├── admin/ # 管理后台
│ ├── login.php # 后台登录(记录登录日志)
│ ├── index.php # 仪表盘(订单/收入统计)
│ ├── users.php # 用户管理
│ ├── apps.php # 授权管理(数据源/设备列)
│ ├── app_edit.php # 授权编辑(数据源/设备数/设备解绑换绑)
│ ├── packages.php # 套餐管理
│ ├── package_edit.php # 套餐编辑
│ ├── orders.php # 订单管理(手动确认/关闭)
│ ├── notices.php # 公告管理
│ ├── notice_edit.php # 公告编辑
│ ├── logs.php # 调用日志(CSV导出)
│ ├── login_logs.php # 登录记录(筛选/CSV导出)
│ ├── sources.php # 数据源管理(多数据源)
│ ├── source_edit.php # 数据源编辑(备注/连通性测试)
│ └── settings.php # 系统设置(base/epay/mail/tpl/pwd/info)
├── user/ # 前台用户中心
│ ├── login.php / register.php
│ ├── index.php # 我的授权(分行显示接口/数据源/设备/续期/重置/解绑换绑)
│ ├── apply.php # 申请授权(选择数据源)
│ ├── buy.php # 套餐购买/续期(易支付,新开通选数据源)
│ ├── orders.php # 我的订单
│ ├── profile.php # 个人资料/修改密码
│ └── doc.php # 接口文档
├── install/ # 安装向导 + upgrade.php 升级脚本
├── sql/install.sql # 数据库初始化脚本(v1.3.0 全量)
├── static/ # 静态资源(css/js)
└── README.md
```
---
## 五、易支付(付费开通)配置
> v1.3 起支持 **微信支付 / 支付宝 / QQ钱包** 三个独立支付渠道,前台购买页会展示「已启用且配置完整」的渠道供用户三选一。
1. 登录后台 → 系统设置 → **易支付** tab,页面会显示 **微信支付 / 支付宝 / QQ钱包** 三个配置卡片;
2. 每个卡片独立填写:是否启用、易支付网关地址(如 `https://pay.xxx.com`)、商户号 `pid`、商户密钥 `key`(可对接同一或不同的易支付商户);
3. 保存后前台用户中心「购买开通」即可选择套餐与支付渠道,跳转对应网关支付;
4. 需在易支付商户后台配置异步回调地址:`http://你的域名/pay_notify.php`,同步返回地址:`http://你的域名/pay_return.php`(回调会按订单记录的渠道自动选择对应配置验签);
5. 支付成功后系统自动开通/续期授权,并通过邮件通知用户与管理员。
> 系统设置 → 基础/安全 中可控制「是否开放付费开通」与「每用户最大授权数」。
> 从 v1.2 及更早版本升级后,旧版单渠道配置会自动迁移到对应支付渠道(支付宝或微信),QQ 渠道需自行填写配置。
---
## 六、邮件(SMTP)与到期提醒
### 邮件配置
1. 后台 → 系统设置 → **邮件** tab;
2. 开启邮件,填写 SMTP 主机、端口(465/587/25)、账号、密码、加密方式(ssl/tls/none);
3. 可点击「发送测试邮件」验证;
4. 在 **通知模板** tab 中可编辑注册成功、支付成功、管理员新订单、到期提醒四类邮件的标题与正文。
模板可用变量:`{site_name}` `{username}` `{app_name}` `{token}` `{expire_time}` `{days}` `{order_no}` `{package_name}` `{money}`
### 到期提醒(计划任务)
1. 后台 → 系统设置 → **通知模板** tab,开启「到期提醒」,设置提前提醒天数(如 `7,3,1`);
2. 首次访问 `http://你的域名/cron_expire.php` 会自动生成访问密钥并提示;
3. 在服务器计划任务(crontab / 宝塔计划任务)中配置每天执行:
```
curl "http://你的域名/cron_expire.php?key=你的密钥"
```
4. 脚本会扫描即将到期的授权,按提前天数发送提醒邮件,同一授权同一到期时间只提醒一次。
---
## 七、采集接口使用说明
### 接口地址(两种格式均可)
```
/api.php/provide/vod/?ac=list&token=你的授权码 (标准苹果CMS路径,需服务器支持 PATH_INFO)
/api.php?ac=list&token=你的授权码 (免伪静态版,所有服务器均可直接使用,推荐)
```
> **接口打不开 / 采集提示连接无效时**,先直接浏览器访问 `http://你的域名/api.php?ac=list&token=你的授权码`:
> - 能返回 XML:把苹果CMS采集地址换成上面的**免伪静态版**即可,无需改服务器;
> - 跳转到安装页:说明**安装向导未完成**,请先访问 `install/` 走完安装(生成 config.php 与 install.lock);
> - 返回 `<error code="1099">数据库错误…`:说明**数据库连接失败**,检查 config/config.php 中的数据库账号密码、MySQL 服务是否启动、`pdo_mysql` 扩展是否开启;
> - 浏览器报 XML 解析错误(Start tag expected):多为 **config.php 被带 BOM 保存**(Windows 记事本默认 UTF-8 带 BOM),请用 Notepad++ / VS Code 打开并另存为"UTF-8 无 BOM";接口已内置输出清理,正常情况下可自动免疫。
### 宝塔 Nginx 下使用标准 `/provide/vod/` 路径
若希望保留标准路径,需在宝塔「网站 → 设置 → 伪静态」中添加以下规则(Apache 环境项目根已附带 `.htaccess`,无需配置):
```nginx
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf;
}
```
(宝塔各 PHP 版本规则大体一致;保存后重载 Nginx 即可。)
### 认证方式
- URL 参数:`token=你的授权码`(或 `apikey=你的授权码`)
- 请求头:`Authorization: Bearer 你的授权码`
### 支持参数
| 参数 | 说明 |
|------|------|
| `ac` | `list`(列表)/ `detail`(详情)/ `videolist`(按分类) |
| `fmt` | 输出格式:`xml`(默认)/ `json` / `text`(纯文本) |
| `pg` | 页码 |
| `ids` | 详情动作,逗号分隔影片 ID |
| `wd` | 搜索关键词 |
| `t` | 分类 ID |
| `play_from` | 线路名,仅返回该线路的播放地址(v1.1 新增) |
### 错误码
| 错误码 | 说明 |
|------|------|
| 1000 | 缺少授权码 token |
| 1001 | 授权码不存在或无效 |
| 1002 | 该授权已被禁用 |
| 1003 | 授权已过期 |
| 1004 | 来源域名未绑定授权 |
| 1005 | 今日调用次数已达上限 |
| 1006 | 调用频率过高 |
| 1007 | 当前 IP 已被列入黑名单(v1.1 新增) |
| 1008 | 当前 IP 不在访问白名单内(v1.1 新增) |
| 1009 | 该授权已绑定设备数达到上限,请在用户中心解绑设备(v1.2 新增) |
| 1010 | 系统数据模式错误 |
| 1020 | 该授权绑定的上游数据源不存在或未启用 |
| 1021 | 上游数据源请求失败 |
| 1022 | 该授权未绑定上游数据源(v1.2 新增,请在后台授权管理中指定) |
| 1099 | 数据库连接/查询错误(v1.2 新增,请检查数据库配置与 MySQL 服务) |
---
## 八、多数据源与设备绑定
### 多数据源分开授权
1. 在后台「数据源管理」中可添加多条上游数据源(标准苹果CMS采集接口地址);
2. 在「授权管理」中为每个授权指定绑定的数据源(代理模式必选);前台申请/新开通时也可选择数据源;
3. 采集接口按授权绑定的数据源转发,不同授权使用不同上游源互不干扰;
4. 前台「我的授权」中每个授权会**分行展示**其可用的采集接口地址、数据源名称、设备占用等信息。
### 设备绑定(一个号允许多台电脑)
1. 在「授权编辑」中设置「允许绑定设备数」(按调用来源 IP 识别一台电脑,0=不限);
2. 设备数达到上限时,新设备调用接口返回错误码 **1009**;
3. 换绑/更换电脑:后台授权编辑中可移除单个设备或清空全部设备;前台「我的授权」中可点击「解绑设备(换绑)」自助释放全部设备名额;
4. 超过 7 天未活跃的设备会自动释放名额。
---
## 九、二次开发说明
- 数据库结构见 `sql/install.sql`;`package`(套餐)、`orders`(订单)、`notice`(公告)为 v1.1 新增表;`app_device`(授权绑定设备)、`login_log`(登录记录)为 v1.2 新增表;
- 授权表 `app` 字段:`source_id`(绑定的数据源)、`ip_whitelist`(IP白名单)、`ip_blacklist`(IP黑名单)、`device_limit`(允许绑定设备数);
- 订单表 `orders` 字段 `source_id` 记录新开通授权绑定的数据源;
- 支付回调幂等处理位于 `includes/order.php` 的 `order_complete()`,同一订单重复回调不会重复开通;
- 易支付签名为彩虹易支付官方固定顺序,`includes/epay.php` 同时兼容排序后验签;
- 集成测试(不随产品部署)位于 `test/` 目录,`php test/run_test.php <场景>` 可逐场景自检。
---
v1.3.0 · 2026-09