# 会员管理模块移动端接口文档

> **模块名称**：business-member  
> **版本**：3.0.1  
> **更新日期**：2026-01-24  
> **基础路径**：`/mobile/模块名/类名`  
> **适用端**：APP、小程序、H5

---

## 一、接口规范

### 1.1 URL 格式规范

```
/mobile/模块名/类名/操作
```

**说明**：
- **模块名**：业务模块标识，如 `member`
- **类名**：实体类名（驼峰命名），如 `member`、`auth`
- 完整路径示例：`/mobile/member/auth/loginByMobile`

### 1.2 请求规范

| 项目 | 规范 |
|------|------|
| **Content-Type** | `application/json;charset=UTF-8` |
| **Authorization** | `Bearer {token}`（登录后必传） |
| **X-Device-Id** | 设备唯一标识（建议传递） |
| **X-Platform** | 平台标识：`APP`、`MINI`、`H5` |
| **X-Version** | 客户端版本号 |

### 1.3 响应格式

```json
{
    "code": 200,
    "msg": "success",
    "data": {},
    "requestId": "链路追踪ID"
}
```

### 1.4 状态码说明

| 状态码 | 说明 |
|--------|------|
| 200 | 成功 |
| 400 | 参数错误 |
| 401 | 未登录/Token过期 |
| 403 | 无权限 |
| 404 | 资源不存在 |
| 500 | 服务器错误 |
| 1001 | 验证码错误 |
| 1002 | 验证码已过期 |
| 1003 | 账号已被禁用 |
| 1004 | 账号不存在 |
| 1005 | 密码错误 |

---

## 二、登录认证接口（Auth）

> **模块路径**：`/mobile/member/auth`

### 2.1 发送短信验证码

**接口地址**：`POST /mobile/member/auth/sendSmsCode`

**请求参数**：

```json
{
    "mobile": "13812345678",
    "scene": "LOGIN"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| mobile | String | 是 | 手机号 |
| scene | String | 是 | 场景：`LOGIN`-登录、`REGISTER`-注册、`RESET_PWD`-重置密码、`BIND`-绑定手机 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "验证码已发送",
    "data": {
        "expireSeconds": 300
    },
    "requestId": "abc123"
}
```

---

### 2.2 手机验证码登录

**接口地址**：`POST /mobile/member/auth/loginByMobile`

**请求参数**：

