# OpenAPI 接口 - 购买/占用无状态会员

> 模块标识：openapi  |  接口数量：76

## 接口说明
**方法**：	POST

**路径**：				/openapi/stateless-members/purchase

**功能说明**：
将指定无状态会员标记为已售出（saleStatus=1），实现一卡一卖，防止同一卡密被二次购买。不校验、不记录激活状态；已售出卡密在有效期内仍可通过 activate/check 等接口无限次激活。

### 请求参数
```json
{
  "headers": [
    {
      "name": "X-Site",
      "type": "string",
      "required": true,
      "description": "站点标识"
    },
    {
      "name": "X-System-Code",
      "type": "string",
      "required": true,
      "description": "系统编码"
    }
  ],
  "body": {
    "id": "string｜可选，无状态会员 _id 或数字 id",
    "code": "string｜可选，无状态会员编码",
    "orderNo": "string｜可选，关联订单号，写入 soldOrderNo"
  }
}
```

### 响应示例
```json
{
  "success": {
    "code": "0000",
    "message": "购买成功",
    "data": {
      "id": "xxx",
      "code": "SM0001",
      "name": "无状态会员",
      "saleStatus": 1,
      "soldAt": "2025-01-15T10:00:00.000Z",
      "soldOrderNo": "ORD-20250115-0010"
    }
  },
  "failureNotFound": {
    "code": "1510",
    "message": "无状态会员不存在",
    "data": null
  },
  "failureDisabled": {
    "code": "1511",
    "message": "无状态会员未启用，不可购买",
    "data": null
  },
  "failureSold": {
    "code": "1512",
    "message": "该无状态会员已售出，不可重复购买",
    "data": null
  }
}
```

### 注意事项
- id 与 code 至少提供一个
- 仅当 status=1 且 saleStatus=0（或未设置）时可购买
- 购买成功后 saleStatus=1，同一卡不可再次调用本接口
- 售卖状态不影响 /openapi/stateless-members/activate、/check 等激活校验接口
- 管理端也可通过 PUT /api/stateless-members/{id}/sale-status 或订单 statelessMemberId + PAID/COMPLETED 标记已售

