# 房内猜拳接口文档 本文只记录房内猜拳 App 端接口。独立猜拳本阶段不接入。Flutter 详细字段看 [房内猜拳 Flutter 对接](flutter对接/房内猜拳Flutter对接.md)。 ## 查询配置 - 地址:`GET /api/v1/games/room-rps/config` - 参数:无 - 返回值: - `config.status`:`active` / `disabled` - `config.challenge_timeout_ms`:发起后无人应战的超时时间,默认 10 分钟 - `config.reveal_countdown_ms`:双方出拳后的揭晓倒计时,默认 3 秒 - `config.stake_gifts`:礼物下注档位 - 相关 IM:无 ## 查询房间挑战单 - 地址:`GET /api/v1/games/room-rps/challenges` - 参数: - `room_id`:房间 ID,必填 - `status`:状态,可选 - `page_size`:页大小,默认 20 - `cursor`:下一页游标 - 返回值: - `challenges`:挑战单列表 - `challenges[].initiator.user.nickname`:发起人昵称 - `challenges[].initiator.user.avatar`:发起人头像 - `challenges[].challenger.user.nickname`:应战人昵称;未应战时为空 - `challenges[].challenger.user.avatar`:应战人头像;未应战时为空 - `next_cursor`:下一页游标 - `page_size`:本次页大小 - 相关 IM:无。客户端漏掉 IM 后可以用这个接口补拉当前房间挑战单。 ## 发起挑战 - 地址:`POST /api/v1/games/room-rps/challenges/create` - 参数: - `room_id`:房间 ID - `gift_id`:后台配置的礼物档位 ID - `gesture`:`rock` / `paper` / `scissors` - 返回值: - `challenge`:挑战单 - 相关 IM: - `room_rps_challenge_created`:服务端向房间群发 `[PK]` 消息,带 `challenge_id`、发起人头像昵称、礼物档位和超时时间。 ## 应战 - 地址:`POST /api/v1/games/room-rps/challenges/:challenge_id/accept` - 参数: - `challenge_id`:挑战单 ID - `gesture`:`rock` / `paper` / `scissors` - 返回值: - `challenge`:应战后的挑战单 - 超时错误:HTTP `409`,`code=ROOM_RPS_CHALLENGE_EXPIRED`。客户端应关闭当前挑战弹窗并提示“猜拳已过期”。 - 相关 IM: - `room_rps_challenge_accepted`:服务端通知房间挑战已被锁定,带发起人和应战人头像昵称。 - `room_rps_reveal_countdown`:服务端通知双方展示 3 秒倒计时,带发起人和应战人头像昵称。 - `room_rps_finished`:服务端通知胜负、退款或礼物结算结果,带发起人和应战人头像昵称。 ## 查询挑战详情 - 地址:`GET /api/v1/games/room-rps/challenges/:challenge_id` - 参数: - `challenge_id`:挑战单 ID - 返回值: - `challenge.status`:`pending` / `matched` / `revealing` / `finished` / `timeout` / `settlement_failed` / `cancelled` - `challenge.initiator`:发起人 - `challenge.initiator.user.nickname`:发起人昵称 - `challenge.initiator.user.avatar`:发起人头像 - `challenge.challenger`:应战人 - `challenge.challenger.user.nickname`:应战人昵称;未应战时为空 - `challenge.challenger.user.avatar`:应战人头像;未应战时为空 - `challenge.winner_user_id`:胜者,平局为空或 0 - `challenge.settlement_status`:结算状态 - 相关 IM:无。客户端收到 IM 后可以用这个接口刷新挑战事实。 ## 相关 IM 字段 - 所有房内猜拳 IM 都是腾讯 IM `TIMCustomElem`,`data` 是 JSON 字符串。 - 通用字段:`event_id`、`event_type`、`room_id`、`challenge_id`、`server_time_ms`、`challenge`。 - `challenge.initiator.user.nickname`:发起人昵称,必填。 - `challenge.initiator.user.avatar`:发起人头像,必填。 - `challenge.challenger.user.nickname`:应战人昵称;`room_rps_challenge_accepted`、`room_rps_reveal_countdown`、`room_rps_finished` 必填。 - `challenge.challenger.user.avatar`:应战人头像;`room_rps_challenge_accepted`、`room_rps_reveal_countdown`、`room_rps_finished` 必填。