```json
{
    "mobile": "13812345678",
    "smsCode": "123456",
    "inviteCode": "ABC123",
    "deviceId": "device_xxx",
    "platform": "APP"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| mobile | String | 是 | 手机号 |
| smsCode | String | 是 | 短信验证码 |
| inviteCode | String | 否 | 邀请码（新用户首次登录时可传） |
| deviceId | String | 否 | 设备ID |
| platform | String | 否 | 平台：`APP`、`MINI`、`H5` |

**响应示例**：

```json
{
    "code": 200,
    "msg": "登录成功",
    "data": {
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
        "tokenType": "Bearer",
        "expiresIn": 604800,
        "refreshToken": "refresh_token_xxx",
        "isNewUser": false,
        "memberId": "1234567890",
        "memberNo": "M202601240001",
        "nickname": "用户昵称",
        "avatar": "https://xxx.com/avatar.jpg",
        "mobile": "138****5678"
    },
    "requestId": "abc123"
}
```

---

### 2.3 账号密码登录

**接口地址**：`POST /mobile/member/auth/loginByPassword`

**请求参数**：

```json
{
    "account": "13812345678",
    "password": "加密后的密码",
    "deviceId": "device_xxx",
    "platform": "APP"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| account | String | 是 | 账号（手机号/邮箱） |
| password | String | 是 | 密码（RSA加密后的密文） |
| deviceId | String | 否 | 设备ID |
| platform | String | 否 | 平台 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "登录成功",
    "data": {
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
        "tokenType": "Bearer",
        "expiresIn": 604800,
        "refreshToken": "refresh_token_xxx",
        "memberId": "1234567890",
        "memberNo": "M202601240001",
        "nickname": "用户昵称",
        "avatar": "https://xxx.com/avatar.jpg",
        "mobile": "138****5678"
    },
    "requestId": "abc123"
}
```

---

### 2.4 微信登录（小程序）

**接口地址**：`POST /mobile/member/auth/loginByWechatMini`

**请求参数**：

```json
{
    "code": "wx_code_xxx",
    "encryptedData": "加密数据",
    "iv": "初始向量",
    "inviteCode": "ABC123"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| code | String | 是 | 微信登录code（wx.login获取） |
| encryptedData | String | 否 | 加密用户数据（获取手机号时需要） |
| iv | String | 否 | 加密初始向量 |
| inviteCode | String | 否 | 邀请码 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "登录成功",
    "data": {
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
        "tokenType": "Bearer",
        "expiresIn": 604800,
        "refreshToken": "refresh_token_xxx",
        "isNewUser": true,
        "needBindMobile": true,
        "memberId": "1234567890",
        "memberNo": "M202601240001",
        "nickname": "微信用户",
        "avatar": "https://xxx.com/avatar.jpg",
        "openid": "oXXXX"
    },
    "requestId": "abc123"
}
```

---

### 2.5 微信登录（APP）

**接口地址**：`POST /mobile/member/auth/loginByWechatApp`

**请求参数**：

```json
{
    "code": "wx_oauth_code",
    "inviteCode": "ABC123"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| code | String | 是 | 微信OAuth授权code |
| inviteCode | String | 否 | 邀请码 |

**响应示例**：同 2.4

---

### 2.6 微信公众号登录

**接口地址**：`POST /mobile/member/auth/loginByWechatMp`

**请求参数**：

```json
{
    "code": "wx_oauth_code",
    "inviteCode": "ABC123"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| code | String | 是 | 微信网页授权code |
| inviteCode | String | 否 | 邀请码 |

**响应示例**：同 2.4

---

### 2.7 支付宝登录

**接口地址**：`POST /mobile/member/auth/loginByAlipay`

**请求参数**：

```json
{
    "authCode": "alipay_auth_code",
    "inviteCode": "ABC123"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| authCode | String | 是 | 支付宝授权码 |
| inviteCode | String | 否 | 邀请码 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "登录成功",
    "data": {
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
        "tokenType": "Bearer",
        "expiresIn": 604800,
        "isNewUser": false,
        "needBindMobile": false,
        "memberId": "1234567890",
        "nickname": "支付宝用户",
        "avatar": "https://xxx.com/avatar.jpg"
    },
    "requestId": "abc123"
}
```

---

### 2.8 苹果登录（Sign in with Apple）

**接口地址**：`POST /mobile/member/auth/loginByApple`

**请求参数**：

```json
{
    "identityToken": "apple_identity_token",
    "authorizationCode": "apple_auth_code",
    "fullName": {
        "familyName": "张",
        "givenName": "三"
    },
    "inviteCode": "ABC123"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| identityToken | String | 是 | Apple Identity Token |
| authorizationCode | String | 是 | Apple Authorization Code |
| fullName | Object | 否 | 用户姓名（首次授权时返回） |
| inviteCode | String | 否 | 邀请码 |

**响应示例**：同 2.4

---

### 2.9 华为账号登录

**接口地址**：`POST /mobile/member/auth/loginByHuawei`

**请求参数**：

```json
{
    "authCode": "huawei_auth_code",
    "inviteCode": "ABC123"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| authCode | String | 是 | 华为授权码 |
| inviteCode | String | 否 | 邀请码 |

**响应示例**：同 2.4

---

### 2.10 QQ登录

**接口地址**：`POST /mobile/member/auth/loginByQQ`

**请求参数**：

```json
{
    "accessToken": "qq_access_token",
    "openId": "qq_openid",
    "inviteCode": "ABC123"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| accessToken | String | 是 | QQ AccessToken |
| openId | String | 是 | QQ OpenID |
| inviteCode | String | 否 | 邀请码 |

**响应示例**：同 2.4

---

### 2.11 微博登录

**接口地址**：`POST /mobile/member/auth/loginByWeibo`

**请求参数**：

```json
{
    "accessToken": "weibo_access_token",
    "uid": "weibo_uid",
    "inviteCode": "ABC123"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| accessToken | String | 是 | 微博AccessToken |
| uid | String | 是 | 微博UID |
| inviteCode | String | 否 | 邀请码 |

**响应示例**：同 2.4

---

### 2.12 抖音登录

**接口地址**：`POST /mobile/member/auth/loginByDouyin`

**请求参数**：

```json
{
    "code": "douyin_auth_code",
    "inviteCode": "ABC123"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| code | String | 是 | 抖音授权码 |
| inviteCode | String | 否 | 邀请码 |

**响应示例**：同 2.4

---

### 2.13 一键登录（本机号码）

**接口地址**：`POST /mobile/member/auth/loginByOneClick`

**请求参数**：

```json
{
    "token": "运营商一键登录token",
    "operator": "CMCC",
    "inviteCode": "ABC123"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| token | String | 是 | 运营商返回的token |
| operator | String | 是 | 运营商：`CMCC`-移动、`CUCC`-联通、`CTCC`-电信 |
| inviteCode | String | 否 | 邀请码 |

**响应示例**：同 2.2

---

### 2.14 刷新Token

**接口地址**：`POST /mobile/member/userCenter/refreshToken`

**请求参数**：

```json
{
    "refreshToken": "refresh_token_xxx"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| refreshToken | String | 是 | 刷新令牌 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "刷新成功",
    "data": {
        "token": "new_access_token",
        "tokenType": "Bearer",
        "expiresIn": 604800,
        "refreshToken": "new_refresh_token"
    },
    "requestId": "abc123"
}
```

---

### 2.15 退出登录

**接口地址**：`POST /mobile/member/userCenter/logout`

**请求头**：需要 `Authorization`

**响应示例**：

```json
{
    "code": 200,
    "msg": "退出成功",
    "data": null,
    "requestId": "abc123"
}
```

---

### 2.16 注销账号

**接口地址**：`POST /mobile/member/userCenter/cancel`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "smsCode": "123456",
    "reason": "不再使用"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| smsCode | String | 是 | 短信验证码 |
| reason | String | 否 | 注销原因 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "账号已注销",
    "data": null,
    "requestId": "abc123"
}
```

---

### 2.17 绑定手机号

**接口地址**：`POST /mobile/member/auth/bindMobile`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "mobile": "13812345678",
    "smsCode": "123456"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| mobile | String | 是 | 手机号 |
| smsCode | String | 是 | 短信验证码 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "绑定成功",
    "data": {
        "mobile": "138****5678"
    },
    "requestId": "abc123"
}
```

---

### 2.18 修改密码

**接口地址**：`POST /mobile/member/userCenter/changePassword`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "oldPassword": "加密后的旧密码",
    "newPassword": "加密后的新密码"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| oldPassword | String | 是 | 旧密码（RSA加密） |
| newPassword | String | 是 | 新密码（RSA加密） |

**响应示例**：

```json
{
    "code": 200,
    "msg": "密码修改成功",
    "data": null,
    "requestId": "abc123"
}
```

---

### 2.19 重置密码（忘记密码）

**接口地址**：`POST /mobile/member/auth/resetPassword`

**请求参数**：

```json
{
    "mobile": "13812345678",
    "smsCode": "123456",
    "newPassword": "加密后的新密码"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| mobile | String | 是 | 手机号 |
| smsCode | String | 是 | 短信验证码 |
| newPassword | String | 是 | 新密码（RSA加密） |

**响应示例**：

```json
{
    "code": 200,
    "msg": "密码重置成功",
    "data": null,
    "requestId": "abc123"
}
```

---

### 2.20 获取加密公钥

**接口地址**：`GET /mobile/member/auth/publicKey`

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQ..."
    },
    "requestId": "abc123"
}
```

---

## 三、会员信息接口（Member）

> **模块路径**：`/mobile/member/member`

### 3.1 获取当前会员信息

**接口地址**：`GET /mobile/member/member/info`

**请求头**：需要 `Authorization`

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "memberId": "1234567890",
        "memberNo": "M202601240001",
        "nickname": "用户昵称",
        "realName": "张三",
        "avatar": "https://xxx.com/avatar.jpg",
        "gender": 1,
        "mobile": "138****5678",
        "email": "test@example.com",
        "birthday": "1990-01-15",
        "province": "广东省",
        "city": "深圳市",
        "district": "南山区",
        "levelCode": "GOLD",
        "levelName": "黄金会员",
        "levelIcon": "https://xxx.com/gold.png",
        "growthValue": 5680,
        "nextLevelName": "铂金会员",
        "nextLevelGrowth": 20000,
        "availablePoints": 1280,
        "balance": 150.00,
        "couponCount": 5,
        "isRealName": 1,
        "isCompleteProfile": 1,
        "inviteCode": "ABC123",
        "inviteCount": 12,
        "registerDate": "2026-01-15 10:30:00"
    },
    "requestId": "abc123"
}
```

---

### 3.2 更新会员信息

**接口地址**：`POST /mobile/member/member/update`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "nickname": "新昵称",
    "avatar": "https://xxx.com/new_avatar.jpg",
    "gender": 1,
    "birthday": "1990-01-15",
    "province": "广东省",
    "city": "深圳市",
    "district": "南山区"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| nickname | String | 否 | 昵称 |
| avatar | String | 否 | 头像URL |
| gender | Integer | 否 | 性别：0-未知 1-男 2-女 |
| birthday | String | 否 | 生日（yyyy-MM-dd） |
| province | String | 否 | 省份 |
| city | String | 否 | 城市 |
| district | String | 否 | 区县 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "更新成功",
    "data": null,
    "requestId": "abc123"
}
```

---

### 3.3 实名认证

**接口地址**：`POST /mobile/member/member/realNameAuth`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "realName": "张三",
    "idCard": "加密后的身份证号"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| realName | String | 是 | 真实姓名 |
| idCard | String | 是 | 身份证号（RSA加密） |

**响应示例**：

```json
{
    "code": 200,
    "msg": "实名认证成功",
    "data": {
        "isRealName": 1
    },
    "requestId": "abc123"
}
```

---

### 3.4 获取会员等级详情

**接口地址**：`GET /mobile/member/member/levelInfo`

**请求头**：需要 `Authorization`

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "currentLevel": {
            "levelCode": "GOLD",
            "levelName": "黄金会员",
            "levelIcon": "https://xxx.com/gold.png",
            "discountRate": 0.95,
            "pointsRate": 1.5,
            "privileges": ["95折优惠", "1.5倍积分", "生日200积分"]
        },
        "growthValue": 5680,
        "nextLevel": {
            "levelCode": "PLATINUM",
            "levelName": "铂金会员",
            "levelIcon": "https://xxx.com/platinum.png",
            "minGrowthValue": 20000,
            "remainGrowth": 14320
        },
        "allLevels": [
            {
                "levelCode": "NORMAL",
                "levelName": "普通会员",
                "minGrowthValue": 0
            },
            {
                "levelCode": "SILVER",
                "levelName": "白银会员",
                "minGrowthValue": 1000
            },
            {
                "levelCode": "GOLD",
                "levelName": "黄金会员",
                "minGrowthValue": 5000
            },
            {
                "levelCode": "PLATINUM",
                "levelName": "铂金会员",
                "minGrowthValue": 20000
            },
            {
                "levelCode": "DIAMOND",
                "levelName": "钻石会员",
                "minGrowthValue": 50000
            }
        ]
    },
    "requestId": "abc123"
}
```

---

### 3.5 获取邀请信息

**接口地址**：`GET /mobile/member/member/inviteInfo`

**请求头**：需要 `Authorization`

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "inviteCode": "ABC123",
        "inviteUrl": "https://xxx.com/invite?code=ABC123",
        "inviteQrCode": "https://xxx.com/qrcode/ABC123.png",
        "inviteCount": 12,
        "inviteRewardPoints": 1200,
        "inviteRules": [
            "邀请好友注册成功，双方各获100积分",
            "被邀请人首单消费后，邀请人额外获200积分"
        ]
    },
    "requestId": "abc123"
}
```

---

### 3.6 获取邀请记录

**接口地址**：`POST /mobile/member/member/inviteList`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "pageNo": 1,
    "pageSize": 10
}
```

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "pageNo": 1,
        "pageSize": 10,
        "totalCount": 12,
        "totalPage": 2,
        "list": [
            {
                "memberId": "xxx",
                "nickname": "被邀请人1",
                "avatar": "https://xxx.com/avatar1.jpg",
                "registerDate": "2026-01-20 15:30:00",
                "rewardPoints": 100,
                "hasFirstOrder": true
            }
        ]
    },
    "requestId": "abc123"
}
```

---

## 四、积分接口（Points）

> **模块路径**：`/mobile/member/points`

### 4.1 获取积分概览

**接口地址**：`GET /mobile/member/points/summary`

**请求头**：需要 `Authorization`

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "availablePoints": 1280,
        "frozenPoints": 100,
        "totalPoints": 5680,
        "usedPoints": 4200,
        "expiredPoints": 100,
        "expiringSoonPoints": 200,
        "expiringSoonDate": "2026-03-31"
    },
    "requestId": "abc123"
}
```

