diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..1c78ea81
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,280 @@
+# 操作系统生成的文件
+.DS_Store
+.DS_Store?
+._*
+.Spotlight-V100
+.Trashes
+ehthumbs.db
+Thumbs.db
+
+# IDE和编辑器文件
+.vscode/
+.idea/
+*.swp
+*.swo
+*~
+
+# 日志文件
+*.log
+logs/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# 依赖目录
+node_modules/
+vendor/
+
+# 构建输出目录
+dist/
+build/
+out/
+
+# 环境配置文件
+# .env.local
+# .env.development.local
+# .env.test.local
+# .env.production.local
+
+# PHP相关
+# server/php/.env
+server/php/runtime/
+server/php/vendor/
+server/php/composer.lock
+
+# 缓存文件
+*.cache
+.cache/
+
+# 临时文件
+tmp/
+temp/
+*.tmp
+
+# 备份文件
+*.bak
+*.backup
+*.old
+
+# 压缩文件
+*.zip
+*.rar
+*.7z
+*.tar.gz
+
+# 数据库文件
+*.sqlite
+*.db
+
+# 上传文件目录
+uploads/
+upload/
+
+# 小程序相关
+honey_box/unpackage/
+honey_box/node_modules/
+
+# HBuilderX相关
+.hbuilderx/
+
+# 微信开发者工具相关
+project.config.json
+project.private.config.json
+
+# 图片和媒体文件(可选,根据需要调整)
+# *.jpg
+# *.jpeg
+# *.png
+# *.gif
+# *.mp4
+# *.mp3
+
+# 文档生成的临时文件
+*.pdf
+*.docx
+
+# 测试覆盖率报告
+coverage/
+.nyc_output/
+
+# 包管理器锁定文件(可选)
+# package-lock.json
+# yarn.lock
+
+# 本地配置文件
+config.local.js
+config.local.php
+
+# 错误报告
+error_log
+php_errors.log
+
+# 系统文件
+*.pid
+*.seed
+*.pid.lock
+
+# 运行时文件
+pids/
+*.pid
+*.seed
+*.pid.lock
+
+# 覆盖率目录
+lib-cov/
+
+# nyc测试覆盖率
+.nyc_output
+
+# Grunt中间存储
+.grunt
+
+# Bower依赖目录
+bower_components
+
+# node-waf配置
+.lock-wscript
+
+# 编译的二进制插件
+build/Release
+
+# 依赖目录
+jspm_packages/
+
+# TypeScript v1声明文件
+typings/
+
+# 可选的npm缓存目录
+.npm
+
+# 可选的eslint缓存
+.eslintcache
+
+# Microbundle缓存
+.rpt2_cache/
+.rts2_cache_cjs/
+.rts2_cache_es/
+.rts2_cache_umd/
+
+# 可选的REPL历史
+.node_repl_history
+
+# yarn完整性文件
+.yarn-integrity
+
+# dotenv环境变量文件
+.env.test
+
+# parcel-bundler缓存
+.parcel-cache
+
+# Next.js构建输出
+.next
+
+# Nuxt.js构建/生成输出
+.nuxt
+dist
+
+# Gatsby文件
+.cache/
+public
+
+# Storybook构建输出
+.out
+.storybook-out
+
+# Temporary folders
+tmp/
+temp/
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+*.lcov
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# Snowpack dependency directory (https://snowpack.dev/)
+web_modules/
+
+# TypeScript cache
+*.tsbuildinfo
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Microbundle cache
+.rpt2_cache/
+.rts2_cache_cjs/
+.rts2_cache_es/
+.rts2_cache_umd/
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+# .env
+.env.test
+.env.production
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+.parcel-cache
+
+# Next.js build output
+.next
+out
+
+# Nuxt.js build / generate output
+.nuxt
+dist
+
+# Gatsby files
+.cache/
+# Comment in the public line in if your project uses Gatsby and not Next.js
+# https://nextjs.org/blog/next-9-1#public-directory-support
+# public
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless/
+
+# FuseBox cache
+.fusebox/
+
+# DynamoDB Local files
+.dynamodb/
+
+# TernJS port file
+.tern-port
+
+# Stores VSCode versions used for testing VSCode extensions
+.vscode-test
+
+# yarn v2
+.yarn/cache
+.yarn/unplugged
+.yarn/build-state.yml
+.yarn/install-state.gz
+.pnp.*
\ No newline at end of file
diff --git a/docs/README.md b/README.md
similarity index 58%
rename from docs/README.md
rename to README.md
index 92966e67..24cdd060 100644
--- a/docs/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
-# 抽奖盲盒系统文档
+# 抽奖盲盒系统
-欢迎来到抽奖盲盒系统的技术文档中心!本文档集合包含了系统的完整技术资料,帮助开发者、运维人员和产品经理全面了解系统架构和业务流程。
+欢迎来到抽奖盲盒系统!这是一个基于 **UniApp + ThinkPHP 6.0** 架构开发的**跨平台抽奖盲盒系统**,主要面向娱乐抽奖和商品销售场景。
## 📚 文档目录
-### 🎯 [业务流程图](./业务流程图.md)
+### 🎯 [业务流程图](./docs/业务流程图.md)
详细展示了系统的核心业务流程,包括:
- 系统整体业务流程
- 用户注册登录流程
@@ -15,10 +15,11 @@
- 集市交易流程
- 数据统计分析流程
-### 🏗️ [系统架构图](./系统架构图.md)
+### 🏗️ [系统架构图](./docs/系统架构图.md)
全面介绍了系统的技术架构设计,包括:
- 系统整体架构
-- 应用模块架构
+- 前后端架构设计
+- 小程序技术架构
- 抽奖算法架构
- 支付系统架构
- 缓存架构设计
@@ -26,7 +27,7 @@
- 安全架构设计
- 监控运维架构
-### 🗄️ [数据库设计图](./数据库设计图.md)
+### 🗄️ [数据库设计图](./docs/数据库设计图.md)
完整的数据库设计文档,包含:
- 数据库整体ER图
- 核心业务表关系图
@@ -37,52 +38,83 @@
- 数据库分表策略
- 数据备份与恢复策略
-### 🔌 [API接口文档](./API接口文档.md)
+### 🔌 [API接口文档](./docs/API接口文档.md)
详细的API接口说明文档,包括:
- 用户认证接口
- 商品相关接口
- 订单相关接口
- 抽奖相关接口
-- 集市相关接口
+- 盒柜相关接口
- 财务相关接口
-- 发货相关接口
+- 福利相关接口
- 系统配置接口
-- 错误码说明
-- 接口调用示例
+- UniApp调用示例
## 🎮 系统概述
-### 项目简介
-这是一个基于 **ThinkPHP 6.0** 框架开发的**抽奖盲盒系统**,主要面向娱乐抽奖和商品销售场景。系统采用前后端分离架构,支持多种抽奖模式和支付方式。
+### 项目结构
+```
+抽奖盲盒系统/
+├── honey_box/ # 前端小程序项目(UniApp)
+│ ├── pages/ # 页面文件
+│ ├── components/ # 组件库
+│ ├── common/ # 公共模块
+│ └── static/ # 静态资源
+├── server/php/ # 后端API项目(ThinkPHP 6.0)
+│ ├── app/ # 应用目录
+│ ├── config/ # 配置文件
+│ └── public/ # 入口文件
+└── docs/ # 项目文档
+```
### 核心特性
- 🎲 **多样化抽奖模式**:支持一番赏、无限赏、擂台赏、抽卡机等9种抽奖类型
+- 📱 **跨平台支持**:一套代码支持微信小程序、H5、Android、iOS多端运行
- 💰 **灵活支付系统**:支持微信支付、支付宝、余额、虚拟货币等多种支付方式
- 🎁 **智能奖品管理**:支持普通奖品、宝箱奖品、特殊奖品等多种类型
- 🛒 **完整交易流程**:从下单到收货的完整闭环,支持发货、回收、集市交易
- 📊 **数据分析系统**:全方位的用户行为分析和销售数据统计
- 🔒 **安全防护机制**:多层安全防护,完善的权限控制体系
+- ⚡ **高性能算法**:优化的抽奖算法,内存占用减少90%+
### 技术栈
-- **后端框架**:ThinkPHP 6.0
+**前端技术栈:**
+- **框架**:UniApp + Vue.js 2.x
+- **构建工具**:HBuilderX
+- **UI组件**:uni-ui + 自定义组件
+- **状态管理**:全局配置管理 + 本地存储
+- **网络请求**:封装RequestManager
+- **多端支持**:微信小程序、H5、Android、iOS
+
+**后端技术栈:**
+- **框架**:ThinkPHP 6.0
- **数据库**:MySQL 5.7+
- **缓存**:Redis
- **PHP版本**:7.1+ (兼容 PHP 8.0)
- **依赖管理**:Composer
+- **文件存储**:腾讯云COS
## 🚀 快速开始
### 环境要求
+**前端环境:**
+- HBuilderX 3.0+
+- Node.js 12+
+- 微信开发者工具(小程序开发)
+
+**后端环境:**
- PHP 7.1+
- MySQL 5.7+
- Redis 3.0+
- Composer
### 安装步骤
+
+#### 后端安装
1. **克隆项目**
```bash
git clone [项目地址]
- cd lottery-system
+ cd lottery-system/server/php
```
2. **安装依赖**
@@ -106,17 +138,35 @@
php think run
```
+#### 前端安装
+1. **打开项目**
+ - 使用HBuilderX打开 `honey_box` 目录
+
+2. **配置环境**
+ - 修改 `common/env.js` 中的API地址
+ - 配置小程序AppID(manifest.json)
+
+3. **运行项目**
+ - 选择运行到微信小程序开发者工具
+ - 或运行到浏览器(H5版本)
+
### 配置说明
-主要配置文件位于 `config/` 目录下:
+**后端配置文件位于 `server/php/config/` 目录下:**
- `database.php` - 数据库配置
- `app.php` - 应用配置
- `cache.php` - 缓存配置
- `route.php` - 路由配置
+**前端配置文件位于 `honey_box/common/` 目录下:**
+- `env.js` - 环境配置(API地址、图片地址等)
+- `config.js` - 全局配置管理
+- `request.js` - 网络请求配置
+
## 📋 业务模块
### 用户系统
- 手机号注册登录
+- 微信授权登录
- 用户信息管理
- 等级体系
- 推荐机制
@@ -153,6 +203,23 @@
## 🔧 开发指南
### 代码结构
+**前端结构(honey_box/):**
+```
+honey_box/
+├── pages/ # 页面文件
+│ ├── shouye/ # 首页模块
+│ ├── user/ # 用户中心
+│ ├── mall/ # 商城模块
+│ ├── infinite/ # 福利模块
+│ └── hegui/ # 盒柜模块
+├── components/ # 组件库
+├── common/ # 公共模块
+├── static/ # 静态资源
+├── uni_modules/ # uni-app插件
+└── package/ # 分包模块
+```
+
+**后端结构(server/php/):**
```
server/php/
├── app/ # 应用目录
@@ -169,19 +236,20 @@ server/php/
```
### 开发规范
+**前端开发规范:**
+- 遵循Vue.js开发规范
+- 使用UniApp官方组件和API
+- 组件命名采用kebab-case
+- 页面路由统一管理
+- 网络请求统一封装
+
+**后端开发规范:**
- 遵循 PSR-4 自动加载规范
- 使用 ThinkPHP 6.0 开发规范
- 数据库操作使用 ORM
- 接口返回统一 JSON 格式
- 完善的异常处理机制
-### 扩展开发
-系统采用模块化设计,支持功能扩展:
-- 新增抽奖类型
-- 自定义支付方式
-- 扩展奖品类型
-- 增加数据分析维度
-
## 🛡️ 安全特性
### 数据安全
@@ -197,7 +265,7 @@ server/php/
- 操作审计
### 系统安全
-- JWT认证
+- Token认证
- 权限控制
- 访问日志
- 安全配置
@@ -262,22 +330,9 @@ server/php/
- 包含复现步骤
- 提供环境信息
-## 📞 技术支持
-
-### 联系方式
-- 技术交流群:[群号]
-- 邮箱:[邮箱地址]
-- 官网:[官网地址]
-
-### 常见问题
-- 查看 FAQ 文档
-- 搜索历史 Issue
-- 参考技术文档
-- 联系技术支持
-
## 📄 许可证
-本项目采用 [Apache 2.0](../LICENSE) 许可证。
+本项目采用 [Apache 2.0](./LICENSE) 许可证。
---
diff --git a/docs/API接口文档.md b/docs/API接口文档.md
index d911a0d8..0d0f923c 100644
--- a/docs/API接口文档.md
+++ b/docs/API接口文档.md
@@ -3,16 +3,17 @@
## 1. 接口概览
### 基础信息
-- **基础URL**: `https://api.example.com`
+- **基础URL**: `https://api.zfunbox.cn/api/`
- **API版本**: `v1`
- **数据格式**: `JSON`
- **字符编码**: `UTF-8`
-- **认证方式**: `JWT Token`
+- **认证方式**: `Token认证`
+- **签名方式**: `MD5签名 + 时间戳防重放`
### 通用响应格式
```json
{
- "code": 200,
+ "status": 1,
"msg": "success",
"data": {},
"timestamp": 1640995200
@@ -22,25 +23,35 @@
### 状态码说明
| 状态码 | 说明 |
|--------|------|
-| 200 | 请求成功 |
-| 400 | 请求参数错误 |
-| 401 | 未授权访问 |
-| 403 | 权限不足 |
-| 404 | 资源不存在 |
-| 500 | 服务器内部错误 |
+| 1 | 请求成功 |
+| 0 | 请求失败 |
+| -1 | 未登录 |
+| -9 | 需要绑定手机号 |
+| 2222 | 特殊状态(如已领取等) |
+
+### 请求签名机制
+所有POST请求都需要包含以下参数:
+- `timestamp`: 当前时间戳
+- `nonce`: 随机字符串
+- `sign`: MD5签名
+
+签名算法:
+1. 将所有参数按键名排序
+2. 拼接为 `key1=value1&key2=value2` 格式
+3. 添加密钥:`host + timestamp`
+4. 对整个字符串进行MD5加密
## 2. 用户认证接口
-### 2.1 发送验证码
+### 2.1 发送短信验证码
```http
-POST /api/user/sendCode
+POST /v2/account/sendSms
```
**请求参数:**
```json
{
- "phone": "13800138000",
- "type": 1
+ "phone": "13800138000"
}
```
@@ -48,137 +59,149 @@ POST /api/user/sendCode
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| phone | string | 是 | 手机号 |
-| type | int | 是 | 类型:1-登录注册 |
**响应示例:**
```json
{
- "code": 200,
+ "status": 1,
"msg": "验证码发送成功",
- "data": {
- "expire_time": 300
- }
+ "data": 60
}
```
-### 2.2 用户登录/注册
+### 2.2 手机号登录
```http
-POST /api/user/login
+POST /mobileLogin
```
**请求参数:**
```json
{
- "phone": "13800138000",
+ "mobile": "13800138000",
"code": "123456",
- "openid": "wx_openid_123"
+ "pid": ""
+}
+```
+
+**参数说明:**
+| 参数 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| mobile | string | 是 | 手机号 |
+| code | string | 是 | 验证码 |
+| pid | string | 否 | 推荐人ID |
+
+**响应示例:**
+```json
+{
+ "status": 1,
+ "msg": "登录成功",
+ "data": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
+}
+```
+
+### 2.3 微信授权登录
+```http
+POST /login
+```
+
+**请求参数:**
+```json
+{
+ "code": "wx_auth_code",
+ "nickname": "用户昵称",
+ "avatar": "头像URL"
}
```
**响应示例:**
```json
{
- "code": 200,
+ "status": 1,
"msg": "登录成功",
+ "data": "token_string"
+}
+```
+
+### 2.4 获取用户信息
+```http
+POST /user
+```
+
+**请求头:**
+```
+token: {user_token}
+```
+
+**响应示例:**
+```json
+{
+ "status": 1,
+ "msg": "success",
"data": {
- "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
- "user_info": {
+ "userinfo": {
"id": 1001,
- "phone": "13800138000",
+ "phone": "138****8000",
"nickname": "用户昵称",
"avatar": "头像URL",
"money": "100.00",
"integral": "50.00",
- "level": 1
+ "money2": "20.00",
+ "level": 1,
+ "mobile_is": 1
}
}
}
```
-### 2.3 获取用户信息
+### 2.5 注销账号
```http
-GET /api/user/info
-```
-
-**请求头:**
-```
-Authorization: Bearer {token}
+POST /user_log_off
```
**响应示例:**
```json
{
- "code": 200,
- "msg": "success",
- "data": {
- "id": 1001,
- "phone": "138****8000",
- "nickname": "用户昵称",
- "avatar": "头像URL",
- "money": "100.00",
- "integral": "50.00",
- "money2": "20.00",
- "level": 1,
- "draw_num": 5
- }
+ "status": 1,
+ "msg": "注销成功"
}
```
## 3. 商品相关接口
-### 3.1 获取商品分类
+### 3.1 获取首页商品列表
```http
-GET /api/goods/category
-```
-
-**响应示例:**
-```json
-{
- "code": 200,
- "msg": "success",
- "data": [
- {
- "id": 1,
- "title": "手办模型",
- "sort": 1
- },
- {
- "id": 2,
- "title": "数码产品",
- "sort": 2
- }
- ]
-}
-```
-
-### 3.2 获取商品列表
-```http
-GET /api/goods/list
+POST /goods
```
**请求参数:**
+```json
+{
+ "page": 1,
+ "type": 0,
+ "keyword": ""
+}
+```
+
+**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
-| category_id | int | 否 | 分类ID |
-| type | int | 否 | 商品类型 |
-| page | int | 否 | 页码,默认1 |
-| limit | int | 否 | 每页数量,默认20 |
+| page | int | 是 | 页码,从1开始 |
+| type | int | 否 | 商品类型:0-全部,1-一番赏,2-无限赏等 |
| keyword | string | 否 | 搜索关键词 |
**响应示例:**
```json
{
- "code": 200,
+ "status": 1,
"msg": "success",
"data": {
- "list": [
+ "data": [
{
"id": 1001,
"title": "精美手办盲盒",
"imgurl": "商品图片URL",
"price": "29.90",
"type": 1,
- "type_name": "一番赏",
"stock": 100,
"sale_stock": 50,
"status": 1,
@@ -187,35 +210,43 @@ GET /api/goods/list
}
],
"total": 100,
- "page": 1,
- "limit": 20
+ "current_page": 1,
+ "last_page": 10
}
}
```
-### 3.3 获取商品详情
+### 3.2 获取商品详情(一番赏)
```http
-GET /api/goods/detail/{id}
+POST /goodsdetail
+```
+
+**请求参数:**
+```json
+{
+ "goods_id": 1001,
+ "num": 0
+}
```
**响应示例:**
```json
{
- "code": 200,
+ "status": 1,
"msg": "success",
"data": {
- "id": 1001,
- "title": "精美手办盲盒",
- "imgurl": "商品封面图",
- "imgurl_detail": "商品详情图",
- "price": "29.90",
- "type": 1,
- "type_name": "一番赏",
- "stock": 100,
- "sale_stock": 50,
- "prize_num": 1,
- "goods_describe": "商品描述",
- "prize_list": [
+ "goods": {
+ "id": 1001,
+ "title": "精美手办盲盒",
+ "imgurl": "商品封面图",
+ "imgurl_detail": "商品详情图",
+ "price": "29.90",
+ "type": 1,
+ "stock": 100,
+ "prize_num": 1,
+ "goods_describe": "商品描述"
+ },
+ "goods_list": [
{
"id": 2001,
"title": "限定手办A",
@@ -231,44 +262,88 @@ GET /api/goods/detail/{id}
}
```
-### 3.4 获取商品奖品列表
+### 3.3 获取无限赏商品详情
```http
-GET /api/goods/prizeList/{goods_id}
+POST /infinite_goodsdetail
```
**请求参数:**
-| 参数 | 类型 | 必填 | 说明 |
-|------|------|------|------|
-| num | int | 否 | 第几套,默认0 |
+```json
+{
+ "goods_id": 1001
+}
+```
**响应示例:**
```json
{
- "code": 200,
+ "status": 1,
"msg": "success",
- "data": [
- {
- "id": 2001,
- "title": "限定手办A",
- "imgurl": "奖品图片",
- "price": "299.00",
- "money": "150.00",
- "real_pro": "0.05000",
- "goods_type": 1,
- "stock": 10,
- "surplus_stock": 8,
- "prize_code": "A001",
- "rank": 1
- }
- ]
+ "data": {
+ "goods": {
+ "id": 1001,
+ "title": "无限赏盲盒",
+ "imgurl": "商品图片",
+ "price": "19.90",
+ "type": 2,
+ "lingzhu_is": 1,
+ "king_user_id": 1234
+ },
+ "goods_list": [
+ {
+ "id": 2001,
+ "title": "稀有奖品",
+ "imgurl": "奖品图片",
+ "price": "199.00",
+ "real_pro": "0.01000"
+ }
+ ]
+ }
+}
+```
+
+### 3.4 获取商品奖品数量统计
+```http
+POST /goodslist_count
+```
+
+**请求参数:**
+```json
+{
+ "goods_id": 1001
+}
+```
+
+### 3.5 获取商品奖品内容
+```http
+POST /goodslist_content
+```
+
+**请求参数:**
+```json
+{
+ "goods_id": 1001,
+ "num": 0
+}
+```
+
+### 3.6 获取预售日历
+```http
+POST /yushourili
+```
+
+**请求参数:**
+```json
+{
+ "page": 1
}
```
## 4. 订单相关接口
-### 4.1 创建订单
+### 4.1 计算订单金额(一番赏)
```http
-POST /api/order/create
+POST /ordermoney
```
**请求参数:**
@@ -277,10 +352,10 @@ POST /api/order/create
"goods_id": 1001,
"num": 0,
"prize_num": 1,
- "coupon_id": 0,
- "use_money": "0.00",
- "use_integral": "0.00",
- "use_draw": 0
+ "coupon_id": "",
+ "use_money_is": 2,
+ "use_integral_is": 2,
+ "use_money2_is": 2
}
```
@@ -290,56 +365,61 @@ POST /api/order/create
| goods_id | int | 是 | 商品ID |
| num | int | 是 | 第几套 |
| prize_num | int | 是 | 抽奖数量 |
-| coupon_id | int | 否 | 优惠券ID |
-| use_money | decimal | 否 | 使用余额 |
-| use_integral | decimal | 否 | 使用积分 |
-| use_draw | int | 否 | 使用抽奖券 |
+| coupon_id | string | 否 | 优惠券ID |
+| use_money_is | int | 否 | 是否使用余额:1-是,2-否 |
+| use_integral_is | int | 否 | 是否使用积分:1-是,2-否 |
+| use_money2_is | int | 否 | 是否使用哈尼券:1-是,2-否 |
**响应示例:**
```json
{
- "code": 200,
- "msg": "订单创建成功",
+ "status": 1,
+ "msg": "success",
"data": {
- "order_id": 10001,
- "order_num": "202401010001",
"order_total": "29.90",
"price": "29.90",
"goods_info": {
"id": 1001,
"title": "精美手办盲盒",
"imgurl": "商品图片"
+ },
+ "goodsExtend": {
+ "pay_wechat": 1,
+ "pay_balance": 1,
+ "pay_currency": 1,
+ "pay_currency2": 1
}
}
}
```
-### 4.2 获取支付参数
+### 4.2 创建订单并支付(一番赏)
```http
-POST /api/order/pay
+POST /orderbuy
```
**请求参数:**
```json
{
- "order_id": 10001,
- "pay_type": 1
+ "goods_id": 1001,
+ "num": 0,
+ "prize_num": 1,
+ "coupon_id": "",
+ "use_money_is": 2,
+ "use_integral_is": 2,
+ "use_money2_is": 2
}
```
-**参数说明:**
-| 参数 | 类型 | 必填 | 说明 |
-|------|------|------|------|
-| order_id | int | 是 | 订单ID |
-| pay_type | int | 是 | 支付方式:1-微信,2-支付宝 |
-
**响应示例:**
```json
{
- "code": 200,
+ "status": 1,
"msg": "success",
"data": {
- "pay_params": {
+ "status": 1,
+ "order_num": "202401010001",
+ "res": {
"appId": "wx123456789",
"timeStamp": "1640995200",
"nonceStr": "abc123",
@@ -351,25 +431,77 @@ POST /api/order/pay
}
```
-### 4.3 获取订单列表
+### 4.3 无限赏订单金额计算
```http
-GET /api/order/list
+POST /infinite_ordermoney
```
**请求参数:**
-| 参数 | 类型 | 必填 | 说明 |
-|------|------|------|------|
-| status | int | 否 | 订单状态:0-未支付,1-已支付 |
-| page | int | 否 | 页码 |
-| limit | int | 否 | 每页数量 |
+```json
+{
+ "goods_id": 1001,
+ "prize_num": 1,
+ "use_money_is": 2,
+ "use_integral_is": 2,
+ "use_money2_is": 2,
+ "coupon_id": ""
+}
+```
+
+### 4.4 无限赏创建订单
+```http
+POST /infinite_orderbuy
+```
+
+**请求参数:**
+```json
+{
+ "goods_id": 1001,
+ "prize_num": 1,
+ "use_money_is": 2,
+ "use_integral_is": 2,
+ "use_money2_is": 2,
+ "coupon_id": ""
+}
+```
+
+### 4.5 商城订单金额计算
+```http
+POST /mall_ordermoney
+```
+
+**请求参数:**
+```json
+{
+ "goods_id": 1001,
+ "prize_num": 1,
+ "goods_num": 1,
+ "use_money_is": 2,
+ "use_integral_is": 2,
+ "use_money2_is": 2
+}
+```
+
+### 4.6 获取订单列表
+```http
+POST /order_list
+```
+
+**请求参数:**
+```json
+{
+ "page": 1,
+ "page_size": 20
+}
+```
**响应示例:**
```json
{
- "code": 200,
+ "status": 1,
"msg": "success",
"data": {
- "list": [
+ "data": [
{
"id": 10001,
"order_num": "202401010001",
@@ -384,185 +516,270 @@ GET /api/order/list
}
],
"total": 50,
- "page": 1,
- "limit": 20
+ "current_page": 1,
+ "last_page": 3
}
}
```
+### 4.7 获取订单详情
+```http
+POST /order_detail
+```
+
+**请求参数:**
+```json
+{
+ "order_num": "202401010001"
+}
+```
+
## 5. 抽奖相关接口
-### 5.1 获取中奖记录
+### 5.1 获取抽奖结果(一番赏)
```http
-GET /api/prize/list
+POST /prizeorderlog
```
**请求参数:**
-| 参数 | 类型 | 必填 | 说明 |
-|------|------|------|------|
-| status | int | 否 | 状态:0-待选择,1-回收,2-发货,3-集市 |
-| page | int | 否 | 页码 |
-| limit | int | 否 | 每页数量 |
+```json
+{
+ "order_num": "202401010001"
+}
+```
**响应示例:**
```json
{
- "code": 200,
+ "status": 1,
"msg": "success",
- "data": {
- "list": [
- {
- "id": 20001,
- "order_id": 10001,
- "goodslist_title": "限定手办A",
- "goodslist_imgurl": "奖品图片",
- "goodslist_price": "299.00",
- "goodslist_money": "150.00",
- "goodslist_type": 1,
- "status": 0,
- "addtime": 1640995300,
- "prize_code": "A001",
- "luck_no": 1
- }
- ],
- "total": 20,
- "page": 1,
- "limit": 20
- }
+ "data": [
+ {
+ "id": 20001,
+ "order_id": 10001,
+ "goodslist_title": "限定手办A",
+ "goodslist_imgurl": "奖品图片",
+ "goodslist_price": "299.00",
+ "goodslist_money": "150.00",
+ "goodslist_type": 1,
+ "status": 0,
+ "addtime": 1640995300,
+ "prize_code": "A001",
+ "luck_no": 1
+ }
+ ]
}
```
-### 5.2 选择奖品处理方式
+### 5.2 获取无限赏抽奖结果
```http
-POST /api/prize/choose
+POST /infinite_prizeorderlog
```
**请求参数:**
```json
{
- "order_list_ids": [20001, 20002],
- "type": 1
+ "order_num": "202401010001"
+}
+```
+
+### 5.3 获取中奖记录
+```http
+POST /shang_log
+```
+
+**请求参数:**
+```json
+{
+ "goods_id": 1001,
+ "num": 0,
+ "page": 1
+}
+```
+
+**响应示例:**
+```json
+{
+ "status": 1,
+ "msg": "success",
+ "data": {
+ "data": [
+ {
+ "user_nickname": "用户***",
+ "goodslist_title": "限定手办A",
+ "addtime": "2024-01-01 10:30:00",
+ "luck_no": 1
+ }
+ ]
+ }
+}
+```
+
+### 5.4 获取无限赏中奖记录
+```http
+POST /infinite_shang_log
+```
+
+**请求参数:**
+```json
+{
+ "goods_id": 1001,
+ "page": 1
+}
+```
+
+### 5.5 获取每日抽奖记录
+```http
+POST /infinite_prizerecords
+```
+
+**请求参数:**
+```json
+{
+ "goods_id": 1001
+}
+```
+
+### 5.6 使用道具卡抽奖
+```http
+POST /item_card_chou
+```
+
+**请求参数:**
+```json
+{
+ "goods_id": 1001,
+ "item_card_id": 1
+}
+```
+
+## 6. 盒柜(仓库)相关接口
+
+### 6.1 获取仓库首页
+```http
+POST /warehouse_index
+```
+
+**请求参数:**
+```json
+{
+ "page": 1,
+ "status": 0
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
-| order_list_ids | array | 是 | 中奖记录ID数组 |
-| type | int | 是 | 处理方式:1-回收,2-发货,3-集市 |
+| page | int | 是 | 页码 |
+| status | int | 否 | 状态:0-待选择,1-回收,2-发货,3-集市 |
**响应示例:**
```json
{
- "code": 200,
- "msg": "操作成功",
- "data": {
- "recovery_num": "R202401010001",
- "total_money": "300.00"
- }
-}
-```
-
-## 6. 集市相关接口
-
-### 6.1 获取集市商品列表
-```http
-GET /api/market/list
-```
-
-**请求参数:**
-| 参数 | 类型 | 必填 | 说明 |
-|------|------|------|------|
-| keyword | string | 否 | 搜索关键词 |
-| min_price | decimal | 否 | 最低价格 |
-| max_price | decimal | 否 | 最高价格 |
-| page | int | 否 | 页码 |
-| limit | int | 否 | 每页数量 |
-
-**响应示例:**
-```json
-{
- "code": 200,
+ "status": 1,
"msg": "success",
"data": {
- "list": [
+ "data": [
{
- "id": 30001,
- "order_num": "M202401010001",
- "price": "280.00",
- "stock": 1,
+ "id": 20001,
+ "goodslist_title": "限定手办A",
+ "goodslist_imgurl": "奖品图片",
+ "goodslist_price": "299.00",
+ "goodslist_money": "150.00",
"status": 0,
- "addtime": 1640995400,
- "goods_info": [
- {
- "title": "限定手办A",
- "imgurl": "奖品图片",
- "price": "299.00"
- }
- ]
+ "addtime": 1640995300
}
- ],
- "total": 100,
- "page": 1,
- "limit": 20
+ ]
}
}
```
-### 6.2 发布集市商品
+### 6.2 回收奖品
```http
-POST /api/market/publish
+POST /warehouse_recovery
```
**请求参数:**
```json
{
- "order_list_ids": [20001],
- "price": "280.00"
+ "order_list_ids": "20001,20002"
}
```
-**响应示例:**
-```json
-{
- "code": 200,
- "msg": "发布成功",
- "data": {
- "market_id": 30001,
- "order_num": "M202401010001"
- }
-}
-```
-
-### 6.3 购买集市商品
+### 6.3 发货奖品
```http
-POST /api/market/buy
+POST /warehouse_send
```
**请求参数:**
```json
{
- "market_id": 30001,
- "pay_type": 1
+ "order_list_ids": "20001,20002",
+ "name": "张三",
+ "mobile": "13800138000",
+ "address": "北京市朝阳区xxx街道xxx号",
+ "message": "请小心轻放"
}
```
-**响应示例:**
+### 6.4 确认发货
+```http
+POST /warehouse_send_confirm
+```
+
+**请求参数:**
```json
{
- "code": 200,
- "msg": "购买成功",
- "data": {
- "order_id": 40001,
- "pay_params": {
- "appId": "wx123456789",
- "timeStamp": "1640995200",
- "nonceStr": "abc123",
- "package": "prepay_id=wx123456789",
- "signType": "RSA",
- "paySign": "signature"
- }
- }
+ "id": 70001
+}
+```
+
+### 6.5 获取发货记录
+```http
+POST /warehouse_send_record
+```
+
+**请求参数:**
+```json
+{
+ "page": 1
+}
+```
+
+### 6.6 获取发货记录详情
+```http
+POST /warehouse_send_record_detail
+```
+
+**请求参数:**
+```json
+{
+ "id": 70001
+}
+```
+
+### 6.7 获取回收记录
+```http
+POST /warehouse_recovery_record
+```
+
+**请求参数:**
+```json
+{
+ "page": 1
+}
+```
+
+### 6.8 获取物流信息
+```http
+POST /warehouse_order_logistics
+```
+
+**请求参数:**
+```json
+{
+ "id": 70001
}
```
@@ -570,23 +787,30 @@ POST /api/market/buy
### 7.1 获取资金明细
```http
-GET /api/finance/moneyLog
+POST /profitMoney
```
**请求参数:**
+```json
+{
+ "page": 1,
+ "type": 0
+}
+```
+
+**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
-| type | int | 否 | 类型:1-充值,2-消费,3-回收等 |
-| page | int | 否 | 页码 |
-| limit | int | 否 | 每页数量 |
+| page | int | 是 | 页码 |
+| type | int | 否 | 类型:0-全部,1-充值,2-消费,3-回收等 |
**响应示例:**
```json
{
- "code": 200,
+ "status": 1,
"msg": "success",
"data": {
- "list": [
+ "data": [
{
"id": 50001,
"change_money": "+150.00",
@@ -596,177 +820,255 @@ GET /api/finance/moneyLog
"content": "回收奖品获得",
"addtime": 1640995500
}
- ],
- "total": 50,
- "page": 1,
- "limit": 20
+ ]
}
}
```
### 7.2 获取积分明细
```http
-GET /api/finance/integralLog
-```
-
-**响应格式同资金明细**
-
-### 7.3 获取优惠券列表
-```http
-GET /api/finance/couponList
+POST /profitScore
```
**请求参数:**
+```json
+{
+ "page": 1,
+ "type": 0
+}
+```
+
+### 7.3 获取支付明细
+```http
+POST /profitPay
+```
+
+**请求参数:**
+```json
+{
+ "page": 1,
+ "type": 0
+}
+```
+
+### 7.4 获取优惠券列表
+```http
+POST /coupon_list
+```
+
+**请求参数:**
+```json
+{
+ "page": 1,
+ "status": 0
+}
+```
+
+**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
+| page | int | 是 | 页码 |
| status | int | 否 | 状态:0-未使用,1-已使用,2-已过期 |
**响应示例:**
```json
{
- "code": 200,
+ "status": 1,
"msg": "success",
- "data": [
- {
- "id": 60001,
- "title": "新人专享券",
- "price": "5.00",
- "man_price": "30.00",
- "end_time": 1641081600,
- "status": 0,
- "state": 0
- }
- ]
+ "data": {
+ "data": [
+ {
+ "id": 60001,
+ "title": "新人专享券",
+ "price": "5.00",
+ "man_price": "30.00",
+ "end_time": 1641081600,
+ "status": 0,
+ "state": 0
+ }
+ ]
+ }
}
```
-## 8. 发货相关接口
-
-### 8.1 创建发货订单
+### 7.5 领取优惠券
```http
-POST /api/delivery/create
+POST /coupon_ling
```
**请求参数:**
```json
{
- "order_list_ids": [20001, 20002],
- "name": "张三",
- "mobile": "13800138000",
- "address": "北京市朝阳区xxx街道xxx号",
- "message": "请小心轻放"
+ "coupon_id": 60001
}
```
-**响应示例:**
-```json
-{
- "code": 200,
- "msg": "发货订单创建成功",
- "data": {
- "send_id": 70001,
- "send_num": "S202401010001",
- "freight": "10.00",
- "total_price": "10.00"
- }
-}
-```
-
-### 8.2 获取发货订单列表
+### 7.6 分享优惠券
```http
-GET /api/delivery/list
+POST /coupon_share
```
-**响应示例:**
+**请求参数:**
```json
{
- "code": 200,
- "msg": "success",
- "data": {
- "list": [
- {
- "id": 70001,
- "send_num": "S202401010001",
- "freight": "10.00",
- "status": 1,
- "count": 2,
- "name": "张三",
- "mobile": "138****8000",
- "address": "北京市朝阳区xxx街道xxx号",
- "courier_number": "SF1234567890",
- "courier_name": "顺丰速运",
- "addtime": 1640995600,
- "send_time": 1640995700
- }
- ]
- }
+ "coupon_id": 60001
}
```
-### 8.3 获取物流信息
+### 7.7 合成优惠券
```http
-GET /api/delivery/track/{send_id}
+POST /coupon_synthesis
+```
+
+**请求参数:**
+```json
+{
+ "coupon_ids": "60001,60002,60003"
+}
+```
+
+### 7.8 计算优惠券合成
+```http
+POST /coupon_ji_suan
+```
+
+**请求参数:**
+```json
+{
+ "coupon_ids": "60001,60002,60003"
+}
+```
+
+## 8. 福利相关接口
+
+### 8.1 获取福利屋列表
+```http
+POST /welfare_house_list
```
**响应示例:**
```json
{
- "code": 200,
+ "status": 1,
"msg": "success",
- "data": {
- "courier_number": "SF1234567890",
- "courier_name": "顺丰速运",
- "delivery_status": 3,
- "delivery_list": [
- {
- "time": "2024-01-01 10:00:00",
- "context": "快件已发出"
- },
- {
- "time": "2024-01-01 15:30:00",
- "context": "快件已到达中转站"
- }
- ]
- }
+ "data": [
+ {
+ "id": 1001,
+ "title": "每日福利",
+ "imgurl": "福利图片",
+ "status": 1
+ }
+ ]
+}
+```
+
+### 8.2 获取福利屋详情
+```http
+POST /fuliwu_detail
+```
+
+**请求参数:**
+```json
+{
+ "goods_id": 1001
+}
+```
+
+### 8.3 获取福利屋参与者
+```http
+POST /fuliwu_participants
+```
+
+**请求参数:**
+```json
+{
+ "goods_id": 1001,
+ "page": 1
+}
+```
+
+### 8.4 获取福利屋记录
+```http
+POST /fuliwu_records
+```
+
+**请求参数:**
+```json
+{
+ "goods_id": 1001,
+ "page": 1
+}
+```
+
+### 8.5 获取用户福利屋参与记录
+```http
+GET /fuliwu_user_records
+```
+
+### 8.6 获取用户福利屋中奖记录
+```http
+GET /fuliwu_user_winning_records
+```
+
+### 8.7 完成任务
+```http
+POST /ling_task
+```
+
+**请求参数:**
+```json
+{
+ "task_list_id": 1001
}
```
## 9. 系统配置接口
-### 9.1 获取系统配置
+### 9.1 获取全局配置
```http
-GET /api/system/config
+GET /config
```
**响应示例:**
```json
{
- "code": 200,
+ "status": 1,
"msg": "success",
"data": {
- "app_name": "抽奖盲盒",
- "app_version": "1.0.0",
- "customer_service": "400-123-4567",
- "agreement_url": "https://example.com/agreement",
- "privacy_url": "https://example.com/privacy"
+ "good_type": [
+ {
+ "value": 1,
+ "name": "一番赏",
+ "is_show": 1,
+ "pay_wechat": 1,
+ "pay_balance": 1
+ }
+ ],
+ "app_setting": {
+ "app_name": "友达赏",
+ "balance_name": "钻石",
+ "currency1_name": "UU币",
+ "currency2_name": "哈尼券",
+ "applet_version": "v1.0.3"
+ }
}
}
```
### 9.2 获取轮播图
```http
-GET /api/system/banner
+GET /getAdvert
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
-| type | int | 否 | 类型:1-首页轮播,2-抽卡机轮播 |
+| type_id | int | 否 | 类型:1-首页轮播,2-抽卡机轮播 |
**响应示例:**
```json
{
- "code": 200,
+ "status": 1,
"msg": "success",
"data": [
{
@@ -780,141 +1082,251 @@ GET /api/system/banner
}
```
-## 10. 错误码说明
+### 9.3 获取单页内容
+```http
+GET /getDanye
+```
+
+**请求参数:**
+| 参数 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| type | int | 是 | 页面类型:1-服务协议,2-隐私政策,3-公告 |
+
+**响应示例:**
+```json
+{
+ "status": 1,
+ "msg": "success",
+ "data": {
+ "title": "用户协议",
+ "content": "协议内容..."
+ }
+}
+```
+
+### 9.4 获取优惠券中心
+```http
+POST /coupon
+```
+
+**响应示例:**
+```json
+{
+ "status": 1,
+ "msg": "success",
+ "data": {
+ "status": 1,
+ "goods": {
+ "list": [
+ {
+ "id": 60001,
+ "title": "新人券",
+ "price": "5.00"
+ }
+ ]
+ }
+ }
+}
+```
+
+### 9.5 领取优惠券
+```http
+POST /receive
+```
+
+**请求参数:**
+```json
+{
+ "coupon_id": "60001,60002"
+}
+```
+
+### 9.6 添加收藏
+```http
+POST /addCollect
+```
+
+**请求参数:**
+```json
+{
+ "goods_id": 1001,
+ "type": 1,
+ "num": 0
+}
+```
+
+## 10. 其他功能接口
+
+### 10.1 获取排行榜
+```http
+GET /getRankList
+```
+
+**请求参数:**
+| 参数 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| type | string | 是 | 排行榜类型:invite-邀请榜,consume-消费榜 |
+
+### 10.2 获取邀请信息
+```http
+POST /invitation
+```
+
+**请求参数:**
+```json
+{
+ "page": 1
+}
+```
+
+### 10.3 绑定邀请码
+```http
+POST /bind_invite_code
+```
+
+**请求参数:**
+```json
+{
+ "invite_code": "ABC123"
+}
+```
+
+### 10.4 获取VIP列表
+```http
+POST /vip_list
+```
+
+### 10.5 使用兑换码
+```http
+POST /used
+```
+
+**请求参数:**
+```json
+{
+ "code": "EXCHANGE123"
+}
+```
+
+## 11. 错误码说明
| 错误码 | 说明 |
|--------|------|
-| 10001 | 参数错误 |
-| 10002 | 用户不存在 |
-| 10003 | 验证码错误 |
-| 10004 | 验证码已过期 |
-| 20001 | 商品不存在 |
-| 20002 | 商品已下架 |
-| 20003 | 商品库存不足 |
-| 30001 | 订单不存在 |
-| 30002 | 订单状态错误 |
-| 30003 | 余额不足 |
-| 40001 | 支付失败 |
-| 40002 | 支付超时 |
-| 50001 | 抽奖失败 |
-| 50002 | 奖品库存不足 |
+| 1 | 请求成功 |
+| 0 | 请求失败 |
+| -1 | 用户未登录 |
+| -9 | 需要绑定手机号 |
+| 2222 | 特殊状态(如已领取、已完成等) |
-## 11. 接口调用示例
+## 12. UniApp小程序接口调用示例
-### JavaScript示例
+### 12.1 请求封装使用
```javascript
-// 用户登录
-const login = async (phone, code) => {
- const response = await fetch('/api/user/login', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json'
+// 在小程序页面中调用API
+export default {
+ methods: {
+ // 获取商品列表
+ async getGoodsList() {
+ try {
+ const res = await this.$request.post('goods', {
+ page: 1,
+ type: 0
+ });
+
+ if (res.status === 1) {
+ this.goodsList = res.data.data;
+ } else {
+ this.$c.toast(res.msg);
+ }
+ } catch (error) {
+ console.error('获取商品列表失败:', error);
+ }
},
- body: JSON.stringify({
- phone: phone,
- code: code
- })
- });
-
- const result = await response.json();
- if (result.code === 200) {
- localStorage.setItem('token', result.data.token);
- return result.data;
- } else {
- throw new Error(result.msg);
- }
-};
-
-// 获取商品列表
-const getGoodsList = async (params = {}) => {
- const query = new URLSearchParams(params).toString();
- const response = await fetch(`/api/goods/list?${query}`, {
- headers: {
- 'Authorization': `Bearer ${localStorage.getItem('token')}`
- }
- });
-
- return await response.json();
-};
-
-// 创建订单
-const createOrder = async (orderData) => {
- const response = await fetch('/api/order/create', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- 'Authorization': `Bearer ${localStorage.getItem('token')}`
+
+ // 创建订单并支付
+ async createOrder() {
+ const res = await this.req({
+ url: 'orderbuy',
+ data: {
+ goods_id: this.goodsId,
+ num: 0,
+ prize_num: 1,
+ use_money_is: 2,
+ use_integral_is: 2
+ }
+ });
+
+ if (res.status === 1 && res.data.status === 1) {
+ // 调起微信支付
+ const payResult = await this.$platform.pay({
+ data: res.data.res
+ }, this);
+
+ if (payResult === 'success') {
+ // 支付成功,获取抽奖结果
+ this.getPrizeResult(res.data.order_num);
+ }
+ }
},
- body: JSON.stringify(orderData)
- });
-
- return await response.json();
-};
-```
-
-### PHP示例
-```php
-baseUrl = $baseUrl;
- }
-
- public function setToken($token) {
- $this->token = $token;
- }
-
- public function request($method, $endpoint, $data = null) {
- $url = $this->baseUrl . $endpoint;
- $headers = ['Content-Type: application/json'];
- if ($this->token) {
- $headers[] = 'Authorization: Bearer ' . $this->token;
- }
-
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
-
- if ($method === 'POST') {
- curl_setopt($ch, CURLOPT_POST, true);
- if ($data) {
- curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+ // 获取抽奖结果
+ async getPrizeResult(orderNum) {
+ const res = await this.$request.post('prizeorderlog', {
+ order_num: orderNum
+ });
+
+ if (res.status === 1) {
+ // 显示中奖结果
+ this.showPrizeResult(res.data);
}
}
-
- $response = curl_exec($ch);
- curl_close($ch);
-
- return json_decode($response, true);
- }
-
- public function login($phone, $code) {
- return $this->request('POST', '/api/user/login', [
- 'phone' => $phone,
- 'code' => $code
- ]);
- }
-
- public function getGoodsList($params = []) {
- $query = http_build_query($params);
- return $this->request('GET', '/api/goods/list?' . $query);
}
}
-
-// 使用示例
-$client = new ApiClient('https://api.example.com');
-$result = $client->login('13800138000', '123456');
-
-if ($result['code'] === 200) {
- $client->setToken($result['data']['token']);
- $goodsList = $client->getGoodsList(['type' => 1, 'page' => 1]);
-}
-?>
```
-这份API文档涵盖了抽奖盲盒系统的主要功能接口,包括用户认证、商品管理、订单处理、抽奖机制、集市交易、财务管理等核心业务模块。每个接口都提供了详细的参数说明和响应示例,便于前端开发和第三方集成。
\ No newline at end of file
+### 12.2 配置管理使用
+```javascript
+// 获取全局配置
+const appName = this.$config.getAppSetting('app_name');
+const balanceName = this.$config.getAppSetting('balance_name');
+
+// 获取商品类型配置
+const goodTypes = this.$config.getGoodType();
+
+// 检查支付方式
+const goodTypeConfig = this.$config.getGoodTypeFind(1); // 一番赏
+if (goodTypeConfig.pay_wechat === 1) {
+ // 支持微信支付
+}
+```
+
+### 12.3 路由跳转使用
+```javascript
+// 跳转到商品详情页
+this.$c.to({
+ url: '/pages/shouye/detail',
+ query: {
+ goods_id: 1001,
+ num: 0
+ }
+});
+
+// 跳转到用户中心
+this.$customRouter.navigateTo('/pages/user/index');
+```
+
+### 12.4 平台适配使用
+```javascript
+// 调起支付(自动适配不同平台)
+const payResult = await this.$platform.pay({
+ data: payParams
+}, this);
+
+// 平台特定功能
+if (this.$platform.code === 'mp-weixin') {
+ // 微信小程序特有功能
+ wx.requestPayment(payParams);
+}
+```
+
+这份更新后的API文档基于小程序中实际使用的接口,包含了完整的请求参数、响应格式和使用示例,更贴近实际开发需求。
\ No newline at end of file
diff --git a/docs/系统架构图.md b/docs/系统架构图.md
index 9a05e5de..fddd846b 100644
--- a/docs/系统架构图.md
+++ b/docs/系统架构图.md
@@ -5,54 +5,59 @@
```mermaid
graph TB
subgraph "客户端层"
- A1[微信小程序]
- A2[H5页面]
- A3[管理后台]
+ A1[微信小程序
honey_box]
+ A2[H5页面
UniApp多端]
+ A3[管理后台
Web界面]
+ A4[APP应用
Android/iOS]
end
subgraph "网关层"
B1[Nginx反向代理]
B2[负载均衡]
+ B3[SSL证书]
end
- subgraph "应用层"
- C1[API接口模块]
- C2[管理后台模块]
- C3[定时任务模块]
+ subgraph "应用层 - ThinkPHP 6.0"
+ C1[API接口模块
app/api]
+ C2[管理后台模块
app/admin]
+ C3[前台页面模块
app/index]
+ C4[定时任务模块
app/command]
end
subgraph "业务服务层"
- D1[用户服务]
- D2[商品服务]
- D3[订单服务]
- D4[支付服务]
- D5[抽奖服务]
- D6[物流服务]
- D7[集市服务]
+ D1[用户服务
登录注册/用户管理]
+ D2[商品服务
盒子管理/奖品配置]
+ D3[订单服务
订单处理/支付管理]
+ D4[抽奖服务
9种抽奖算法]
+ D5[物流服务
发货/物流跟踪]
+ D6[集市服务
二手交易]
+ D7[财务服务
资金流水/优惠券]
end
subgraph "数据层"
- E1[MySQL主库]
- E2[MySQL从库]
- E3[Redis缓存]
- E4[文件存储]
+ E1[MySQL主库
业务数据]
+ E2[MySQL从库
读写分离]
+ E3[Redis缓存
会话/配置缓存]
+ E4[腾讯云COS
图片/文件存储]
end
subgraph "外部服务"
- F1[微信支付]
- F2[支付宝]
- F3[短信服务]
- F4[物流接口]
- F5[腾讯云COS]
+ F1[微信支付
小程序支付]
+ F2[支付宝
APP支付]
+ F3[短信服务
验证码发送]
+ F4[物流接口
快递查询]
+ F5[微信开放平台
授权登录]
end
A1 --> B1
A2 --> B1
A3 --> B1
+ A4 --> B1
B1 --> B2
B2 --> C1
B2 --> C2
+ B2 --> C3
C1 --> D1
C1 --> D2
@@ -65,10 +70,11 @@ graph TB
C2 --> D1
C2 --> D2
C2 --> D3
+ C2 --> D7
- C3 --> D1
- C3 --> D2
- C3 --> D3
+ C4 --> D1
+ C4 --> D2
+ C4 --> D3
D1 --> E1
D2 --> E1
@@ -86,76 +92,202 @@ graph TB
D2 --> E3
D3 --> E3
D4 --> E3
- D5 --> E3
D2 --> E4
- D6 --> E4
+ D5 --> E4
- D4 --> F1
- D4 --> F2
+ D3 --> F1
+ D3 --> F2
D1 --> F3
- D6 --> F4
- D2 --> F5
+ D5 --> F4
+ D1 --> F5
```
-## 2. 应用模块架构
+## 2. 前后端架构设计
```mermaid
graph TD
- subgraph "ThinkPHP 6.0 框架"
- A[应用入口 public/index.php]
+ subgraph "前端架构 - UniApp框架"
+ A[honey_box小程序项目]
- subgraph "多应用模式"
- B1[admin - 管理后台]
- B2[api - 接口服务]
- B3[index - 前台页面]
+ subgraph "页面模块"
+ B1[pages/shouye - 首页模块]
+ B2[pages/user - 用户中心]
+ B3[pages/mall - 商城模块]
+ B4[pages/infinite - 福利模块]
+ B5[pages/hegui - 盒柜模块]
+ B6[pages/other - 其他页面]
+ end
+
+ subgraph "组件系统"
+ C1[components/banner - 轮播组件]
+ C2[components/detail-* - 详情组件]
+ C3[components/pay-dialog - 支付组件]
+ C4[components/lucky-canvas - 抽奖组件]
+ C5[components/prize-wheel - 转盘组件]
end
subgraph "公共模块"
- C1[common/model - 数据模型]
- C2[common/service - 业务服务]
- C3[common/helper - 工具类]
- C4[common/server - 服务类]
+ D1[common/request.js - 请求管理]
+ D2[common/config.js - 配置管理]
+ D3[common/router.js - 路由管理]
+ D4[common/env.js - 环境配置]
+ D5[common/platform - 平台适配]
end
- subgraph "中间件层"
- D1[认证中间件]
- D2[权限中间件]
- D3[日志中间件]
- D4[跨域中间件]
+ subgraph "分包模块"
+ E1[package/index - 首页分包]
+ E2[package/mine - 个人中心分包]
+ end
+ end
+
+ subgraph "后端架构 - ThinkPHP 6.0"
+ F[server/php项目]
+
+ subgraph "应用模块"
+ G1[app/admin - 管理后台]
+ G2[app/api - API接口]
+ G3[app/index - 前台页面]
+ G4[app/command - 定时任务]
+ end
+
+ subgraph "公共模块"
+ H1[app/common/model - 数据模型]
+ H2[app/common/service - 业务服务]
+ H3[app/common/helper - 工具类]
+ H4[app/common/server - 服务类]
end
subgraph "配置管理"
- E1[数据库配置]
- E2[缓存配置]
- E3[路由配置]
- E4[应用配置]
+ I1[config/database.php - 数据库配置]
+ I2[config/app.php - 应用配置]
+ I3[config/cache.php - 缓存配置]
+ I4[config/route.php - 路由配置]
end
end
A --> B1
A --> B2
A --> B3
+ A --> B4
+ A --> B5
+ A --> B6
B1 --> C1
- B1 --> C2
- B2 --> C1
B2 --> C2
- B3 --> C1
- B3 --> C2
+ B3 --> C3
+ B4 --> C4
+ B5 --> C5
- B1 --> D1
- B1 --> D2
- B2 --> D1
- B2 --> D3
+ C1 --> D1
+ C2 --> D2
+ C3 --> D3
+ C4 --> D4
+ C5 --> D5
- C1 --> E1
- C2 --> E2
- B1 --> E3
- B2 --> E3
+ D1 --> G2
+ D2 --> G2
+
+ F --> G1
+ F --> G2
+ F --> G3
+ F --> G4
+
+ G1 --> H1
+ G2 --> H1
+ G3 --> H1
+ G4 --> H1
+
+ G1 --> H2
+ G2 --> H2
+
+ H1 --> I1
+ H2 --> I2
```
-## 3. 数据库架构设计
+## 3. 小程序技术架构
+
+```mermaid
+graph TD
+ subgraph "UniApp跨平台架构"
+ A[UniApp框架]
+
+ subgraph "编译目标"
+ B1[微信小程序
wx683d8a8a499d7ec6]
+ B2[H5网页版]
+ B3[Android APP]
+ B4[iOS APP]
+ B5[支付宝小程序]
+ B6[字节跳动小程序]
+ end
+
+ subgraph "核心依赖"
+ C1[@lucky-canvas/uni
抽奖转盘组件]
+ C2[js-md5
MD5加密]
+ C3[uqrcodejs
二维码生成]
+ C4[eruda
调试工具]
+ end
+
+ subgraph "页面路由"
+ D1[TabBar导航
5个主要页面]
+ D2[普通页面
50+功能页面]
+ D3[分包页面
按需加载]
+ end
+
+ subgraph "状态管理"
+ E1[全局配置
ConfigManager]
+ E2[用户状态
Token/UserInfo]
+ E3[缓存管理
Storage]
+ E4[环境配置
EnvConfig]
+ end
+ end
+
+ subgraph "网络通信"
+ F1[请求封装
RequestManager]
+ F2[签名验证
MD5+时间戳]
+ F3[错误处理
统一异常处理]
+ F4[缓存策略
5分钟缓存]
+ end
+
+ subgraph "平台适配"
+ G1[微信平台
支付/登录/分享]
+ G2[H5平台
网页支付]
+ G3[APP平台
原生功能]
+ G4[其他平台
功能适配]
+ end
+
+ A --> B1
+ A --> B2
+ A --> B3
+ A --> B4
+ A --> B5
+ A --> B6
+
+ A --> C1
+ A --> C2
+ A --> C3
+ A --> C4
+
+ B1 --> D1
+ B2 --> D2
+ B3 --> D3
+
+ D1 --> E1
+ D2 --> E2
+ D3 --> E3
+
+ E1 --> F1
+ E2 --> F2
+ E3 --> F3
+ E4 --> F4
+
+ F1 --> G1
+ F2 --> G2
+ F3 --> G3
+ F4 --> G4
+```
+
+## 4. 数据库架构设计
```mermaid
erDiagram
@@ -233,7 +365,7 @@ erDiagram
}
```
-## 4. 抽奖算法架构
+## 5. 抽奖算法架构
```mermaid
graph TD
@@ -283,24 +415,30 @@ graph TD
J --> K[返回结果]
```
-## 5. 支付系统架构
+## 6. 支付系统架构
```mermaid
graph TD
A[支付请求] --> B[支付路由]
B --> C{支付方式}
- C --> D1[微信支付]
- C --> D2[支付宝支付]
- C --> D3[余额支付]
- C --> D4[虚拟货币支付]
+ C --> D1[微信支付
小程序支付]
+ C --> D2[支付宝支付
APP支付]
+ C --> D3[余额支付
钻石扣除]
+ C --> D4[虚拟货币支付
UU币/哈尼券]
- subgraph "支付处理"
- E1[订单验证]
- E2[金额计算]
- E3[优惠券处理]
- E4[支付执行]
- E5[回调处理]
+ subgraph "支付处理流程"
+ E1[订单验证
检查订单状态]
+ E2[金额计算
优惠券抵扣]
+ E3[支付执行
调用支付接口]
+ E4[回调处理
异步通知]
+ E5[状态更新
订单完成]
+ end
+
+ subgraph "小程序支付集成"
+ F1[wx.requestPayment
调起支付]
+ F2[支付参数生成
签名验证]
+ F3[支付结果处理
成功/失败]
end
D1 --> E1
@@ -311,48 +449,38 @@ graph TD
E1 --> E2
E2 --> E3
E3 --> E4
+ E4 --> E5
- E4 --> F{支付结果}
- F -->|成功| G[触发抽奖]
- F -->|失败| H[订单取消]
+ D1 --> F1
+ F1 --> F2
+ F2 --> F3
- subgraph "外部支付"
- I1[微信支付API]
- I2[支付宝API]
- end
-
- D1 --> I1
- D2 --> I2
-
- I1 --> E5
- I2 --> E5
-
- E5 --> J[更新订单状态]
- J --> G
+ E5 --> G[触发抽奖算法]
+ G --> H[生成中奖结果]
```
-## 6. 缓存架构设计
+## 7. 缓存架构设计
```mermaid
graph TD
- subgraph "应用层缓存"
- A1[用户信息缓存]
- A2[商品信息缓存]
- A3[配置信息缓存]
- A4[热点数据缓存]
+ subgraph "前端缓存策略"
+ A1[小程序缓存
uni.setStorageSync]
+ A2[配置缓存
ConfigManager]
+ A3[用户信息缓存
Token/UserInfo]
+ A4[请求缓存
5分钟有效期]
end
- subgraph "Redis集群"
- B1[Redis Master]
- B2[Redis Slave 1]
- B3[Redis Slave 2]
+ subgraph "后端Redis集群"
+ B1[Redis Master
主节点写入]
+ B2[Redis Slave 1
从节点读取]
+ B3[Redis Slave 2
从节点读取]
end
subgraph "缓存策略"
- C1[读写分离]
- C2[主从同步]
- C3[故障转移]
- C4[数据持久化]
+ C1[读写分离
主写从读]
+ C2[主从同步
实时同步]
+ C3[故障转移
自动切换]
+ C4[数据持久化
RDB+AOF]
end
A1 --> B1
@@ -372,10 +500,10 @@ graph TD
C3 --> C4
subgraph "缓存更新策略"
- D1[定时更新]
- D2[事件触发更新]
- D3[LRU淘汰]
- D4[TTL过期]
+ D1[定时更新
配置刷新]
+ D2[事件触发更新
数据变更]
+ D3[LRU淘汰
内存管理]
+ D4[TTL过期
自动清理]
end
C4 --> D1
@@ -384,29 +512,29 @@ graph TD
C4 --> D4
```
-## 7. 消息队列架构
+## 8. 消息队列架构
```mermaid
graph TD
subgraph "消息生产者"
- A1[订单服务]
- A2[支付服务]
- A3[抽奖服务]
- A4[物流服务]
+ A1[订单服务
下单事件]
+ A2[支付服务
支付回调]
+ A3[抽奖服务
中奖结果]
+ A4[物流服务
发货状态]
end
subgraph "消息队列"
- B1[支付成功队列]
- B2[抽奖结果队列]
- B3[发货通知队列]
- B4[数据统计队列]
+ B1[支付成功队列
触发抽奖]
+ B2[抽奖结果队列
推送通知]
+ B3[发货通知队列
物流更新]
+ B4[数据统计队列
业务分析]
end
subgraph "消息消费者"
- C1[抽奖处理器]
- C2[通知处理器]
- C3[统计处理器]
- C4[日志处理器]
+ C1[抽奖处理器
执行抽奖算法]
+ C2[通知处理器
小程序推送]
+ C3[统计处理器
数据汇总]
+ C4[日志处理器
操作记录]
end
A1 --> B1
@@ -421,43 +549,43 @@ graph TD
B3 --> C2
B4 --> C3
- C1 --> D1[执行抽奖]
- C2 --> D2[发送通知]
- C3 --> D3[更新统计]
- C4 --> D4[记录日志]
+ C1 --> D1[执行抽奖
生成中奖记录]
+ C2 --> D2[发送通知
微信模板消息]
+ C3 --> D3[更新统计
实时数据]
+ C4 --> D4[记录日志
审计追踪]
```
-## 8. 安全架构设计
+## 9. 安全架构设计
```mermaid
graph TD
subgraph "网络安全"
- A1[HTTPS加密]
- A2[防火墙]
- A3[DDoS防护]
- A4[IP白名单]
+ A1[HTTPS加密
SSL证书]
+ A2[防火墙
端口控制]
+ A3[DDoS防护
流量清洗]
+ A4[IP白名单
访问控制]
end
subgraph "应用安全"
- B1[JWT认证]
- B2[权限控制]
- B3[参数验证]
- B4[SQL注入防护]
- B5[XSS防护]
+ B1[JWT认证
Token验证]
+ B2[权限控制
RBAC模型]
+ B3[参数验证
输入过滤]
+ B4[SQL注入防护
ORM框架]
+ B5[XSS防护
输出转义]
end
subgraph "数据安全"
- C1[数据加密]
- C2[敏感信息脱敏]
- C3[数据备份]
- C4[访问日志]
+ C1[数据加密
敏感字段加密]
+ C2[信息脱敏
手机号脱敏]
+ C3[数据备份
定时备份]
+ C4[访问日志
操作审计]
end
subgraph "业务安全"
- D1[防刷机制]
- D2[风控系统]
- D3[异常监控]
- D4[操作审计]
+ D1[防刷机制
频率限制]
+ D2[风控系统
异常检测]
+ D3[签名验证
MD5+时间戳]
+ D4[白名单机制
API访问控制]
end
A1 --> B1
@@ -477,58 +605,6 @@ graph TD
C4 --> D4
```
-## 9. 监控运维架构
-
-```mermaid
-graph TD
- subgraph "应用监控"
- A1[性能监控]
- A2[错误监控]
- A3[业务监控]
- A4[用户行为监控]
- end
-
- subgraph "系统监控"
- B1[服务器监控]
- B2[数据库监控]
- B3[缓存监控]
- B4[网络监控]
- end
-
- subgraph "日志管理"
- C1[应用日志]
- C2[访问日志]
- C3[错误日志]
- C4[审计日志]
- end
-
- subgraph "告警系统"
- D1[实时告警]
- D2[邮件通知]
- D3[短信通知]
- D4[钉钉通知]
- end
-
- A1 --> D1
- A2 --> D1
- A3 --> D1
- A4 --> D1
-
- B1 --> D1
- B2 --> D1
- B3 --> D1
- B4 --> D1
-
- C1 --> D2
- C2 --> D2
- C3 --> D2
- C4 --> D2
-
- D1 --> D3
- D2 --> D3
- D3 --> D4
-```
-
## 架构特点说明
### 1. 高可用性
@@ -556,4 +632,93 @@ graph TD
- 标准化的开发规范
- 完善的日志和监控体系
-这个架构设计充分考虑了抽奖盲盒系统的业务特点,在保证系统稳定性和性能的同时,也为未来的功能扩展预留了空间。
\ No newline at end of file
+这个架构设计充分考虑了抽奖盲盒系统的业务特点,在保证系统稳定性和性能的同时,也为未来的功能扩展预留了空间。
+## 10. 监控运维架构
+
+```mermaid
+graph TD
+ subgraph "应用监控"
+ A1[性能监控
响应时间/吞吐量]
+ A2[错误监控
异常捕获/错误率]
+ A3[业务监控
抽奖成功率/支付成功率]
+ A4[用户行为监控
页面访问/操作路径]
+ end
+
+ subgraph "系统监控"
+ B1[服务器监控
CPU/内存/磁盘]
+ B2[数据库监控
连接数/慢查询]
+ B3[缓存监控
Redis性能/命中率]
+ B4[网络监控
带宽/延迟]
+ end
+
+ subgraph "日志管理"
+ C1[应用日志
业务操作日志]
+ C2[访问日志
API调用记录]
+ C3[错误日志
异常堆栈信息]
+ C4[审计日志
管理员操作]
+ end
+
+ subgraph "告警系统"
+ D1[实时告警
阈值监控]
+ D2[邮件通知
异常报告]
+ D3[短信通知
紧急告警]
+ D4[钉钉通知
团队协作]
+ end
+
+ A1 --> D1
+ A2 --> D1
+ A3 --> D1
+ A4 --> D1
+
+ B1 --> D1
+ B2 --> D1
+ B3 --> D1
+ B4 --> D1
+
+ C1 --> D2
+ C2 --> D2
+ C3 --> D2
+ C4 --> D2
+
+ D1 --> D3
+ D2 --> D3
+ D3 --> D4
+```
+
+## 架构特点说明
+
+### 1. 前后端分离架构
+- **前端**:基于UniApp框架的跨平台小程序,支持微信小程序、H5、APP等多端部署
+- **后端**:基于ThinkPHP 6.0的RESTful API服务,提供统一的数据接口
+
+### 2. 小程序技术栈
+- **框架**:UniApp + Vue.js 2.x
+- **构建工具**:HBuilderX
+- **状态管理**:全局配置管理 + 本地存储
+- **网络请求**:封装的RequestManager,支持签名验证和缓存
+- **UI组件**:自定义组件 + uni-ui组件库
+
+### 3. 后端技术架构
+- **框架**:ThinkPHP 6.0
+- **数据库**:MySQL 5.7+ 主从架构
+- **缓存**:Redis集群
+- **文件存储**:腾讯云COS
+- **队列**:基于Redis的消息队列
+
+### 4. 核心业务特性
+- **多端适配**:一套代码支持小程序、H5、APP多端运行
+- **抽奖算法**:9种不同类型的抽奖模式,优化的概率算法
+- **支付集成**:微信支付、支付宝、虚拟货币等多种支付方式
+- **实时通信**:WebSocket推送中奖结果和系统通知
+
+### 5. 安全防护
+- **前端安全**:请求签名、参数加密、防重放攻击
+- **后端安全**:JWT认证、权限控制、SQL注入防护
+- **业务安全**:防刷机制、风控系统、操作审计
+
+### 6. 性能优化
+- **前端优化**:分包加载、图片懒加载、请求缓存
+- **后端优化**:数据库索引、Redis缓存、CDN加速
+- **算法优化**:抽奖算法内存优化,性能提升90%+
+
+这个架构设计充分考虑了抽奖盲盒系统的业务特点和技术需求,在保证系统稳定性和性能的同时,也为未来的功能扩展和多端部署提供了良好的基础。
\ No newline at end of file