# 云课堂(Classroom)API 接口文档 > 基础路径:`/api` > > 通用返回格式: > ```json > { > "code": 200, > "msg": "success", > "data": {} > } > ``` --- ## 一、分类管理 ### 1.1 获取分类树 - **URL**: `/api/category/tree` - **方式**: GET **返回示例**: ```json { "code": 200, "msg": "success", "data": [ { "id": 1, "title": "分类名称", "pid": 0, "children": [] } ] } ``` --- ## 二、属性管理 ### 2.1 获取属性树 - **URL**: `/api/attribute/tree` - **方式**: GET **返回示例**: ```json { "code": 200, "msg": "success", "data": [ { "id": 1, "title": "属性名称", "pid": 0, "children": [] } ] } ``` --- ## 三、系统配置 ### 3.1 获取配置 - **URL**: `/api/config/get` - **方式**: GET **返回示例**: ```json { "code": 200, "msg": "SUCCESS", "data": { "config": {} } } ``` --- ## 四、课程点播(Knowledge) ### 4.1 课程列表 - **URL**: `/api/knowledge/lists` - **方式**: GET **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | keyword | string | 否 | 搜索关键词 | | category_id | int | 否 | 分类ID | | attribute_ids | string | 否 | 属性ID,多个逗号分隔 | | type | string | 否 | 课程类型,默认 `all` | | author_id | int | 否 | 作者ID | | alone_sale | string | 否 | 是否单独售卖,默认 `1` | | order_field | string | 否 | 排序字段,默认 `id` | | order_type | string | 否 | 排序方式,默认 `desc` | | rows | int | 否 | 每页数量,默认 `20` | | have_ids | string | 否 | 需排除的课程ID,多个逗号分隔 | **返回示例**: ```json { "code": 200, "msg": "success", "data": { "total": 100, "per_page": 20, "current_page": 1, "last_page": 5, "data": [ { "id": 1, "title": "课程标题", "description": "课程描述", "cover": "课程封面URL", "price": "0.00", "type": "video", "type_str": "视频", "view": 100, "favorites": 10, "author": { "uid": 1, "nickname": "讲师名称", "avatar": "头像URL" } } ] } } ``` ### 4.2 课程详情 - **URL**: `/api/knowledge/detail` - **方式**: GET **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | int | 是 | 课程ID | | type | string | 否 | 类型标识 | **返回示例**: ```json { "code": 200, "msg": "success", "data": { "id": 1, "title": "课程标题", "description": "课程描述", "cover": "课程封面URL", "price": "0.00", "type": "video", "type_str": "视频", "content": "课程内容", "view": 100, "favorites": 10, "author": { "uid": 1, "nickname": "讲师名称", "avatar": "头像URL" } } } ``` --- ## 五、知识专栏(Column) ### 5.1 专栏列表 - **URL**: `/api/column/lists` - **方式**: GET **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | keyword | string | 否 | 搜索关键词 | | category_id | int | 否 | 分类ID | | attribute_ids | string | 否 | 属性ID,多个逗号分隔 | | author_id | int | 否 | 作者ID | | order_field | string | 否 | 排序字段,默认 `id` | | order_type | string | 否 | 排序方式,默认 `DESC` | | rows | int | 否 | 每页数量,默认 `20` | **返回示例**: ```json { "code": 200, "msg": "success", "data": { "total": 50, "per_page": 20, "current_page": 1, "last_page": 3, "data": [ { "id": 1, "title": "专栏标题", "description": "专栏描述", "cover": "专栏封面URL", "price": "99.00", "view": 200, "favorites": 20, "knowledge_ids": "1,2,3", "knowledge_count": 3 } ] } } ``` ### 5.2 专栏详情 - **URL**: `/api/column/detail` - **方式**: GET **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | int | 是 | 专栏ID | **返回示例**: ```json { "code": 200, "msg": "success", "data": { "id": 1, "title": "专栏标题", "description": "专栏描述", "cover": "专栏封面URL", "price": "99.00", "view": 200, "favorites": 20, "knowledge_ids": "1,2,3", "knowledge_count": 3 } } ``` ### 5.3 专栏内课程列表 - **URL**: `/api/column/knowledge` - **方式**: GET **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | int | 是 | 专栏ID | **返回示例**: ```json { "code": 200, "msg": "success", "data": { "total": 3, "per_page": 20, "current_page": 1, "last_page": 1, "data": [ { "id": 1, "title": "课程标题", "description": "课程描述", "cover": "课程封面URL", "price": "0.00", "type": "video", "type_str": "视频" } ] } } ``` --- ## 六、线下课(Offline) ### 6.1 线下课列表 - **URL**: `/api/offline/lists` - **方式**: GET **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | keyword | string | 否 | 搜索关键词 | | category_id | int | 否 | 分类ID | | attribute_ids | string | 否 | 属性ID,多个逗号分隔 | | author_id | int | 否 | 作者ID | | order_field | string | 否 | 排序字段,默认 `id` | | order_type | string | 否 | 排序方式,默认 `desc` | | rows | int | 否 | 每页数量,默认 `20` | **返回示例**: ```json { "code": 200, "msg": "success", "data": { "total": 10, "per_page": 20, "current_page": 1, "last_page": 1, "data": [ { "id": 1, "title": "线下课标题", "description": "线下课描述", "cover": "封面URL", "price": "199.00", "address": "上课地址", "start_time": "2024-01-01 09:00", "end_time": "2024-01-01 17:00" } ] } } ``` ### 6.2 线下课详情 - **URL**: `/api/offline/detail` - **方式**: GET **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | int | 是 | 线下课ID | **返回示例**: ```json { "code": 200, "msg": "success", "data": { "id": 1, "title": "线下课标题", "description": "线下课描述", "cover": "封面URL", "price": "199.00", "address": "上课地址", "start_time": "2024-01-01 09:00", "end_time": "2024-01-01 17:00" } } ``` ### 6.3 核销记录列表 - **URL**: `/api/offline/verification` - **方式**: GET - **需登录**: 是 **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | products_id | int | 是 | 线下课ID | | order_field | string | 否 | 排序字段,默认 `id` | | order_type | string | 否 | 排序方式,默认 `desc` | | rows | int | 否 | 每页数量,默认 `10` | **返回示例**: ```json { "code": 200, "msg": "获取成功!", "data": { "total": 1, "per_page": 10, "current_page": 1, "last_page": 1, "data": [ { "id": 1, "products_id": 1, "uid": 100, "status": 0, "verification_time": null } ] } } ``` ### 6.4 核销操作 - **URL**: `/api/offline/action` - **方式**: GET / POST - **需登录**: 是 **GET 请求参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | int | 是 | 核销记录ID | **POST 请求参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | int | 是 | 核销记录ID | | channel | string | 否 | 渠道,默认 `weixin_h5` | **返回示例(GET)**: ```json { "code": 200, "msg": "获取成功", "data": { "id": 1, "products_id": 1, "uid": 100, "status": 0 } } ``` **返回示例(POST)**: ```json { "code": 200, "msg": "核销完成", "data": true } ``` ### 6.5 验证核销员身份 - **URL**: `/api/offline/check` - **方式**: GET - **需登录**: 是 **返回示例**: ```json { "code": 200, "msg": "核销工作人员!", "data": { "id": 1, "uid": 100, "products_id": 1, "status": 1 } } ``` ### 6.6 生成核销二维码 - **URL**: `/api/offline/qrcode` - **方式**: GET **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | int | 是 | 核销记录ID | **返回示例**: ```json { "code": 200, "msg": "success", "data": "https://domain.com/h5/index#/classroom/pages/offline/manage?id=1" } ``` ### 6.7 核销状态轮询 - **URL**: `/api/offline/verify` - **方式**: GET **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | int | 是 | 核销记录ID | **返回示例**: ```json { "code": 200, "msg": "核销完成", "data": { "id": 1, "status": 1, "verification_time": 1700000000 } } ``` --- ## 七、收藏管理 ### 7.1 收藏/取消收藏 - **URL**: `/api/favorites/edit` - **方式**: POST - **需登录**: 是 **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | info_id | int | 是 | 内容ID | | info_type | string | 是 | 内容类型:`knowledge` / `column` / `offline` | **返回示例**: ```json { "code": 200, "msg": "收藏成功", "data": null } ``` --- ## 八、学习记录(Study) ### 8.1 我的课程列表 - **URL**: `/api/study/lists` - **方式**: GET - **需登录**: 是 **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | type | string | 否 | 类型筛选:`all`(全部) / `knowledge` / `column` / `offline`,默认 `all` | | keyword | string | 否 | 搜索关键词 | | order_field | string | 否 | 排序字段,默认 `id` | | order_type | string | 否 | 排序方式,默认 `desc` | | rows | int | 否 | 每页数量,默认 `10` | **返回示例**: ```json { "code": 200, "msg": "success", "data": { "total": 5, "per_page": 10, "current_page": 1, "last_page": 1, "data": [ { "id": 100, "order_no": "ORD20240101000001", "order_info_type": "knowledge", "title": "课程标题", "cover": "封面URL", "price": "99.00", "paid": 1, "create_time": "2024-01-01 12:00:00" } ] } } ``` --- ## 九、学习时长(Time) ### 9.1 记录学习时长 - **URL**: `/api/time/add` - **方式**: POST - **需登录**: 是 **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | type | string | 是 | 类型标识 | | type_id | int | 是 | 课程ID | | time | int | 是 | 学习时长(秒) | **返回示例**: ```json { "code": 200, "msg": "add time success", "data": null } ``` ### 9.2 获取学习统计 - **URL**: `/api/time/total` - **方式**: GET - **需登录**: 是 **返回示例**: ```json { "code": 200, "msg": "success", "data": { "uid": 100, "total_time": 3600, "continue_day": 5, "max_continue_day": 10 } } ``` --- ## 十、订单操作(Orders) ### 10.1 取消订单 - **URL**: `/api/orders/cancel` - **方式**: POST - **需登录**: 是 **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | int | 是 | 订单ID | **返回示例**: ```json { "code": 200, "msg": "订单取消成功!", "data": { "id": 100, "order_no": "ORD20240101000001", "status": 0 } } ``` ### 10.2 删除订单 - **URL**: `/api/orders/delete` - **方式**: POST - **需登录**: 是 **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | int | 是 | 订单ID | **返回示例**: ```json { "code": 200, "msg": "订单删除成功!", "data": { "id": 100, "order_no": "ORD20240101000001", "status": -1 } } ``` ### 10.3 退款申请 - **URL**: `/api/orders/refund` - **方式**: POST - **需登录**: 是 **参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | int | 是 | 订单ID | **返回示例**: ```json { "code": 200, "msg": "退款申请成功!", "data": { "id": 100, "order_no": "ORD20240101000001", "refund": 1 } } ``` --- ## 附录 ### A. 课程类型(type) | 值 | 说明 | |------|------| | video | 视频课程 | | audio | 音频课程 | | article | 图文课程 | | live | 直播课程 | ### B. 收藏内容类型(info_type) | 值 | 说明 | |------|------| | knowledge | 课程点播 | | column | 知识专栏 | | offline | 线下课 |