---

### 4.2 获取积分流水

**接口地址**：`POST /mobile/member/points/list`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "pageNo": 1,
    "pageSize": 10,
    "pointsType": 1,
    "startDate": "2026-01-01",
    "endDate": "2026-01-31"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| pageNo | Integer | 否 | 页码 |
| pageSize | Integer | 否 | 每页条数 |
| pointsType | Integer | 否 | 积分类型：1-获取 2-消费 |
| startDate | String | 否 | 开始日期 |
| endDate | String | 否 | 结束日期 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "pageNo": 1,
        "pageSize": 10,
        "totalCount": 56,
        "totalPage": 6,
        "list": [
            {
                "id": "xxx",
                "pointsType": 1,
                "pointsTypeName": "获取",
                "points": 100,
                "bizType": "CONSUME",
                "bizTypeName": "消费获取",
                "bizDesc": "订单消费获得积分",
                "createDate": "2026-01-24 10:30:00"
            }
        ]
    },
    "requestId": "abc123"
}
```

---

### 4.3 签到

**接口地址**：`POST /mobile/member/points/signIn`

**请求方式**：`POST`（无请求体或空 JSON `{}` 均可）

**请求头**：需登录态（`access_token` / `Authorization` / `satoken`，与项目移动端鉴权一致）

**业务说明**：

- 同一会员同一自然日仅可成功签到一次；重复调用返回业务错误提示「今日已签到」。
- 基础积分 **10** 分/天；连续签到达到 **3 / 5 / 7** 天及以上时，当日在基础分上额外奖励 **10 / 50 / 90** 分（按满足的最高档只计一次额外分，与 `MemberSignInStreakBonusEnum` 一致）。
- 签到成功后写入表 `app_member_sign_in_record`（`member_id` + `sign_date` 唯一），并通过 `MemberService.addPoints` 增加可用积分（`biz_type` = `SIGN_IN`）。

**响应 `data` 字段**：

| 字段 | 类型 | 说明 |
|------|------|------|
| points | int | 本次发放积分合计（基础+额外） |
| continuousDays | int | 当前连续签到天数（含今日） |
| totalSignDays | int | 历史累计签到天数（含今日） |
| todaySigned | bool | 成功后为 `true` |
| extraReward | object | 额外奖励；无额外分时 `hasExtra` 为 `false` |
| extraReward.extraPoints | int | 额外积分（不含基础 10 分） |
| extraReward.reason | string | 奖励说明文案 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "签到成功",
    "data": {
        "points": 60,
        "continuousDays": 5,
        "totalSignDays": 30,
        "todaySigned": true,
        "extraReward": {
            "hasExtra": true,
            "extraPoints": 50,
            "reason": "连续签到5天额外奖励"
        }
    },
    "requestId": "abc123"
}
```

