HaniBlindBox/docs/API接口文档.md
2026-01-03 12:44:56 +08:00

3052 lines
59 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 抽奖盲盒系统API接口文档
## 1. 接口概览
### 基础信息
- **基础URL**: `https://api.zfunbox.cn/api/`
- **API版本**: `v1`
- **数据格式**: `JSON`
- **字符编码**: `UTF-8`
- **认证方式**: `Token认证`
- **签名方式**: `MD5签名 + 时间戳防重放`
### 通用响应格式
```json
{
"status": 1,
"msg": "success",
"data": {},
"timestamp": 1640995200
}
```
### 状态码说明
| 状态码 | 说明 |
|--------|------|
| 1 | 请求成功 |
| 0 | 请求失败 |
| -1 | 未登录 |
| -9 | 需要绑定手机号 |
| 2222 | 特殊状态(如已领取等) |
### 请求签名机制
所有POST请求都需要包含以下参数
- `timestamp`: 当前时间戳
- `nonce`: 随机字符串
- `sign`: MD5签名
签名算法:
1. 将所有参数按键名排序
2. 拼接为 `key1=value1&key2=value2` 格式
3. 添加密钥:`host + timestamp`
4. 对整个字符串进行MD5加密
## 2. 用户认证接口
### 2.1 发送短信验证码
```http
POST /v2/account/sendSms
```
**请求参数:**
```json
{
"phone": "13800138000"
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| phone | string | 是 | 手机号 |
**响应示例:**
```json
{
"status": 1,
"msg": "验证码发送成功",
"data": 60
}
```
### 2.2 手机号登录
```http
POST /mobileLogin
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/mobileLogin`
**请求参数:**
```json
{
"mobile": "13800138000",
"code": "123456",
"pid": 0,
"clickId": ""
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| mobile | string | 是 | 手机号 |
| code | string | 是 | 验证码 |
| pid | int | 否 | 推荐人ID |
| clickId | string | 否 | 点击ID |
**响应示例:**
```json
{
"status": 1,
"msg": "登录成功",
"data": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
}
```
### 2.3 微信授权登录
```http
POST /login
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/login`
**请求参数:**
```json
{
"code": "wx_auth_code",
"pid": 0,
"clickId": ""
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| code | string | 是 | 微信授权code |
| pid | int | 否 | 推荐人ID |
| clickId | string | 否 | 点击ID |
**响应示例:**
```json
{
"status": 1,
"msg": "登录成功",
"data": "token_string"
}
```
### 2.4 获取用户信息
```http
POST /user
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/user`
**请求头:**
```
Authorization: Bearer {token}
```
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"userinfo": {
"id": 1001,
"phone": "138****8000",
"nickname": "用户昵称",
"avatar": "头像URL",
"money": "100.00",
"integral": "50.00",
"money2": "20.00",
"level": 1,
"mobile_is": 1
}
}
}
```
### 2.5 更新用户信息
```http
POST /update_userinfo
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/update_userinfo`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"nickname": "新昵称",
"headimg": "头像URL",
"imagebase": "Base64编码的图片数据"
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| nickname | string | 否 | 新昵称 |
| headimg | string | 否 | 头像URL直接使用URL |
| imagebase | string | 否 | Base64编码的图片数据优先使用 |
**响应示例:**
```json
{
"status": 1,
"msg": "更新成功"
}
```
### 2.6 注销账号
```http
POST /user_log_off
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/user_log_off`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"type": 0
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| type | int | 否 | 类型0-注销账号1-取消注销 |
**响应示例:**
```json
{
"status": 1,
"msg": "注销成功"
}
```
### 2.6 微信授权绑定手机号
```http
POST /login_bind_mobile
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/login_bind_mobile`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"code": "wx_phone_auth_code"
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| code | string | 是 | 微信获取手机号授权code |
**响应示例:**
```json
{
"status": 1,
"msg": "绑定成功",
"data": {
"token": "new_token_if_account_merged"
}
}
```
**说明:**
- 如果手机号已被其他用户绑定会进行账户合并返回新的token
- 如果手机号未被绑定直接绑定到当前用户token为null
### 2.7 验证码绑定手机号
```http
POST /bindMobile
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/bindMobile`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"mobile": "13800138000",
"code": "123456"
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| mobile | string | 是 | 手机号 |
| code | string | 是 | 短信验证码 |
**响应示例:**
```json
{
"status": 1,
"msg": "绑定成功",
"data": {
"token": "new_token_if_account_merged"
}
}
```
**说明:**
- 如果手机号已被其他用户绑定会进行账户合并返回新的token
- 如果手机号未被绑定直接绑定到当前用户token为null
### 2.8 记录用户登录
```http
GET|POST /login_record
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `GET|POST /api/login_record`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"device": "android",
"deviceInfo": "设备信息"
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| device | string | 否 | 设备类型 |
| deviceInfo | string | 否 | 设备信息 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"uid": "100001",
"nickname": "用户昵称",
"headimg": "头像URL"
}
}
}
```
## 3. 商品相关接口
### 3.1 获取首页商品列表
```http
POST /goods
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/goods_list`
**请求参数:**
```json
{
"page": 1,
"type": 0,
"keyword": ""
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 是 | 页码从1开始 |
| type | int | 否 | 商品类型0-全部1-一番赏2-无限赏等 |
| keyword | string | 否 | 搜索关键词 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"data": [
{
"id": 1001,
"title": "精美手办盲盒",
"imgurl": "商品图片URL",
"price": "29.90",
"type": 1,
"stock": 100,
"sale_stock": 50,
"status": 1,
"prize_num": 1,
"show_price": "29.9元/抽"
}
],
"total": 100,
"current_page": 1,
"last_page": 10
}
}
```
### 3.2 获取商品详情(一番赏)
```http
POST /goodsdetail
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/goods_detail`
**请求参数:**
```json
{
"goods_id": 1001,
"num": 0
}
```
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"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",
"imgurl": "奖品图片",
"price": "299.00",
"money": "150.00",
"real_pro": "0.05000",
"goods_type": 1,
"prize_code": "A001"
}
]
}
}
```
### 3.3 获取商品子奖品
```http
POST /goods_children
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/goods_children`
**请求参数:**
```json
{
"goods_id": 1001,
"goods_num": 0,
"goods_list_id": 2001
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| goods_id | int | 是 | 商品ID |
| goods_num | int | 否 | 箱号默认0 |
| goods_list_id | int | 是 | 奖品ID |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": [
{
"id": 3001,
"title": "子奖品名称",
"imgurl": "子奖品图片",
"price": "99.00",
"real_pro": "0.05000",
"shang_info": {
"id": 1,
"title": "A赏",
"color": "#FF0000"
}
}
]
}
```
### 3.4 获取商品扩展配置
```http
POST /goods_extend
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/goods_extend`
**请求参数:**
```json
{
"goods_id": 1001,
"goods_type": 1
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| goods_id | int | 是 | 商品ID |
| goods_type | int | 否 | 商品类型 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"pay_wechat": 1,
"pay_balance": 1,
"pay_currency": 1,
"pay_currency2": 1,
"dk_money": 1,
"dk_integral": 1,
"dk_money2": 1
}
}
```
### 3.5 获取箱号列表
```http
POST /goods_num_list
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/goods_num_list`
**请求参数:**
```json
{
"goods_id": 1001
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| goods_id | int | 是 | 商品ID |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": [
{
"start": 1,
"end": 10,
"text": "1-10"
},
{
"start": 11,
"end": 20,
"text": "11-20"
}
]
}
```
### 3.6 获取箱号详情
```http
POST /goods_num_detail
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/goods_num_detail`
**请求参数:**
```json
{
"goods_id": 1001,
"page_no": 0,
"sort": 0
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| goods_id | int | 是 | 商品ID |
| page_no | int | 否 | 页码默认0第一组 |
| sort | int | 否 | 排序0-箱号升序1-箱号降序2-余量降序 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": [
{
"num": 1,
"surplus_all_stock": 50,
"goods_list": [
{
"id": 2001,
"title": "奖品名称",
"imgurl": "奖品图片",
"surplus_stock": 5
}
]
}
]
}
```
### 3.7 获取无限赏商品详情
```http
POST /infinite_goodsdetail
```
**请求参数:**
```json
{
"goods_id": 1001
}
```
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"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
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/goods_prize_count`
**请求参数:**
```json
{
"goods_id": 1001
}
```
### 3.5 获取商品奖品内容
```http
POST /goodslist_content
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/goods_prize_content`
**请求参数:**
```json
{
"goods_id": 1001,
"num": 0
}
```
### 3.6 获取预售日历
```http
POST /yushourili
```
**请求参数:**
```json
{
"page": 1
}
```
## 4. 订单相关接口
### 4.1 计算订单金额(一番赏)
```http
POST /ordermoney
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/ordermoney`
**请求参数:**
```json
{
"goods_id": 1001,
"num": 0,
"prize_num": 1,
"coupon_id": "",
"use_money_is": 2,
"use_integral_is": 2,
"use_money2_is": 2
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| goods_id | int | 是 | 商品ID |
| num | int | 是 | 第几套 |
| prize_num | int | 是 | 抽奖数量 |
| coupon_id | string | 否 | 优惠券ID |
| use_money_is | int | 否 | 是否使用余额1-是2-否 |
| use_integral_is | int | 否 | 是否使用积分1-是2-否 |
| use_money2_is | int | 否 | 是否使用哈尼券1-是2-否 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"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 创建订单并支付(一番赏)
```http
POST /orderbuy
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/orderbuy`
**请求参数:**
```json
{
"goods_id": 1001,
"num": 0,
"prize_num": 1,
"coupon_id": "",
"use_money_is": 2,
"use_integral_is": 2,
"use_money2_is": 2
}
```
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"status": 1,
"order_num": "202401010001",
"res": {
"appId": "wx123456789",
"timeStamp": "1640995200",
"nonceStr": "abc123",
"package": "prepay_id=wx123456789",
"signType": "RSA",
"paySign": "signature"
}
}
}
```
### 4.3 无限赏订单金额计算
```http
POST /infinite_ordermoney
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/infinite_ordermoney`
**请求参数:**
```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
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/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
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/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
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/order_list`
**请求参数:**
```json
{
"page": 1,
"page_size": 20
}
```
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"data": [
{
"id": 10001,
"order_num": "202401010001",
"goods_title": "精美手办盲盒",
"goods_imgurl": "商品图片",
"order_total": "29.90",
"price": "29.90",
"prize_num": 1,
"status": 1,
"addtime": 1640995200,
"pay_time": 1640995300
}
],
"total": 50,
"current_page": 1,
"last_page": 3
}
}
```
### 4.7 获取订单详情
```http
POST /order_detail
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/order_detail`
**请求参数:**
```json
{
"order_num": "202401010001"
}
```
## 5. 抽奖相关接口
### 5.1 获取抽奖结果(一番赏)
```http
POST /prizeorderlog
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/prizeorderlog`
**请求参数:**
```json
{
"order_num": "202401010001"
}
```
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"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 获取无限赏抽奖结果
```http
POST /infinite_prizeorderlog
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/infinite_prizeorderlog`
**请求参数:**
```json
{
"order_num": "202401010001"
}
```
### 5.3 获取中奖记录
```http
POST /shang_log
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/goods_prize_logs`
**请求参数:**
```json
{
"goods_id": 1001,
"goods_num": 0,
"shang_id": 0,
"page": 1,
"page_size": 15
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| goods_id | int | 是 | 商品ID |
| goods_num | int | 否 | 箱号默认0 |
| shang_id | int | 否 | 赏品分类ID0=全部 |
| page | int | 否 | 页码默认1 |
| page_size | int | 否 | 每页数量默认15 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"category": [
{
"id": 1,
"title": "A赏",
"color": "#FF0000"
}
],
"data": [
{
"user_nickname": "用户***",
"user_headimg": "头像URL",
"goodslist_title": "限定手办A",
"goodslist_imgurl": "奖品图片",
"shang_info": {
"id": 1,
"title": "A赏",
"color": "#FF0000"
},
"addtime": "2024-01-01 10:30:00",
"luck_no": 1
}
],
"last_page": 10
}
}
```
### 5.4 获取无限赏中奖记录
```http
POST /infinite_shang_log
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/infinite_shang_log`
**请求参数:**
```json
{
"goods_id": 1001,
"shang_id": 0,
"is_mibao": 0,
"page": 1,
"page_size": 100
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| goods_id | int | 是 | 商品ID |
| shang_id | int | 否 | 赏品等级ID0表示全部 |
| is_mibao | int | 否 | 是否秘宝池0=否1=是 |
| page | int | 否 | 页码默认1 |
| page_size | int | 否 | 每页数量默认100 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"category": [
{"shang_id": 0, "shang_title": "全部"},
{"shang_id": 34, "shang_title": "A赏"}
],
"data": [
{
"id": 1,
"user_id": 100,
"goodslist_title": "奖品名称",
"goodslist_imgurl": "https://example.com/image.jpg",
"shang_id": 34,
"shang_title": "A赏",
"shang_color": "#FF0000",
"addtime": "2025-01-03 10:30:00",
"luck_no": 1,
"doubling": 1,
"is_lingzhu": 0,
"user_info": {
"nickname": "用***户",
"headimg": "https://example.com/avatar.jpg"
}
}
],
"last_page": 10,
"total": 100
}
}
```
### 5.5 获取用户抽奖记录(盒子抽奖记录)
```http
POST /infinite_prizerecords
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/infinite_prizerecords`
**请求参数:**
```json
{
"goods_id": 1001,
"page": 1,
"page_size": 100
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| goods_id | int | 是 | 商品ID |
| page | int | 否 | 页码默认1 |
| page_size | int | 否 | 每页数量默认100 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"data": [
{
"user_id": 10001,
"goodslist_title": "限定手办A",
"goodslist_imgurl": "https://example.com/prize.jpg",
"addtime": "2025-01-03 10:30:00"
}
],
"current_page": 1,
"last_page": 1,
"per_page": 100,
"total": 1
}
}
```
### 5.6 使用道具卡抽奖
```http
POST /item_card_chou
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/item_card_chou`
**请求参数:**
```json
{
"goods_id": 1001,
"order_list_ids": "1,2,3"
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| goods_id | int | 是 | 商品ID |
| order_list_ids | string | 是 | 要重抽的订单项ID列表逗号分隔 |
**响应示例:**
```json
{
"status": 1,
"msg": "重抽成功",
"data": {
"status": 0,
"order_num": "MH_20260103120000001234",
"prizes": [
{
"id": 10001,
"title": "限定手办A",
"img_url": "奖品图片",
"shang_id": 34,
"shang_title": "A赏",
"shang_color": "#FF0000",
"price": "299.00",
"sc_money": "150.00",
"prize_code": "P202601031200001234",
"luck_no": 1
}
],
"remaining_cards": 2
}
}
```
## 6. 盒柜(仓库)相关接口
### 6.1 获取仓库首页
```http
POST /warehouse_index
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/warehouse_index`
**请求参数:**
```json
{
"page": 1,
"status": 0
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 是 | 页码 |
| status | int | 否 | 状态0-待选择1-回收2-发货3-集市 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"data": [
{
"id": 20001,
"goodslist_title": "限定手办A",
"goodslist_imgurl": "奖品图片",
"goodslist_price": "299.00",
"goodslist_money": "150.00",
"status": 0,
"addtime": 1640995300
}
]
}
}
```
### 6.2 回收奖品
```http
POST /warehouse_recovery
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/warehouse_recovery`
**请求参数:**
```json
{
"order_list_ids": "20001,20002"
}
```
### 6.3 发货奖品
```http
POST /warehouse_send
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/warehouse_send`
**请求参数:**
```json
{
"order_list_ids": "20001,20002",
"name": "张三",
"mobile": "13800138000",
"address": "北京市朝阳区xxx街道xxx号",
"message": "请小心轻放"
}
```
### 6.4 确认发货
```http
POST /warehouse_send_confirm
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/warehouse_send_confirm`
**请求参数:**
```json
{
"id": 70001
}
```
### 6.5 获取发货记录
```http
POST /warehouse_send_record
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/warehouse_send_record`
**请求参数:**
```json
{
"page": 1
}
```
### 6.6 获取发货记录详情
```http
POST /warehouse_send_record_detail
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/warehouse_send_record_detail`
**请求参数:**
```json
{
"id": 70001
}
```
### 6.7 获取回收记录
```http
POST /warehouse_recovery_record
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/warehouse_recovery_record`
**请求参数:**
```json
{
"page": 1
}
```
### 6.8 获取物流信息
```http
POST /warehouse_order_logistics
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/warehouse_order_logistics`
**请求参数:**
```json
{
"id": 70001
}
```
## 7. 财务相关接口
### 7.1 获取资金明细
```http
POST /profitMoney
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/profitMoney`
**请求参数:**
```json
{
"page": 1,
"type": 0
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 是 | 页码 |
| type | int | 否 | 类型0-全部1-收入2-支出3-提现 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"list": [
{
"changeMoney": "+150.00",
"content": "背包回收",
"addTime": "2024-01-01 10:30:00"
}
],
"lastPage": 10,
"currentPage": 1,
"total": 100
}
}
```
### 7.2 获取吧唧币明细
```http
POST /profitIntegral
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/profitIntegral`
**请求参数:**
```json
{
"page": 1,
"type": 0
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 是 | 页码 |
| type | int | 否 | 类型0-全部1-收入2-支出 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"list": [
{
"changeMoney": "+50.00",
"content": "任务奖励",
"addTime": "2024-01-01 10:30:00"
}
],
"lastPage": 5,
"currentPage": 1,
"total": 50
}
}
```
### 7.3 获取积分明细
```http
POST /profitScore
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/profitScore`
**请求参数:**
```json
{
"page": 1,
"type": 0
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 是 | 页码 |
| type | int | 否 | 类型0-全部1-收入2-支出 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"list": [
{
"changeMoney": "+20.00",
"content": "签到奖励",
"addTime": "2024-01-01 10:30:00"
}
],
"lastPage": 3,
"currentPage": 1,
"total": 30
}
}
```
### 7.4 获取支付明细
```http
POST /profitPay
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/profitPay`
**请求参数:**
```json
{
"page": 1
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 是 | 页码 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"list": [
{
"changeMoney": "-29.90",
"content": "购买商品",
"addTime": "2024-01-01 10:30:00"
}
],
"lastPage": 5,
"currentPage": 1,
"total": 50
}
}
```
### 7.4 获取优惠券列表
```http
POST /coupon_list
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/coupon_list`
**请求参数:**
```json
{
"page": 1,
"status": 1,
"limit": 15
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 是 | 页码 |
| status | int | 否 | 状态1-未使用2-已分享 |
| limit | int | 否 | 每页数量默认15 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"list": [
{
"id": 60001,
"status": 1,
"level": 3,
"levelText": "高级赏券",
"levelImg": "/storage/coupon/coupon_c.png",
"title": "高级赏券",
"num": "500",
"klNum": 6,
"klNum2": 6,
"yiLing": 0
}
],
"lastPage": 10,
"yCount": 5,
"zCount": 50,
"userIntegral": 1000.00,
"keHcCount": 20,
"sunHao": "10%"
}
}
```
### 7.4.1 获取优惠券详情
```http
POST /coupon_detail
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/coupon_detail`
**请求参数:**
```json
{
"id": 60001
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | int | 是 | 优惠券ID |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"id": 60001,
"level": 3,
"levelText": "高级赏券",
"levelImg": "/storage/coupon/coupon_c.png",
"shareTime": "2024-01-01 10:30:00",
"userId": 1001,
"num": "500",
"klNum2": 6,
"own2": 100.00,
"ylCount": 3,
"ylIntegralCount": 150.00,
"shareUserNickname": "用户昵称",
"shareUserHeadimg": "头像URL",
"ylList": [
{
"userId": 1002,
"nickname": "领取者昵称",
"headimg": "头像URL",
"lNum": 50.00,
"addTime": "2024-01-01 11:00:00",
"luckyKing": 1
}
]
}
}
```
### 7.5 领取优惠券
```http
POST /coupon_ling
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/coupon_ling`
**请求参数:**
```json
{
"id": 60001
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | int | 是 | 优惠券ID |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"amount": 50.00,
"luckyKing": false
}
}
```
**错误码说明:**
| 错误码 | 说明 |
|--------|------|
| 2222 | 请勿开启自己的劵 / 你已经领取过了 / 来晚了, 已经被人领完了 |
| 0 | 每天最多领取N次 |
### 7.6 分享优惠券
```http
POST /coupon_share
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/coupon_share`
**请求参数:**
```json
{
"id": 60001
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | int | 是 | 优惠券ID |
**响应示例:**
```json
{
"status": 1,
"msg": "分享成功"
}
```
### 7.7 合成优惠券
```http
POST /coupon_synthesis
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/coupon_synthesis`
**请求参数:**
```json
{
"couponIds": "60001,60002,60003"
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| couponIds | string | 是 | 优惠券ID列表逗号分隔最多20个 |
**响应示例:**
```json
{
"status": 1,
"msg": "合成成功"
}
```
**错误说明:**
- 特级、终极赏券不能合成
- 最多只能20个合成
### 7.8 计算优惠券合成
```http
POST /coupon_ji_suan
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/coupon_ji_suan`
**请求参数:**
```json
{
"couponIds": "60001,60002,60003"
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| couponIds | string | 是 | 优惠券ID列表逗号分隔最多20个 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"coupon": {
"title": "高级赏券",
"level": 3
},
"sumNum": 1000.00,
"shNum": 900.00
}
}
```
**说明:**
- sumNum: 原始总价值
- shNum: 合成后价值扣除10%损耗)
## 8. 福利相关接口
### 8.1 获取福利屋列表
```http
POST /welfare_house_list
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/welfare_house_list`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"type": 1,
"page": 1,
"limit": 15
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| type | int | 否 | 类型1-进行中3-已结束默认1 |
| page | int | 否 | 页码默认1 |
| limit | int | 否 | 每页数量默认15 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"list": [
{
"id": 1001,
"title": "每日福利",
"imgurl": "福利图片",
"price": 0.00,
"type": 15,
"newIs": 0,
"quanjuXiangou": 0,
"choujiangXianzhi": 0,
"goodsDescribe": "福利描述",
"isOpen": 0,
"unlockAmount": 0.00,
"joinCount": 100,
"flwStartTime": "2024-01-01 00:00:00",
"flwEndTime": "2024-01-31 23:59:59",
"openTime": "2024-02-01 10:00:00",
"goodslist": [
{
"title": "奖品名称",
"imgurl": "奖品图片",
"stock": 10,
"price": 99.00,
"scMoney": 50.00
}
]
}
],
"lastPage": 10,
"total": 100
}
}
```
### 8.2 获取福利屋详情
```http
POST /fuliwu_detail
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/fuliwu_detail`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"goodsId": 1001
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| goodsId | int | 是 | 商品ID |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"goods": {
"id": 1001,
"title": "福利屋活动",
"imgurl": "商品图片",
"imgurlDetail": "详情图片",
"price": 0.00,
"type": 15,
"newIs": 0,
"quanjuXiangou": 0,
"choujiangXianzhi": 0,
"goodsDescribe": "活动描述",
"isOpen": 0,
"unlockAmount": 100.00,
"sort": 0,
"flwStartTime": "2024-01-01 00:00",
"flwEndTime": "2024-01-31 23:59",
"openTime": "2024-02-01 10:00"
},
"goodslist": [
{
"id": 2001,
"title": "奖品名称",
"imgurl": "奖品图片",
"imgurlDetail": "奖品详情图",
"stock": 10,
"price": 99.00,
"scMoney": 50.00,
"shangId": 1,
"surplusStock": 5,
"sort": 0,
"shangTitle": "特等奖",
"shangColor": "#FF0000"
}
],
"joinCount": 100,
"currentTime": "2024-01-15 10:30:00",
"userCount": 5,
"userConsumption": {
"totalAmount": 500.00,
"orderCount": 10
},
"status": "ongoing",
"statusText": "进行中"
}
}
```
**状态说明:**
| status | statusText | 说明 |
|--------|------------|------|
| waiting | 即将开始 | 当前时间 < 开始时间 |
| ongoing | 进行中 | 开始时间 <= 当前时间 < 结束时间 |
| ended | 已结束等待开奖 | 结束时间 <= 当前时间 < 开奖时间 |
| to_open | 待开奖 | 当前时间 >= 开奖时间 且 未开奖 |
| opened | 已开奖 | 当前时间 >= 开奖时间 且 已开奖 |
### 8.3 获取福利屋参与者
```http
POST /fuliwu_participants
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/fuliwu_participants`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"goodsId": 1001,
"page": 1,
"limit": 15
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| goodsId | int | 是 | 商品ID |
| page | int | 否 | 页码默认1 |
| limit | int | 否 | 每页数量默认15 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": [
{
"nickname": "用户昵称",
"avatar": "头像URL",
"createTime": "2024-01-15 10:30"
}
]
}
```
### 8.4 获取福利屋开奖记录
```http
POST /fuliwu_records
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/fuliwu_records`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"goodsId": 1001,
"page": 1,
"limit": 15
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| goodsId | int | 是 | 商品ID |
| page | int | 否 | 页码默认1 |
| limit | int | 否 | 每页数量默认15 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": [
{
"nickname": "用户昵称",
"avatar": "头像URL",
"goodslistTitle": "奖品名称",
"shangId": 1,
"createTime": "2024-01-15 10:30"
}
]
}
```
### 8.5 获取用户福利屋参与记录
```http
GET /fuliwu_user_records
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `GET /api/fuliwu_user_records`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 否 | 页码默认1 |
| limit | int | 否 | 每页数量默认15 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": [
{
"goodsId": 1001,
"goodsTitle": "福利屋活动",
"goodslistTitle": "奖品名称",
"shangId": 1,
"createTime": "2024-01-15 10:30"
}
]
}
```
### 8.6 获取用户福利屋中奖记录
```http
GET /fuliwu_user_winning_records
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `GET /api/fuliwu_user_winning_records`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 否 | 页码默认1 |
| limit | int | 否 | 每页数量默认15 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": [
{
"goodsId": 1001,
"goodsTitle": "福利屋活动",
"goodslistTitle": "奖品名称",
"shangId": 1,
"createTime": "2024-02-01 10:00"
}
]
}
```
### 8.7 获取任务列表
```http
POST /task_list
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/task_list`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"type": 1
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| type | int | 否 | 任务类型1-每日任务2-每周任务默认1 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"taskList": [
{
"id": 1,
"type": 1,
"cate": 1,
"title": "邀请1位好友注册",
"number": 1,
"zNumber": 10,
"isComplete": 0,
"percentage": 0,
"ywcCount": 0
},
{
"id": 2,
"type": 1,
"cate": 2,
"title": "完成1次抽赏",
"number": 1,
"zNumber": 5,
"isComplete": 1,
"percentage": 100,
"ywcCount": 1
}
]
}
}
```
**字段说明:**
| 字段 | 说明 |
|------|------|
| id | 任务ID |
| type | 任务类型1-每日2-每周 |
| cate | 任务分类1-邀请2-抽赏 |
| title | 任务标题 |
| number | 目标完成数量 |
| zNumber | 奖励欧气值 |
| isComplete | 完成状态0-未完成1-已完成2-已领取 |
| percentage | 完成百分比(0-100) |
| ywcCount | 已完成次数 |
### 8.8 领取任务奖励
```http
POST /ling_task
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/ling_task`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"taskListId": 1001
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| taskListId | int | 是 | 任务ID |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"reward": 10,
"currentOuQi": 150
}
}
```
**字段说明:**
| 字段 | 说明 |
|------|------|
| reward | 本次获得的欧气值奖励 |
| currentOuQi | 当前欧气值总数 |
**错误说明:**
- 任务不存在:返回 "任务不存在"
- 任务未完成:返回 "任务未完成"
- 已领取过:返回 "你已经领取过了"
## 9. 系统配置接口
### 9.1 获取全局配置
```http
GET /config
```
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"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 /getAdvert
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| type_id | int | 否 | 类型1-首页轮播2-抽卡机轮播 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": [
{
"id": 1,
"imgurl": "轮播图URL",
"url": "跳转链接",
"ttype": 2,
"goods_id": 1001
}
]
}
```
### 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
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/addCollect`
**请求参数:**
```json
{
"goods_id": 1001,
"goods_num": 0
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| goods_id | int | 是 | 商品ID |
| goods_num | int | 否 | 箱号默认0 |
**响应示例:**
```json
{
"status": 1,
"msg": "操作成功"
}
```
### 9.7 收藏列表
```http
POST /listCollect
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/listCollect`
**请求参数:**
```json
{
"type": 0,
"page": 1,
"page_size": 100
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| type | int | 否 | 商品类型0=全部 |
| page | int | 否 | 页码默认1 |
| page_size | int | 否 | 每页数量默认100 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"data": [
{
"id": 1,
"goods_id": 1001,
"type": 1,
"num": 0,
"goods_title": "商品标题",
"goods_price": "99.00",
"imgurl": "图片URL",
"stock": 100,
"surplus_stock": 50
}
],
"last_page": 1
}
}
```
### 9.8 删除收藏
```http
POST /delCollect
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/delCollect`
**请求参数:**
```json
{
"id": 1
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | int | 是 | 收藏记录ID |
**响应示例:**
```json
{
"status": 1,
"msg": "删除成功"
}
```
## 10. 其他功能接口
### 10.1 获取排行榜
```http
GET /getRankList
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| type | string | 是 | 排行榜类型invite-邀请榜consume-消费榜 |
### 10.1.1 获取周榜
```http
GET /rank_week
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `GET /api/rank_week`
**请求头:**
```
Authorization: Bearer {token}
```
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"date": "01月01日-01月07日",
"end_date": 1704643199,
"my_rank": {
"my_rank": 5,
"my_prize_title": "限定手办",
"my_prize_imgurl": "奖品图片URL",
"my_order_total": 1500.00,
"my_nickname": "用户昵称",
"my_headimg": "头像URL"
},
"data": [
{
"rank": 1,
"user_id": 1001,
"nickname": "用户昵称",
"headimg": "头像URL",
"order_total": 5000.00,
"prize_title": "特等奖",
"prize_imgurl": "奖品图片URL"
}
]
}
}
```
**字段说明:**
| 字段 | 说明 |
|------|------|
| date | 周榜日期范围 |
| end_date | 周榜结束时间戳 |
| my_rank | 当前用户排名信息(未上榜时为"暂未上榜" |
| my_prize_title | 当前用户对应奖品标题未上榜时为0 |
| my_prize_imgurl | 当前用户对应奖品图片未上榜时为0 |
| my_order_total | 当前用户本周消费金额 |
| data | 排行榜前30名列表 |
### 10.1.2 获取月榜
```http
GET /rank_month
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `GET /api/rank_month`
**请求头:**
```
Authorization: Bearer {token}
```
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"date": "01月01日-01月31日",
"end_date": 1706716799,
"my_rank": {
"my_rank": "暂未上榜",
"my_prize_title": 0,
"my_prize_imgurl": 0,
"my_order_total": 500.00,
"my_nickname": "用户昵称",
"my_headimg": "头像URL"
},
"data": [
{
"rank": 1,
"user_id": 1001,
"nickname": "用户昵称",
"headimg": "头像URL",
"order_total": 15000.00,
"prize_title": "月度特等奖",
"prize_imgurl": "奖品图片URL"
}
]
}
}
```
**字段说明:**
| 字段 | 说明 |
|------|------|
| date | 月榜日期范围 |
| end_date | 月榜结束时间戳 |
| my_rank | 当前用户排名信息(未上榜时为"暂未上榜" |
| my_prize_title | 当前用户对应奖品标题未上榜时为0 |
| my_prize_imgurl | 当前用户对应奖品图片未上榜时为0 |
| my_order_total | 当前用户本月消费金额 |
| data | 排行榜前30名列表 |
### 10.2 获取邀请信息
```http
POST /invitation
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/invitation`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"page": 1
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 否 | 页码默认1 |
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"share_title": "分享标题",
"share_image": "",
"count": 10,
"money": 150.00,
"data": [
{
"id": 1002,
"nickname": "被邀请用户",
"headimg": "头像URL",
"pid": 1001,
"addtime": "2024-01-01 10:30:00",
"commission_money": 15.00
}
],
"last_page": 1
}
}
```
**字段说明:**
| 字段 | 说明 |
|------|------|
| share_title | 分享标题 |
| share_image | 分享图片URL |
| count | 总邀请人数 |
| money | 总奖励金额 |
| data | 邀请记录列表 |
| last_page | 最后一页页码 |
### 10.3 绑定邀请码
```http
POST /bind_invite_code
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/bind_invite_code`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"invite_code": "ABC123"
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| invite_code | string | 是 | 邀请码邀请人的UID |
**响应示例:**
```json
{
"status": 1,
"msg": "绑定成功"
}
```
**错误说明:**
- 用户不存在:返回 "用户不存在"
- 已绑定过:返回 "您已绑定过邀请码"
- 超过24小时返回 "新用户注册24小时内才可以绑定邀请码"
- 绑定自己:返回 "不能绑定自己"
- 邀请码不存在:返回 "邀请码不存在"
### 10.4 获取VIP列表
```http
POST /vip_list
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/vip_list`
**请求头:**
```
Authorization: Bearer {token}
```
**响应示例:**
```json
{
"status": 1,
"msg": "success",
"data": {
"userinfo": {
"nickname": "用户昵称",
"headimg": "头像URL",
"vip": 2,
"upgrade_money": "500.00",
"last_vip": 3,
"jin_du": 60.5,
"notice": "VIP2会员"
},
"data": [
{
"id": 1,
"level": 1,
"title": "VIP1",
"imgurl": "",
"condition": 100,
"discount": 0,
"notice": "VIP1会员"
},
{
"id": 2,
"level": 2,
"title": "VIP2",
"imgurl": "",
"condition": 500,
"discount": 0,
"notice": "VIP2会员"
}
]
}
}
```
### 10.5 使用兑换码
```http
POST /used
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/used`
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"code": "EXCHANGE123"
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| code | string | 是 | 兑换码 |
**响应示例:**
```json
{
"status": 1,
"msg": "兑换成功获得100吧唧币",
"data": {
"success": true,
"message": "兑换成功获得100吧唧币",
"rewardType": "integral",
"rewardAmount": 100.00
}
}
```
**字段说明:**
| 字段 | 说明 |
|------|------|
| success | 是否成功 |
| message | 提示消息 |
| rewardType | 奖励类型money=余额, integral=吧唧币, score=积分 |
| rewardAmount | 奖励数量 |
**错误说明:**
- 兑换码无效:返回 "兑换码无效"
- 兑换码已被使用:返回 "兑换码已被使用"
- 兑换码已过期:返回 "兑换码已过期"
## 11. 错误码说明
| 错误码 | 说明 |
|--------|------|
| 1 | 请求成功 |
| 0 | 请求失败 |
| -1 | 用户未登录 |
| -9 | 需要绑定手机号 |
| 2222 | 特殊状态(如已领取、已完成等) |
## 12. UniApp小程序接口调用示例
### 12.1 请求封装使用
```javascript
// 在小程序页面中调用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);
}
},
// 创建订单并支付
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);
}
}
},
// 获取抽奖结果
async getPrizeResult(orderNum) {
const res = await this.$request.post('prizeorderlog', {
order_num: orderNum
});
if (res.status === 1) {
// 显示中奖结果
this.showPrizeResult(res.data);
}
}
}
}
```
### 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文档基于小程序中实际使用的接口包含了完整的请求参数、响应格式和使用示例更贴近实际开发需求。
## 13. 支付回调接口
### 13.1 微信支付回调
```http
POST /api/notify/order_notify
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/notify/order_notify`
**说明:**
此接口由微信支付服务器调用,用于通知支付结果。不需要前端调用。
**请求格式:** XML
**请求示例:**
```xml
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wx1234567890]]></appid>
<mch_id><![CDATA[1234567890]]></mch_id>
<nonce_str><![CDATA[abc123]]></nonce_str>
<sign><![CDATA[SIGN_STRING]]></sign>
<result_code><![CDATA[SUCCESS]]></result_code>
<openid><![CDATA[user_openid]]></openid>
<trade_type><![CDATA[JSAPI]]></trade_type>
<total_fee>100</total_fee>
<out_trade_no><![CDATA[ORDER_NO]]></out_trade_no>
<attach><![CDATA[order_yfs]]></attach>
<time_end><![CDATA[20240101120000]]></time_end>
</xml>
```
**attach参数说明:**
| attach值 | 订单类型 | 说明 |
|----------|---------|------|
| user_recharge | 余额充值 | 用户充值订单 |
| order_yfs | 一番赏订单 | 一番赏抽奖订单 |
| order_lts | 擂台赏订单 | 擂台赏抽奖订单 |
| order_zzs | 转转赏订单 | 转转赏抽奖订单 |
| order_flw | 福利屋订单 | 福利屋抽奖订单 |
| order_scs | 商城赏订单 | 商城赏抽奖订单 |
| order_wxs | 无限赏订单 | 无限赏抽奖订单 |
| order_fbs | 翻倍赏订单 | 翻倍赏抽奖订单 |
| order_ckj | 抽卡机订单 | 抽卡机抽奖订单 |
| order_list_send | 发货运费 | 背包发货运费订单 |
**响应格式:** XML
**响应示例:**
```xml
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>
```
**处理流程:**
1. 验证签名确保数据安全
2. 检查订单是否已处理(幂等性)
3. 根据attach类型路由到对应处理方法
4. 更新订单状态、扣减用户资产
5. 触发抽奖逻辑(如适用)
6. 返回XML响应给微信
### 13.2 微信支付统一下单
```http
POST /api/pay
```
**迁移状态**: ✅ 已迁移到 .NET 8
**新接口地址**: `POST /api/pay`
**说明:**
创建微信支付订单,返回支付参数供前端调起微信支付。
**请求头:**
```
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"order_no": "YFS_20240101120000_1001",
"amount": 9.90,
"body": "一番赏抽奖",
"attach": "order_yfs",
"open_id": ""
}
```
**参数说明:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| order_no | string | 是 | 订单号 |
| amount | decimal | 是 | 支付金额(单位:元) |
| body | string | 否 | 商品描述,默认"商品购买" |
| attach | string | 是 | 订单类型见attach参数说明 |
| open_id | string | 否 | 用户OpenId不传则从用户信息获取 |
**响应示例(成功):**
```json
{
"status": 1,
"msg": "success",
"data": {
"appId": "wx1234567890",
"timeStamp": "1640995200",
"nonceStr": "abc123def456",
"package": "prepay_id=wx123456789",
"signType": "MD5",
"paySign": "SIGN_STRING",
"is_weixin": 1
}
}
```
**响应示例(失败):**
```json
{
"status": 0,
"msg": "订单号不能为空",
"data": null
}
```
**前端调起支付示例:**
```javascript
// 获取支付参数
const payResult = await request({
url: '/api/pay',
method: 'POST',
data: {
order_no: orderNo,
amount: totalPrice,
body: '一番赏抽奖',
attach: 'order_yfs'
}
});
if (payResult.status === 1 && payResult.data) {
// 调起微信支付
wx.requestPayment({
timeStamp: payResult.data.timeStamp,
nonceStr: payResult.data.nonceStr,
package: payResult.data.package,
signType: payResult.data.signType,
paySign: payResult.data.paySign,
success: function(res) {
// 支付成功
},
fail: function(res) {
// 支付失败
}
});
}
```