7.4 创建付费提问【未授权拦截通过,待登录态联调】

POST /tieup/api/v1/questions

鉴权:需要 Authorization: Bearer <access_token>

请求头:

Idempotency-Key: question_10001_20260602143000_x7f9k2

请求体:

{
  "artist_id": 1,
  "question_content": "想问你的新作品什么时候发布?",
  "attachments": []
}

请求字段:

字段 类型 必填 说明
artist_id integer 偶像 ID
question_content string 提问内容,最长 2000 字符
attachments array 已上传资源 URL/key 数组,最多 9 个

响应字段:

字段 类型 说明
id integer 提问 ID
question_no string 提问编号
parent_question_id integer/null 上一条问题 ID;主问题为空
root_question_id integer 会话链根问题 ID,主问题为自身 ID
fan_user_id integer 粉丝用户 ID
fan_nickname string 粉丝昵称
fan_avatar string 粉丝头像 URL
artist_id integer 艺人 ID
artist_user_id integer 艺人关联用户 ID
artist_name string 艺人名称
artist_avatar string 艺人头像,严格读取独立维护的 tieup_artist.avatar;未配置时返回空字符串,不回退绑定账号的用户头像
business_type string 固定为 question
question_content string 提问内容
attachments array 提问附件 URL/key 列表
price_candy_amount string 本次提问消耗糖果数量
answer_content string/null 回答内容,未回答为空
answer_attachments array 回答附件 URL/key 列表
status integer 提问状态:1=待回答,2=已回答,3=已拒绝,4=已退款,5=已取消
submitted_at string/null 提交时间
answered_at string/null 回答时间
rejected_at string/null 拒绝时间
refunded_at string/null 退款时间
reject_reason string/null 拒绝原因
refund_no string/null 退款单号
created_at string/null 创建时间
thread_status integer 会话链最新问题状态,创建主问题时与 status 一致
thread_latest_question_id integer 会话链最新问题 ID,创建主问题时与 id 一致
thread_items array 完整问答链,按提问、回答、追问、回答顺序排列
follow_ups array 兼容字段,主问题的追问列表;创建主问题时为空数组

响应示例:

{
  "code": 200,
  "message": "成功",
  "data": {
    "id": 50001,
    "question_no": "Q202606170001",
    "parent_question_id": null,
    "root_question_id": 50001,
    "fan_user_id": 10001,
    "fan_nickname": "Tieup用户",
    "fan_avatar": "https://cdn.example.com/avatar.png",
    "artist_id": 20001,
    "artist_user_id": 20002,
    "artist_name": "示例艺人",
    "artist_avatar": "https://cdn.example.com/artist.png",
    "business_type": "question",
    "question_content": "可以分享练习建议吗?",
    "attachments": [
      "https://cdn.example.com/question/1.png"
    ],
    "price_candy_amount": "20.00",
    "answer_content": null,
    "answer_attachments": [],
    "status": 1,
    "submitted_at": "2026-06-17 10:00:00",
    "answered_at": null,
    "rejected_at": null,
    "refunded_at": null,
    "reject_reason": null,
    "refund_no": null,
    "created_at": "2026-06-17 10:00:00",
    "thread_status": 1,
    "thread_latest_question_id": 50001,
    "thread_items": [
      {
        "id": 50001,
        "question_no": "Q202606170001",
        "parent_question_id": null,
        "root_question_id": 50001,
        "fan_user_id": 10001,
        "fan_nickname": "Tieup用户",
        "fan_avatar": "https://cdn.example.com/avatar.png",
        "artist_id": 20001,
        "artist_user_id": 20002,
        "artist_name": "示例艺人",
        "artist_avatar": "https://cdn.example.com/artist.png",
        "business_type": "question",
        "question_content": "可以分享练习建议吗?",
        "attachments": [
          "https://cdn.example.com/question/1.png"
        ],
        "price_candy_amount": "20.00",
        "answer_content": null,
        "answer_attachments": [],
        "status": 1,
        "submitted_at": "2026-06-17 10:00:00",
        "answered_at": null,
        "rejected_at": null,
        "refunded_at": null,
        "reject_reason": null,
        "refund_no": null,
        "created_at": "2026-06-17 10:00:00"
      }
    ],
    "follow_ups": []
  }
}

业务规则:

  • 粉丝必须已订阅该偶像。
  • tieup_artist_pricing.question_price 扣减糖果,要求 question_enabled = 1 且价格大于 0。
  • 创建 tieup_question 和调用糖果账户服务扣减必须在同一事务中完成。
  • 同一 fan_user_id + Idempotency-Key 只创建一条提问,重复请求返回已有问题。
  • 同一 Idempotency-Key 只能复用同一偶像、同一提问内容和同一附件快照;换偶像、换内容或换附件会返回 422,提示该幂等键已用于其他提问。
  • 云上曲率内容审核配置开启时,提问文本和附件必须先通过机审;机审未明确通过时不创建提问、不扣减糖果。