**常见错误**：`msg` 为「今日已签到」「会员不存在」等（HTTP 200，`code` 非 200 时以前端统一拦截为准）。

---

### 4.4 获取签到状态

**接口地址**：`GET /mobile/member/points/signInStatus`

**请求头**：需登录态

**响应 `data` 字段**：

| 字段 | 类型 | 说明 |
|------|------|------|
| todaySigned | bool | 当日是否已签到 |
| continuousDays | int | 已签：含今日的连续天数；未签：截至昨日的连续天数 |
| totalSignDays | int | 累计签到天数 |
| monthSignDays | int[] | 本月已签到的日号（1–31），用于日历打点 |
| signRules | array | 展示用规则：连续天数门槛 `day`、该档当日可获得总积分 `points`（含基础分） |

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "todaySigned": false,
        "continuousDays": 4,
        "totalSignDays": 29,
        "monthSignDays": [1, 2, 3, 5, 8, 10, 15, 20, 21, 22, 23],
        "signRules": [
            {"day": 1, "points": 10},
            {"day": 3, "points": 20},
            {"day": 5, "points": 60},
            {"day": 7, "points": 100}
        ]
    },
    "requestId": "abc123"
}
```

---

### 4.5 签到记录（分页）

**接口地址**：`POST /mobile/member/points/signInRecord/list`

**请求头**：需登录态

**请求体**（可空，缺省时按第 1 页、默认每页条数）：

```json
{
    "pageNo": 1,
    "pageSize": 20
}
```

**说明**：仅返回当前登录会员的签到记录，按签到自然日倒序；请求体中的 `memberId` 若传入也会被忽略，以 Token 解析出的会员为准。

**响应 `data` 字段**（分页结构同框架 `PageRespVO`）：

| 字段 | 类型 | 说明 |
|------|------|------|
| total | long | 总条数 |
| pageNo | long | 当前页 |
| pageSize | long | 每页条数 |
| records | array | 列表项 |

**`records[]` 单项**：

| 字段 | 类型 | 说明 |
|------|------|------|
| id | string | 记录主键 |
| signDate | string | 签到自然日（`yyyy-MM-dd`） |
| continuousDays | int | 截至当次连续签到天数 |
| basePoints | int | 基础积分 |
| bonusPoints | int | 连续签到额外积分 |
| totalPoints | int | 本次发放积分合计 |

---

## 五、优惠券接口（Coupon）

> **模块路径**：`/mobile/member/coupon`

### 5.1 获取可领取优惠券列表

**接口地址**：`POST /mobile/member/coupon/available`

**请求参数**：

```json
{
    "pageNo": 1,
    "pageSize": 10
}
```

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "pageNo": 1,
        "pageSize": 10,
        "totalCount": 5,
        "list": [
            {
                "templateId": "xxx",
                "couponName": "新人专享券",
                "couponType": 1,
                "couponTypeName": "满减券",
                "discountType": 1,
                "discountValue": 20.00,
                "minConsumeAmount": 100.00,
                "validStartDate": "2026-01-01",
                "validEndDate": "2026-03-31",
                "remainCount": 100,
                "isReceived": false,
                "perMemberLimit": 1,
                "receivedCount": 0
            }
        ]
    },
    "requestId": "abc123"
}
```

