# QR码API使用说明

## 概述

QR码API已经升级为接收JSON格式的请求数据，提供更好的类型安全和扩展性。

## API接口说明

### 1. 生成加密二维码

**接口地址：** `POST /api/qr-code/create-encrypted-qr-code`

**请求格式：** JSON

**请求示例：**
```json
{
  "data": "用户ID:12345",
  "width": 200,
  "height": 200,
  "expireMinutes": 30,
  "businessType": "LOGIN"
}
```

**参数说明：**
- `data` (必填): 要加密的数据
- `width` (可选): 二维码宽度，默认200，范围50-1000
- `height` (可选): 二维码高度，默认200，范围50-1000
- `expireMinutes` (可选): 过期时间（分钟），默认30，范围1-1440
- `businessType` (可选): 业务类型

### 2. 解密二维码数据

**接口地址：** `POST /api/qr-code/decrypt-qr-data`

**请求示例：**
```json
{
  "token": "abc123def456",
  "encryptedData": "encrypted_data_string"
}
```

### 3. 验证并解密二维码内容

**接口地址：** `POST /api/qr-code/verify-and-decrypt-qr`

**请求示例：**
```json
{
  "qrContent": "qr_content_string"
}
```

### 4. 验证并解密二维码内容（返回完整结果）

**接口地址：** `POST /api/qr-code/verify-and-decrypt-qr-with-type`

**请求示例：**
```json
{
  "qrContent": "qr_content_string"
}
```

### 5. 生成业务加密二维码

**接口地址：** `POST /api/qr-code/create-business-encrypted-qr-code`

**请求示例：**
```json
{
  "data": "订单ID:ORDER123",
  "businessKey": "store_key_123",
  "width": 200,
  "height": 200,
  "expireMinutes": 30,
  "businessType": "ORDER"
}
```

### 6. 门店核销二维码

**接口地址：** `POST /api/qr-code/verify-business-qr`

**请求示例：**
```json
{
  "qrContent": "qr_content_string",
  "businessKey": "store_key_123"
}
```

### 7. 使token失效

**接口地址：** `POST /api/qr-code/invalidate-token`

**请求示例：**
```json
{
  "token": "abc123def456"
}
```

## GET接口（保持不变）

以下GET接口保持原有的@RequestParam方式：

### 生成普通二维码
`GET /api/qr-code/create-qr-code?data=要编码的数据&size=200x200`

### 生成加密二维码图片流
`GET /api/qr-code/create-encrypted-qr-image?data=要加密的数据&size=200x200&expireMinutes=30&businessType=LOGIN`

**参数说明：**
- `data` (必填): 要加密的数据
- `size` (可选): 二维码尺寸，格式：宽x高，默认200x200
- `expireMinutes` (可选): 过期时间（分钟），默认30
- `businessType` (可选): 业务类型，如LOGIN、ORDER等

### 检查token是否有效
`GET /api/qr-code/check-token?token=abc123def456`

## 错误处理

API现在包含完整的参数验证，会返回具体的错误信息：

**验证失败示例：**
```json
{
  "code": 500,
  "message": "数据不能为空",
  "data": null
}
```

**常见验证错误：**
- "数据不能为空"
- "宽度不能小于50像素"
- "宽度不能大于1000像素"
- "过期时间不能小于1分钟"
- "过期时间不能大于1440分钟"
- "token不能为空"
- "业务密钥不能为空"

## 前端调用示例

### JavaScript/Axios
```javascript
// 生成加密二维码
const response = await axios.post('/api/qr-code/create-encrypted-qr-code', {
  data: '用户ID:12345',
  width: 200,
  height: 200,
  expireMinutes: 30,
  businessType: 'LOGIN'
});

console.log(response.data);
```

### jQuery
```javascript
$.ajax({
  url: '/api/qr-code/create-encrypted-qr-code',
  type: 'POST',
  contentType: 'application/json',
  data: JSON.stringify({
    data: '用户ID:12345',
    width: 200,
    height: 200,
    expireMinutes: 30,
    businessType: 'LOGIN'
  }),
  success: function(response) {
    console.log(response);
  }
});
```

## 升级说明

1. **向下兼容性：** GET接口保持不变，现有的GET请求不受影响
2. **类型安全：** JSON格式提供更好的类型检查和验证
3. **扩展性：** 新的DTO结构便于后续添加新字段
4. **错误处理：** 提供更详细和友好的错误信息
5. **功能增强：** `create-encrypted-qr-image`接口现在支持`businessType`参数