---

### 5.2 领取优惠券

**接口地址**：`POST /mobile/member/coupon/receive`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "templateId": "xxx"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| templateId | String | 是 | 优惠券模板ID |

**响应示例**：

```json
{
    "code": 200,
    "msg": "领取成功",
    "data": {
        "couponId": "xxx",
        "couponSn": "COUPON202601240001",
        "couponName": "新人专享券",
        "validEndDate": "2026-03-31"
    },
    "requestId": "abc123"
}
```

---

### 5.3 获取我的优惠券列表

**接口地址**：`POST /mobile/member/coupon/my`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "pageNo": 1,
    "pageSize": 10,
    "status": 0
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| pageNo | Integer | 否 | 页码 |
| pageSize | Integer | 否 | 每页条数 |
| status | Integer | 否 | 状态：0-未使用 1-已使用 2-已过期 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "pageNo": 1,
        "pageSize": 10,
        "totalCount": 5,
        "list": [
            {
                "couponId": "xxx",
                "couponSn": "COUPON202601240001",
                "couponName": "满100减20",
                "couponType": 1,
                "couponTypeName": "满减券",
                "discountType": 1,
                "discountValue": 20.00,
                "minConsumeAmount": 100.00,
                "validStartDate": "2026-01-01",
                "validEndDate": "2026-03-31",
                "status": 0,
                "statusName": "未使用",
                "useScope": 1,
                "useScopeName": "全场通用"
            }
        ]
    },
    "requestId": "abc123"
}
```

---

### 5.4 获取优惠券详情

**接口地址**：`GET /mobile/member/coupon/detail`

**请求头**：需要 `Authorization`

**请求参数**：

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| couponId | String | 是 | 优惠券ID |

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "couponId": "xxx",
        "couponSn": "COUPON202601240001",
        "couponName": "满100减20",
        "couponType": 1,
        "discountValue": 20.00,
        "minConsumeAmount": 100.00,
        "validStartDate": "2026-01-01",
        "validEndDate": "2026-03-31",
        "status": 0,
        "useScope": 1,
        "description": "全场通用，不可与其他优惠叠加使用",
        "usePlatforms": ["APP", "MINI", "H5"]
    },
    "requestId": "abc123"
}
```

---

### 5.5 获取订单可用优惠券

**接口地址**：`POST /mobile/member/coupon/usable`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "orderAmount": 200.00,
    "productIds": ["p001", "p002"],
    "categoryIds": ["c001"]
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| orderAmount | Number | 是 | 订单金额 |
| productIds | Array | 否 | 商品ID列表 |
| categoryIds | Array | 否 | 分类ID列表 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "usableCoupons": [
            {
                "couponId": "xxx",
                "couponName": "满100减20",
                "discountValue": 20.00,
                "minConsumeAmount": 100.00,
                "validEndDate": "2026-03-31"
            }
        ],
        "unusableCoupons": [
            {
                "couponId": "yyy",
                "couponName": "满500减100",
                "discountValue": 100.00,
                "minConsumeAmount": 500.00,
                "reason": "订单金额未满500元"
            }
        ]
    },
    "requestId": "abc123"
}
```

---

### 5.6 积分兑换优惠券

**接口地址**：`POST /mobile/member/coupon/exchange`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "templateId": "xxx"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| templateId | String | 是 | 优惠券模板ID |

**响应示例**：

```json
{
    "code": 200,
    "msg": "兑换成功",
    "data": {
        "couponId": "xxx",
        "couponName": "50元无门槛券",
        "deductPoints": 500,
        "remainPoints": 780
    },
    "requestId": "abc123"
}
```

---

## 六、余额接口（Balance）

> **模块路径**：`/mobile/member/balance`

### 6.1 获取余额概览

**接口地址**：`GET /mobile/member/balance/summary`

**请求头**：需要 `Authorization`

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "balance": 150.00,
        "frozenBalance": 0.00,
        "totalRecharge": 500.00,
        "totalConsume": 350.00
    },
    "requestId": "abc123"
}
```

---

### 6.2 获取余额流水

**接口地址**：`POST /mobile/member/balance/list`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "pageNo": 1,
    "pageSize": 10,
    "balanceType": 1
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| pageNo | Integer | 否 | 页码 |
| pageSize | Integer | 否 | 每页条数 |
| balanceType | Integer | 否 | 变动类型：1-充值 2-消费 3-退款 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "pageNo": 1,
        "pageSize": 10,
        "totalCount": 20,
        "list": [
            {
                "id": "xxx",
                "balanceType": 1,
                "balanceTypeName": "充值",
                "amount": 100.00,
                "afterBalance": 150.00,
                "bizDesc": "余额充值",
                "createDate": "2026-01-24 10:30:00"
            }
        ]
    },
    "requestId": "abc123"
}
```

---

### 6.3 余额充值下单

**接口地址**：`POST /mobile/member/balance/recharge`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "amount": 100.00,
    "payChannel": "WECHAT"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| amount | Number | 是 | 充值金额 |
| payChannel | String | 是 | 支付渠道：`WECHAT`-微信 `ALIPAY`-支付宝 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "下单成功",
    "data": {
        "orderId": "xxx",
        "orderNo": "R202601240001",
        "amount": 100.00,
        "payParams": {
            "appId": "wx123456",
            "timeStamp": "1706083200",
            "nonceStr": "xxx",
            "package": "prepay_id=xxx",
            "signType": "RSA",
            "paySign": "xxx"
        }
    },
    "requestId": "abc123"
}
```

---

## 七、成长值接口（Growth）

> **模块路径**：`/mobile/member/growth`

### 7.1 获取成长值流水

**接口地址**：`POST /mobile/member/growth/list`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "pageNo": 1,
    "pageSize": 10
}
```

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "pageNo": 1,
        "pageSize": 10,
        "totalCount": 30,
        "list": [
            {
                "id": "xxx",
                "growthType": 1,
                "growthTypeName": "获取",
                "growthValue": 100,
                "bizType": "CONSUME",
                "bizTypeName": "消费",
                "bizDesc": "订单消费获得成长值",
                "isUpgrade": false,
                "createDate": "2026-01-24 10:30:00"
            }
        ]
    },
    "requestId": "abc123"
}
```

---

## 八、消息通知接口（Message）

> **模块路径**：`/mobile/member/message`

### 8.1 获取消息列表

**接口地址**：`POST /mobile/member/message/list`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "pageNo": 1,
    "pageSize": 10,
    "msgType": "SYSTEM"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| pageNo | Integer | 否 | 页码 |
| pageSize | Integer | 否 | 每页条数 |
| msgType | String | 否 | 消息类型：`SYSTEM`-系统 `ORDER`-订单 `ACTIVITY`-活动 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "pageNo": 1,
        "pageSize": 10,
        "totalCount": 15,
        "list": [
            {
                "id": "xxx",
                "title": "积分到账通知",
                "content": "您获得100积分奖励",
                "msgType": "SYSTEM",
                "isRead": false,
                "createDate": "2026-01-24 10:30:00"
            }
        ]
    },
    "requestId": "abc123"
}
```

---

### 8.2 获取未读消息数

**接口地址**：`GET /mobile/member/message/unreadCount`

**请求头**：需要 `Authorization`

**响应示例**：

```json
{
    "code": 200,
    "msg": "success",
    "data": {
        "total": 5,
        "system": 2,
        "order": 3,
        "activity": 0
    },
    "requestId": "abc123"
}
```

---

### 8.3 标记消息已读

**接口地址**：`POST /mobile/member/message/read`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "messageIds": ["id1", "id2"]
}
```

**响应示例**：

```json
{
    "code": 200,
    "msg": "标记成功",
    "data": null,
    "requestId": "abc123"
}
```

---

### 8.4 全部标记已读

**接口地址**：`POST /mobile/member/message/readAll`

**请求头**：需要 `Authorization`

**请求参数**：

```json
{
    "msgType": "SYSTEM"
}
```

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| msgType | String | 否 | 消息类型，不传则全部标记 |

**响应示例**：

```json
{
    "code": 200,
    "msg": "全部标记已读",
    "data": null,
    "requestId": "abc123"
}
```

---

## 九、接口地址速查表

> **说明**：基础路径为 `/mobile`，完整示例：`/mobile/member/auth/loginByMobile`

### 9.1 登录认证（auth）

| 操作 | 方法 | 接口地址 |
|------|------|----------|
| 发送验证码 | POST | `/mobile/member/auth/sendSmsCode` |
| 手机验证码登录 | POST | `/mobile/member/auth/loginByMobile` |
| 账号密码登录 | POST | `/mobile/member/auth/loginByPassword` |
| 微信小程序登录 | POST | `/mobile/member/auth/loginByWechatMini` |
| 微信APP登录 | POST | `/mobile/member/auth/loginByWechatApp` |
| 微信公众号登录 | POST | `/mobile/member/auth/loginByWechatMp` |
| 支付宝登录 | POST | `/mobile/member/auth/loginByAlipay` |
| 苹果登录 | POST | `/mobile/member/auth/loginByApple` |
| 华为登录 | POST | `/mobile/member/auth/loginByHuawei` |
| QQ登录 | POST | `/mobile/member/auth/loginByQQ` |
| 微博登录 | POST | `/mobile/member/auth/loginByWeibo` |
| 抖音登录 | POST | `/mobile/member/auth/loginByDouyin` |
| 一键登录 | POST | `/mobile/member/auth/loginByOneClick` |
| 刷新Token | POST | `/mobile/member/userCenter/refreshToken` |
| 退出登录 | POST | `/mobile/member/userCenter/logout` |
| 注销账号 | POST | `/mobile/member/userCenter/cancel` |
| 绑定手机号 | POST | `/mobile/member/auth/bindMobile` |
| 修改密码 | POST | `/mobile/member/userCenter/changePassword` |
| 重置密码 | POST | `/mobile/member/auth/resetPassword` |
| 获取加密公钥 | GET | `/mobile/member/auth/publicKey` |

### 9.2 会员信息（member）

| 操作 | 方法 | 接口地址 |
|------|------|----------|
| 获取会员信息 | GET | `/mobile/member/member/info` |
| 更新会员信息 | POST | `/mobile/member/member/update` |
| 实名认证 | POST | `/mobile/member/member/realNameAuth` |
| 获取等级详情 | GET | `/mobile/member/member/levelInfo` |
| 获取邀请信息 | GET | `/mobile/member/member/inviteInfo` |
| 获取邀请记录 | POST | `/mobile/member/member/inviteList` |

### 9.3 积分（points）

| 操作 | 方法 | 接口地址 |
|------|------|----------|
| 获取积分概览 | GET | `/mobile/member/points/summary` |
| 获取积分流水 | POST | `/mobile/member/points/list` |
| 签到 | POST | `/mobile/member/points/signIn` |
| 获取签到状态 | GET | `/mobile/member/points/signInStatus` |
| 签到记录（分页） | POST | `/mobile/member/points/signInRecord/list` |

### 9.4 优惠券（coupon）

| 操作 | 方法 | 接口地址 |
|------|------|----------|
| 可领取优惠券列表 | POST | `/mobile/member/coupon/available` |
| 领取优惠券 | POST | `/mobile/member/coupon/receive` |
| 我的优惠券列表 | POST | `/mobile/member/coupon/my` |
| 优惠券详情 | GET | `/mobile/member/coupon/detail?couponId=xxx` |
| 订单可用优惠券 | POST | `/mobile/member/coupon/usable` |
| 积分兑换优惠券 | POST | `/mobile/member/coupon/exchange` |

### 9.5 余额（balance）

| 操作 | 方法 | 接口地址 |
|------|------|----------|
| 获取余额概览 | GET | `/mobile/member/balance/summary` |
| 获取余额流水 | POST | `/mobile/member/balance/list` |
| 余额充值下单 | POST | `/mobile/member/balance/recharge` |

### 9.6 成长值（growth）

| 操作 | 方法 | 接口地址 |
|------|------|----------|
| 获取成长值流水 | POST | `/mobile/member/growth/list` |

### 9.7 消息通知（message）

| 操作 | 方法 | 接口地址 |
|------|------|----------|
| 获取消息列表 | POST | `/mobile/member/message/list` |
| 获取未读消息数 | GET | `/mobile/member/message/unreadCount` |
| 标记消息已读 | POST | `/mobile/member/message/read` |
| 全部标记已读 | POST | `/mobile/member/message/readAll` |

---

## 十、枚举值速查表

### 10.1 登录方式（loginType）

| 值 | 说明 |
|----|------|
| MOBILE | 手机验证码 |
| PASSWORD | 账号密码 |
| WECHAT_MINI | 微信小程序 |
| WECHAT_APP | 微信APP |
| WECHAT_MP | 微信公众号 |
| ALIPAY | 支付宝 |
| APPLE | 苹果登录 |
| HUAWEI | 华为账号 |
| QQ | QQ登录 |
| WEIBO | 微博登录 |
| DOUYIN | 抖音登录 |
| ONE_CLICK | 一键登录 |

### 10.2 验证码场景（scene）

| 值 | 说明 |
|----|------|
| LOGIN | 登录 |
| REGISTER | 注册 |
| RESET_PWD | 重置密码 |
| BIND | 绑定手机 |

### 10.3 性别（gender）

| 值 | 说明 |
|----|------|
| 0 | 未知 |
| 1 | 男 |
| 2 | 女 |

### 10.4 会员等级（levelCode）

| 值 | 说明 |
|----|------|
| NORMAL | 普通会员 |
| SILVER | 白银会员 |
| GOLD | 黄金会员 |
| PLATINUM | 铂金会员 |
| DIAMOND | 钻石会员 |

### 10.5 积分类型（pointsType）

| 值 | 说明 |
|----|------|
| 1 | 获取 |
| 2 | 消费 |
| 3 | 冻结 |
| 4 | 解冻 |
| 5 | 过期 |
| 6 | 调整 |

### 10.6 优惠券状态（couponStatus）

| 值 | 说明 |
|----|------|
| 0 | 未使用 |
| 1 | 已使用 |
| 2 | 已过期 |
| 3 | 已冻结 |
| 4 | 已作废 |

### 10.7 优惠券类型（couponType）

| 值 | 说明 |
|----|------|
| 1 | 满减券 |
| 2 | 折扣券 |
| 3 | 无门槛券 |
| 4 | 兑换券 |

### 10.8 余额变动类型（balanceType）

| 值 | 说明 |
|----|------|
| 1 | 充值 |
| 2 | 消费 |
| 3 | 退款 |
| 4 | 冻结 |
| 5 | 解冻 |
| 6 | 提现 |
| 7 | 调整 |

### 10.9 支付渠道（payChannel）

| 值 | 说明 |
|----|------|
| WECHAT | 微信支付 |
| ALIPAY | 支付宝 |
| BALANCE | 余额支付 |
| BANK | 银行卡 |

### 10.10 消息类型（msgType）

| 值 | 说明 |
|----|------|
| SYSTEM | 系统消息 |
| ORDER | 订单消息 |
| ACTIVITY | 活动消息 |
| POINTS | 积分消息 |
| COUPON | 优惠券消息 |

### 10.11 平台标识（platform）

| 值 | 说明 |
|----|------|
| APP | 手机APP |
| MINI | 微信小程序 |
| H5 | H5网页 |

---

## 十一、更新日志

| 版本 | 日期 | 更新内容 |
|------|------|----------|
| 3.0.1 | 2026-01-24 | 初始版本，包含登录认证、会员信息、积分、优惠券、余额、成长值、消息通知接口 |
