# 美团体育馆商品与预订直连 API｜无限聚核

> 通过无限聚核管理美团体育馆商品和消费者订单，接收平台消息并同步处理结果。

## AI 接入

[AI 接入提示词](https://doc.elys.cn/sports-sdk.md)

请读取 https://doc.elys.cn/sports-sdk.md，并按其中流程帮我接入无限聚核体育馆 API。

## 接入说明

接口以当前站点对应环境为准；真实写操作前请确认门店和业务影响。

- 官方页面：https://doc.elys.cn/sports
- API Host：`https://newopen.elys.cn`
- Content-Type：`application/json`
- 成功判断：`检查 success 和 data.outcome；接单或退款审核的 reply_recorded 仅表示消息中心已保存。`

本文档由无限聚核公开 API 的结构化数据自动生成。接入时以当前字段、鉴权、成功判断和风险说明为准，不要猜测未列出的接口或参数。

## 美团合作授权

无限聚核已获得美团技术服务合作授权，为商户提供相关 API 产品服务。

![宁德无限递归网络科技有限公司美团合作授权书](https://cdn.umember.cn/assets/mt_auth.jpg)

美团合作授权书

<a id="sports-quickstart"></a>

## 接入流程

API 请求与平台消息共同完成商品、库存和预订对接。先配置回调，再按下列流程联调。

<a id="sports-flow-setup"></a>

### 接入准备

1. **配置账号与门店**：准备无限聚核 API Key 或 V2 Token，完成后台账号与门店授权。
2. **配置回调并实现验签**：在后台“事件推送 → 运动馆预定”配置回调地址与消息类型，实现[公共入参](#sports-webhook-input)和[签名验签](#sports-webhook-signature)。
3. **创建商品并同步规则**：调用商品创建、提交和预订规则接口，同时接收商品状态通知；接口成功不等于审核通过。
4. **按消息模式处理预订**：同步查询在当前回调中返回业务 JSON；异步决策先确认接收，再另调答复接口；通知只需保存并确认接收。

<a id="sports-flow-products"></a>

### 商品发布与状态通知

从[创建商品](#sports-product-create)和[提交商品](#sports-product-submit)开始，结合[5910003 商品流程通知](#sports-webhook-5910003)与[5910049 上下架通知](#sports-webhook-5910049)观察平台状态。只会收到已开通并订阅的消息。

```mermaid
sequenceDiagram
    participant D as 开发者服务
    participant G as 无限聚核
    participant M as 美团
    D->>G: 创建商品
    G->>M: 鉴权、组装参数并转发
    M-->>G: 创建结果与 productId
    G-->>D: 创建响应及服务端 appProductId
    D->>G: 提交商品
    G->>M: 转发提交请求
    M-->>G: 提交结果
    G-->>D: 接口响应
    Note over D,M: 接口成功不等于审核通过
    M->>G: 5910003 商品流程通知
    G-->>M: 接收确认
    G->>D: 签名 Webhook
    D-->>G: HTTP 2xx 确认接收
    Note over D,M: 上下架状态变化另由 5910049 通知
```

<a id="sports-flow-stock"></a>

### 库存查询：在同一次回调内应答

[5810033 库存查询](#sports-webhook-5810033)是同步 query。开发者返回 code=0 与 data 数组，不能先返回空 204 再另调接口补答；平台连接超时预算见消息说明。

```mermaid
sequenceDiagram
    participant D as 开发者服务
    participant G as 无限聚核
    participant M as 美团
    M->>G: 5810033 库存查询
    G->>D: 签名 Webhook（query）
    D->>D: 查询日期和时段库存
    D-->>G: HTTP 200，code=0，data 数组
    G-->>M: 转换为美团原生同步响应
    Note over D,M: 查询结果在当前 HTTP 回调中返回
```

<a id="sports-flow-booking"></a>

### 预订接单：接收确认与业务答复分开

[5810017 开始预订](#sports-webhook-5810017)是异步 decision。先保存并确认接收，再调用[答复预订结果](#sports-book-result)。reply_recorded 仅表示已保存答复，completed 仅表示最近一次答复已提交美团；unknown 时不要自动重试。详见[提交结果](#sports-webhook-decision-result)。

```mermaid
sequenceDiagram
    participant D as 开发者服务
    participant G as 无限聚核
    participant M as 美团
    M->>G: 5810017 开始预订
    G-->>M: 平台接收确认
    G->>D: 签名 Webhook（decision）
    D-->>G: HTTP 2xx 确认接收
    D->>D: 处理接单或拒单
    D->>G: 答复预订结果（requestId）
    G-->>D: reply_recorded
    G->>M: 提交业务答复
    M-->>G: 平台接口结果
    D->>G: 查询消息处理状态
    G-->>D: 返回最近答复的提交状态
    Note over D,G: 保存答复与提交美团是两个阶段
```

<a id="sports-flow-refund"></a>

### 退款审核：另调审核答复接口

[5810013 退款审核](#sports-webhook-5810013)也是异步 decision，使用[答复退款审核](#sports-refund-audit)提交决定。它与需要同步返回结果的[5810001 取消预订](#sports-webhook-5810001)不同；审核答复提交成功不代表退款已到账。

```mermaid
sequenceDiagram
    participant D as 开发者服务
    participant G as 无限聚核
    participant M as 美团
    M->>G: 5810013 取消预订审核
    G-->>M: 平台接收确认
    G->>D: 签名 Webhook（decision）
    D-->>G: HTTP 2xx 确认接收
    D->>D: 作出退款审核决定
    D->>G: 答复退款审核（requestId）
    G-->>D: reply_recorded
    G->>M: 提交审核答复
    M-->>G: 平台接口结果
    D->>G: 查询消息处理状态
    G-->>D: 返回最近答复的提交状态
    Note over D,M: 提交审核答复不等于退款到账
```

<a id="sports-conventions"></a>

## 请求约定

### 公共请求

请求使用 Authorization: Bearer <API Key 或 V2 Token>，Content-Type: application/json。platform 必填 meituan；shopId 或 shopIds 为当前账号下的无限聚核门店 ID；biz 为各接口对应的美团业务字段。网关负责鉴权、账号与门店授权归属、参数组装和固定接口转发，不管理商品或订单业务状态。

除服务端管理的商品标识和平台门店列表外，下文业务字段的必填、类型、长度、格式及枚举是美团平台要求，由开发者提供并交美团判定；网关不校验库存、价格、接单或退款等业务字段。JSON 协议、请求与响应大小限制、服务端凭据和路由身份边界仍然有效。

创建、更新商品及查询商品库存、门店商品列表时，服务端校验 shopIds 中各门店的账号与授权归属，并组装美团 opPoiIds；创建和更新写入 biz.product.opPoiIds，两个查询写入 biz.opPoiIds。调用方不能自行传入这些平台门店列表，也不能覆盖服务端选择的授权、签名或账号路由。

创建、更新、提交、上架、下架商品以及同步预订规则、商家取消订单、到店核销这 8 个直连写接口不要求 Idempotency-Key；旧客户端携带该请求头也会被忽略。每次有效调用都会实际转发，不按请求头或请求内容复用旧结果，不因重复请求返回幂等冲突（409）；最终业务结果以美团返回为准。

### 返回结果

| 字段 | 含义 |
| --- | --- |
| success / code | 本次调用成功时 success=true、code=10000；失败以 success=false 判断，不代表订单业务状态。 |
| data.outcome | 本次平台调用结果：succeeded 成功；rejected 平台拒绝；not_submitted 未提交；unknown 结果未知。 |
| data.platformResponse | 美团原生响应；productId 等平台业务字段以其中的实际返回为准。 |
| data.appProductId | 服务端管理的三方商品 ID，按字符串返回；创建时返回新生成的 ID，更新时仅在当前租户与 productId 存在映射时返回。 |

### 结果未知

> 写请求结果为 unknown 时仍表示结果未知，不等于订单失败，服务不会自动重试。请先核实平台结果，避免重复提交造成重复业务操作。创建商品结果未知时，可查询门店商品列表并用实际 productId 查询详情。商品更新超时不会冻结本地商品或阻止后续独立请求。

### 商品标识

appProductId 始终由服务端管理，调用方不能指定或覆盖。创建商品时，服务端始终生成新的 18 位纯数字字符串 appProductId，先将该 ID 保存为 pending 商品标识记录，再调用美团；保存失败则不提交平台请求。创建响应通过 data.appProductId 返回生成的 ID。

更新商品时，服务端按当前租户（账号）与 biz.product.productId 恢复已有 appProductId 映射；找到映射才补入平台请求，并通过 data.appProductId 返回。若未找到映射，仍不带 appProductId 转发美团，不生成新 ID，也不因缺少映射增加业务门禁或拒绝请求。

创建和更新均忽略调用方在 biz.product 中传入的 appProductId（含字段名大小写变体）；值可为任意合法 JSON 类型，不因此拒绝请求，调用方提供的值不保存、不转发美团。新接入请省略该字段。SKU 标识 appItemId 仍由开发者提供，商品与 SKU 的业务规则由美团判定。

商品操作仍须通过账号、门店与授权归属检查。重复创建会生成新的 appProductId，保存 pending 记录成功后实际提交，是否产生重复商品以美团处理结果为准。

兼容旧请求：外层 clientProductId 已无功能；传入任意合法 JSON 类型均忽略，不因此拒绝请求，不保存、不转发美团。

商品可关联同一授权客户下多个门店，适用门店通过 shopIds 指定，由服务端组装平台门店编码。提交成功不等于审核通过或最终上架。

appProductId 是服务端管理的三方商品 ID，应以返回值为准并按字符串保存和传输；美团 productId 是另一个标识，按对应官方接口要求传入。避免 JavaScript 将较大的美团 productId 转成不安全整数。

<a id="sports-webhook"></a>

## 消息推送与签名

先查消息编号与应答方式，再核对验签、入参和对应示例。完整链路见[接入流程](#sports-quickstart)，同步应答、异步决策与通知分别说明。

### 应答速查

<a id="sports-webhook-overview"></a>

#### 10 类消息速查

| msgType / 名称 | mode | 回调 HTTP 响应 | 是否另调答复接口 |
| --- | --- | --- | --- |
| [5810033 多商品库存批量查询](#sports-webhook-5810033) | query | 同一次响应 HTTP 200 + code / data 库存数组 | 否；同步返回库存 |
| [5810001 取消预订](#sports-webhook-5810001) | command | 同一次响应 HTTP 200 + code / data.orderId | 否；同步返回实际处理结果 |
| [5810023 核销状态查询](#sports-webhook-5810023) | query | 同一次响应 HTTP 200 + code / data 核销状态对象 | 否；同步返回状态 |
| [5810017 开始预订](#sports-webhook-5810017) | decision | 可靠保存 → HTTP 204；此时只是确认接收 | 是：答复预订结果（接单 / 拒单） |
| [5810013 取消预订审核](#sports-webhook-5810013) | decision | 可靠保存 → HTTP 204；此时只是确认接收 | 是：答复退款审核（同意 / 拒绝） |
| [5910003 商品流程状态变更](#sports-webhook-5910003) | notification | 可靠保存 → HTTP 204；无需业务 JSON | 否 |
| [5910049 商品上下架状态变更](#sports-webhook-5910049) | notification | 可靠保存 → HTTP 204；无需业务 JSON | 否 |
| [5810003 预订结果同步](#sports-webhook-5810003) | notification | 可靠保存 → HTTP 204；无需业务 JSON | 否 |
| [5810005 用户撤销退款通知](#sports-webhook-5810005) | notification | 可靠保存 → HTTP 204；无需业务 JSON | 否 |
| [5810031 预订核销同步](#sports-webhook-5810031) | notification | 可靠保存 → HTTP 204；无需业务 JSON | 否 |

<a id="sports-webhook-modes"></a>

#### 先区分接收确认与业务应答

本章逐条说明体育馆接入的 10 种消息。只会收到已开通且订阅的事件；平台事件目录中的其他编号不表示已支持。每条 HTTP 回调都必须响应，“无需业务应答”也要先可靠保存，再返回 HTTP 2xx。

通知 `notification`：可靠保存并返回 HTTP 2xx（建议 204）；不需要再调用业务答复接口。异步决策 `decision`：先保存并返回 2xx，然后调用本文对应的答复接口，回调响应里的业务 JSON 不会代替后续答复。MC 不设置本地业务答复期限，也不按本地订单状态决定是否允许答复；实际业务时效由美团判定。

查询 `query` 与指令 `command`：MC 保持美团请求连接，等待你在同一次回调的 HTTP 响应体中返回业务 JSON。不要先回 204 再补答，也不要改用异步 `/reply`。查询返回当前状态，指令需完成实际业务操作后再返回真实结果。

同步 query / command 当前美团连接总预算为 3 秒，MC 预留约 250 毫秒保存并响应；客户可用时间还需扣除验签、查路由等耗时，以每条 `data.deadlineAt` 为准。这是同步连接的技术超时，不是订单业务期限。体育馆异步 decision 消息不提供本地 deadlineAt；历史消息中的旧期限不作为答复门禁。

<a id="sports-webhook-strict"></a>

#### 必须 100% 遵守应答协议

> 同步 query / command 的响应必须严格使用本文 JSON 结构：最外层只允许 `code`、`message`、`data`；`code` 必须是整数，成功为 `0`。不要增加 `success`、`msg`、`traceId`、`timestamp` 等字段，不要套统一 Result 包装，不要返回空 204。HTTP 200 仅代表网络响应，字段不合规仍会被 MC 拒绝并向美团返回失败。

### 公共协议

<a id="sports-webhook-signature"></a>

#### 签名请求头

每次回调携带 `X-Webhook-Account`（账号邮箱）、`X-Event-Id`、`X-Event-Timestamp`（Unix 秒）、`X-Event-Signature`、`X-Request-Id`。使用该账号 API Key 验签；API Key 本身不会随请求发送。

签名规则：`v1=` 加上 `lowercase_hex(HMAC-SHA256(API Key, UTF8(timestamp + ".") + rawBody))`。必须用原始请求体字节，不要先解析再序列化；核对 X-Event-Id 与 eventId 一致，并检查时间戳在 ±300 秒窗口内。

MC 不透传美团原始 HTTP Header、sign 或 msgId。美团 opBizCode 在存在时单独放入 data.opBizCode；不能用 HTTP 跟踪 Header 推断客户身份。

<a id="sports-webhook-input"></a>

#### 所有回调共用的入参

MC 向你配置的 HTTPS URL 发起 POST，Content-Type 为 application/json。外层固定 5 个字段；按 `data.msgType` 分发业务，并以 `data.mode` 决定应答方式。业务字段位于 `data.payload`，保持美团传入的字段名、大小写和值类型。

下面各消息列出关键字段与示例，不是美团所有行业可选字段的完整清单；未列出的 payload 字段也可能原样传来。接收方应容纳可选字段扩展，但返回 MC 的应答必须严格遵守本章协议。

##### 公共入参字段

| 字段 | 类型 / 是否出现 | 含义 |
| --- | --- | --- |
| eventId | string，始终 | MC 为本次平台入站生成的事件 ID，与 X-Event-Id 一致；同一投递任务的网络重试复用，只用于该任务重投去重，不保证业务唯一 |
| event | string，始终 | 固定 merchant.platform.message |
| version | string，始终 | 固定 1.0 |
| occurredAt | string，始终 | MC 首次持久接收时间，RFC3339 格式；不是预约时间 |
| data.requestId | string，始终 | MC 请求 ID，与 eventId 相同；异步决策答复与查询时传这个值 |
| data.traceId | string，始终 | 诊断链路 ID，与 X-Request-Id 关联；不能拿它代替 requestId |
| data.platform / businessId | string，始终 | 平台 meituan；业务编号 58 或 59，均为字符串 |
| data.msgType / mode | string，始终 | 原生消息编号与处理模式，如 5810033 / query |
| data.shopId / userId | integer，始终 | 解析出的无限聚核门店 ID / 用户 ID；一个账号的消息推到同一地址，请按 shopId 分发到门店。不是美团原生 ID |
| data.shopIds | integer[]，条件出现 | 已确认的体育馆商品适用门店集合；不代表消费门店，未提供时不要自行推断 |
| data.opBizCode | string，可选 | 美团已验签公共参数的原值；未携带则省略。它可能是授权门店或客户实体，不等同于无限聚核 shopId |
| data.deadlineAt | string，仅同步 query / command 提供 | 本次同步 HTTP 响应的技术截止时间，RFC3339；示例里的 Z 表示 UTC。不是订单业务期限，异步 decision 不提供 |
| data.payload | object，始终 | 美团 message 解析后的业务内容；不含美团签名和服务端 Token |

##### 完整入站示例与同步响应示例

###### 请求 · 5810033 完整 Webhook 请求

```json
{
  "eventId": "mc_example",
  "event": "merchant.platform.message",
  "version": "1.0",
  "occurredAt": "2026-11-01T00:00:00Z",
  "data": {
    "requestId": "mc_example",
    "traceId": "trace_example",
    "platform": "meituan",
    "businessId": "58",
    "msgType": "5810033",
    "mode": "query",
    "shopId": 100001,
    "userId": 100001,
    "opBizCode": "示例美团授权实体ID",
    "deadlineAt": "2026-11-01T00:00:02.750Z",
    "payload": {
      "bookDate": "2026-11-01",
      "days": "7"
    }
  }
}
```

###### 同步响应 · 库存查询同步响应

```json
{
  "code": 0,
  "data": [
    {
      "bookTime": "2026-11-01",
      "duration": 60,
      "remainCount": 1,
      "appProductId": "court-example",
      "productId": 123456,
      "period": {
        "appPeriodId": "slot-0800",
        "periodName": "08:00"
      }
    }
  ]
}
```

###### 接收确认 · 通知 / 决策的接收确认

```http
HTTP/1.1 204 No Content


```

<a id="sports-webhook-redelivery"></a>

#### 事件 ID 与重复投递

体育馆业务编号 58 / 59 的每次平台入站都会生成独立的 eventId，MC 不按平台 msgId 去重。因此相同平台消息可能以不同 eventId 重复抵达，eventId 不是业务唯一标识。

同一投递任务的网络重试仍复用 eventId。客户端按 eventId 去重只能防止同一任务重投，不能防止全部业务重复；跨 eventId 的重复业务需由开发者结合订单、商品标识和实际业务状态判断。MC 不承担体育馆业务幂等。

### 同步应答

<a id="sports-webhook-5810033"></a>

#### 5810033：多商品库存批量查询

业务入参：`bookDate`、`days` 都是字符串且必传，如 {"bookDate":"2026-11-01","days":"7"} 表示包含起始日期的 7 天。可选字段有 durations、startTime、endTime、interval、inventoryProductInfos；部分业务的 inventoryProductInfos 为 JSON 字符串，应以实际 payload 和美团定义为准。

请求可能只有 bookDate 和 days，没有 productId 或 appProductId。不能因此忽略请求；应依据路由门店、授权实体和查询条件返回相关可售项目的库存。

按美团要求，客户返回 `code=0`、`data` 为库存数组。不要把 data 提前 JSON.stringify。MC 检查 JSON 信封并把 data 序列化为 JSON 字符串后同步响应美团，不校验库存明细的业务字段。空数组 [] 只用于实际没有可返回记录的情形，不要用它代替查询失败。

##### 5810033 成功响应的库存明细

| 字段 | 类型 / 要求 | 说明 |
| --- | --- | --- |
| bookTime | string，必填 | 分时段库存填写 YYYY-MM-DD；其他适用场景可为 YYYY-MM-DD HH:mm |
| remainCount | integer，必填 | 真实剩余库存；不要传字符串 "1" |
| appProductId | string，必填 | 开发者提供给美团的三方商品 ID，按字符串传输 |
| duration | integer，可选 | 服务时长，单位分钟 |
| productId | long，可选 | 美团商品 ID，按 JSON 整数传输；不要用 appProductId 替代 |
| period | object，分时段库存必填 | 时段信息；不是数组或 JSON 字符串 |
| period.appPeriodId | string，提供 period 时必填 | 客户系统定义的实际时段 ID |
| period.periodName | string，提供 period 时必填 | 分时段场景填写开始时间，如 08:00，不是 08:00-09:00 |

##### 美团库存应答要求：data 与 period

> 美团要求库存响应的 `data` 为数组，数值字段为整数；分时段库存使用日期 + period，periodName 填开始时间。这些是平台业务要求，MC 不逐项校验库存字段。HTTP 200、通用 success=true 或预先序列化的字符串 data 仍不能代替 JSON 信封协议。示例只展示 1 条库存，实际应返回查询范围内的真实记录。

##### 客户响应与美团响应的转换边界

###### 正确响应 · 客户 → MC：返回 JSON 数组

```json
{
  "code": 0,
  "message": "success",
  "data": [
    {
      "bookTime": "2026-11-01",
      "duration": 60,
      "remainCount": 1,
      "appProductId": "court-example",
      "productId": 123456,
      "period": {
        "appPeriodId": "slot-0800",
        "periodName": "08:00"
      }
    }
  ]
}
```

###### 平台转换 · MC → 美团：由 MC 转成 JSON 字符串，客户不要复制此格式

```json
{
  "code": 0,
  "message": "success",
  "data": "[{\"bookTime\":\"2026-11-01\",\"duration\":60,\"remainCount\":1,\"appProductId\":\"court-example\",\"productId\":123456,\"period\":{\"appPeriodId\":\"slot-0800\",\"periodName\":\"08:00\"}}]"
}
```

###### 业务失败 · 客户 → MC：业务失败

```json
{
  "code": -1,
  "message": "库存服务暂不可用"
}
```

##### 5810033 官方依据

[多商品库存批量查询](https://developer.meituan.com/docs/msg/msg_ddzh_e1371f36-2c45-4e90-8b9e-43dda8bb16e8)要求 data 在返回美团时序列化为 JSON string；此转换由 MC 完成。上表的字段、类型和分时段条件是美团要求；MC 只检查 JSON 协议，不判断业务字段是否满足平台要求。

<a id="sports-webhook-5810001"></a>

#### 5810001：取消预订

业务入参：`orderId`、`cancelType`；可能还有 auditChannel、reason、type。开发者取 payload.orderId 识别订单并自行处理业务重复；MC 不按业务订单去重。

mode=command，必须在同一次 HTTP 响应中返回业务结果。成功时 data.orderId 必须与入站订单完全一致；appOrderId 可选。失败返回非 0 code 和 message；不要返回空 204 或等待以后另调答复。执行结果不明时先核实业务状态，不能盲目再次取消。

##### 5810001 入参与应答

###### 请求 · payload 关键字段示例

```json
{
  "orderId": "示例订单ID",
  "cancelType": "1"
}
```

###### 同步响应 · 取消预订同步响应

```json
{
  "code": 0,
  "data": {
    "orderId": "示例订单ID",
    "appOrderId": "customer-example"
  }
}
```

<a id="sports-webhook-5810023"></a>

#### 5810023：核销状态查询

业务入参：`orderId`。mode=query，按美团要求实时查询该订单并在同一次 HTTP 响应中返回 data 对象，包含原订单 orderId 与整数 consumeStatus：1 未核销、2 已核销、3 未知状态。返回 3 时美团会继续轮询，直到得到 1 或 2；不能把示例状态直接用于所有订单。上述字段和枚举由美团判定，MC 不校验核销业务状态。

这条消息只查询已有核销状态，不要求客户执行核销；不能用接收到查询消息作为核销依据。

##### 5810023 入参与应答

###### 请求 · payload

```json
{
  "orderId": "示例订单ID"
}
```

###### 同步响应 · 核销状态同步响应

```json
{
  "code": 0,
  "data": {
    "orderId": "示例订单ID",
    "consumeStatus": 2
  }
}
```

### 异步决策

<a id="sports-webhook-decision"></a>

#### 异步决策必须分两步完成

> 5810017 / 5810013：先持久化消息并返回 HTTP 2xx，再调用对应业务答复接口。确认收到不等于接单或同意退款；不要将最终决策只放在回调的 HTTP 响应体中。

<a id="sports-webhook-5810017"></a>

#### 5810017：开始预订

业务入参关键字段：orderId、appProductId、begintime、endtime、quantity；还可能包含 productId、productName、duration、mobile、products、appPeriodId、type 等。注意这里原生字段是小写 begintime/endtime，和 5810003 的 beginTime/endTime 不同；MC 不改字段名或原始类型。

mode=decision。先可靠保存并 HTTP 204 确认接收，再调用左侧“答复预订结果”：`POST /api/v2/yuding/sports/bookresultcallback`，使用 Authorization: Bearer <API Key 或 V2 Token>。requestId 取 data.requestId，shopId 取 data.shopId，biz.orderId 取 data.payload.orderId，用于匹配已验签消息的账号、接口和订单身份。MC 不按本地业务期限或订单状态拒绝答复。

美团要求接单使用 biz.bookStatus=2 且 biz.code=200；拒单使用 biz.bookStatus=3 且 biz.code 为 40001～40007。appOrderId 是客户订单号，可选。这些业务规则由美团判定。以下为体育馆业务接口请求格式，不是回调 HTTP 响应格式，也不是 MC 原生签名 /reply 格式。

##### 5810017 入参与后续业务答复

###### 请求 · payload 关键字段示例

```json
{
  "orderId": "示例订单ID",
  "appProductId": "court-example",
  "begintime": "2026-11-01 08:00",
  "endtime": "2026-11-01 09:00",
  "quantity": "1"
}
```

###### 接单答复 · 另调预订结果接口：接单

```json
{
  "platform": "meituan",
  "shopId": 100001,
  "requestId": "mc_example",
  "biz": {
    "orderId": "示例订单ID",
    "bookStatus": 2,
    "code": 200,
    "appOrderId": "customer-example"
  }
}
```

###### 拒单答复 · 另调预订结果接口：拒单

```json
{
  "platform": "meituan",
  "shopId": 100001,
  "requestId": "mc_example",
  "biz": {
    "orderId": "示例订单ID",
    "bookStatus": 3,
    "code": 40006
  }
}
```

<a id="sports-webhook-5810013"></a>

#### 5810013：取消预订审核

业务入参：orderId；可能包含 reason、type、isTieredRefund、isCancelPenalties、subOrderIds。subOrderIds 若出现，可能是字符串数组或包含该数组的 JSON 字符串；MC 保留入站值。

mode=decision。先可靠保存并返回 HTTP 204，再调用左侧“答复退款审核”：`POST /api/v2/yuding/sports/refundauditresult`，使用 Authorization: Bearer <API Key 或 V2 Token>。MC 不按本地业务期限或订单状态拒绝答复。

美团规定 auditResult=2 表示审核通过，3 表示审核未通过；业务枚举交美团判定。requestId、shopId、biz.orderId 必须来自对应消息，不能换成其他订单。关联续时订单由已验签入站消息确定，不应自行增删或更换。

##### 5810013 入参与后续业务答复

###### 请求 · payload 关键字段示例

```json
{
  "orderId": "示例订单ID",
  "reason": "用户申请退款"
}
```

###### 同意退款 · 另调退款审核接口：同意

```json
{
  "platform": "meituan",
  "shopId": 100001,
  "requestId": "mc_example",
  "biz": {
    "orderId": "示例订单ID",
    "auditResult": 2
  }
}
```

###### 拒绝退款 · 另调退款审核接口：拒绝

```json
{
  "platform": "meituan",
  "shopId": 100001,
  "requestId": "mc_example",
  "biz": {
    "orderId": "示例订单ID",
    "auditResult": 3
  }
}
```

<a id="sports-webhook-decision-result"></a>

#### 确认异步答复最终完成

业务答复返回 HTTP 202 和 `reply_recorded`，只表示 MC 已保存本次答复。每次合法答复都会创建独立的提交任务快照。继续调用左侧“查询消息处理状态”：`POST /api/v2/message-center/v1/requests/{requestId}/query`，请求体包含 platform、shopId，并使用同一账号的 Bearer 凭据。

查询返回该 requestId 最近一次被 MC 接收的答复提交（submission）状态；旧任务完成不会覆盖较新答复的状态。`state=completed` 仅表示最近一次答复已成功提交美团，不代表所有历史答复均已完成，更不代表订单状态。unknown 表示最近一次调用结果未知，不等于订单失败，服务不会自动重试；请先核实平台结果。

预订接单和退款审核的每次有效答复都会单独提交；同一消息的重复答复或不同答复均不会以幂等冲突拒绝，也不会复用旧答复结果。requestId 和 biz.orderId 必须匹配已验签原消息的账号、门店、接口及订单身份；业务字段透传，MC 不因旧投递状态、先前答复或本地业务期限拒绝新答复。重复提交仍可能被美团按实际业务状态拒绝。

消息查询只展示投递、等待答复和平台调用等技术状态；不会判断订单能否接单、退款或履约。投递重试和任务租约用于传输与执行协调，不承担商品或订单状态流转。

### 通知消息

<a id="sports-webhook-5910003"></a>

#### 5910003：商品流程状态变更

业务编号 59，mode=notification。关键字段：productId、appProductId、flowStatus、memo（可选，可能因场景缺省）。flowStatus=24 为审核驳回，30 为已发布；创建商品成功不等于已发布，提交后的流程通知用于确认结果。

商品通知优先依据已验签的客户身份确定账号路由；缺少客户身份时，使用服务端保存的 appProductId / productId 归属映射，未找到映射时再查询美团官方商品目录。商品创建尚未返回时，已保存的 pending 映射也可用于路由；不会从 appProductId 的字符串格式推导账号。

data.shopIds 仅包含商品映射中当前账号下授权仍有效的门店，不代表消费门店；归属冲突或无法确认授权时不向客户猜测投递。

无需业务决策或另调答复接口。验签后按 eventId 过滤同一投递任务的重投、可靠保存，再返回 HTTP 204（也接受其他 2xx）；不同 eventId 仍可能对应重复业务。此处无需返回库存式 code/data JSON。

##### 5910003 入参与接收确认

###### 请求 · payload 关键字段示例

```json
{
  "productId": 123456,
  "appProductId": "court-example",
  "flowStatus": 30
}
```

###### 接收确认 · 保存完成后的 HTTP 响应

```http
HTTP/1.1 204 No Content


```

<a id="sports-webhook-5910049"></a>

#### 5910049：商品上下架状态变更

业务编号 59，mode=notification。关键字段：productId、status。status 为整数或平台实际传来的数字字符串：0 无效、1 上架、2 下架；appProductId 可能不提供。不要与 5910003 的 flowStatus 混用。

无需业务决策或另调答复接口。验签后按 eventId 过滤同一投递任务的重投、可靠保存，再返回 HTTP 204（也接受其他 2xx）；不同 eventId 仍可能对应重复业务。此处无需返回库存式 code/data JSON。

##### 5910049 入参与接收确认

###### 请求 · payload 关键字段示例

```json
{
  "productId": 123456,
  "status": 1
}
```

###### 接收确认 · 保存完成后的 HTTP 响应

```http
HTTP/1.1 204 No Content


```

<a id="sports-webhook-5810003"></a>

#### 5810003：预订结果同步

业务编号 58，mode=notification。关键字段：orderId、appProductId、beginTime、endTime、quantity、bookStatus、bookChannel、products；其他如 productId、mobile 按实际消息提供。同步平台预订结果，不要再次执行接单。

无需业务决策或另调答复接口。验签后按 eventId 过滤同一投递任务的重投、可靠保存，再返回 HTTP 204（也接受其他 2xx）；不同 eventId 仍可能对应重复业务。此处无需返回库存式 code/data JSON。

##### 5810003 入参与接收确认

###### 请求 · payload 关键字段示例

```json
{
  "orderId": "示例订单ID",
  "appProductId": "court-example",
  "beginTime": "2026-11-01 08:00",
  "endTime": "2026-11-01 09:00",
  "quantity": "1",
  "bookStatus": "2"
}
```

###### 接收确认 · 保存完成后的 HTTP 响应

```http
HTTP/1.1 204 No Content


```

<a id="sports-webhook-5810005"></a>

#### 5810005：用户撤销退款通知

业务编号 58，mode=notification。关键字段：orderId。表示用户撤销了退款申请，应同步本地退款申请状态；不是要求你再审核或执行退款。

无需业务决策或另调答复接口。验签后按 eventId 过滤同一投递任务的重投、可靠保存，再返回 HTTP 204（也接受其他 2xx）；不同 eventId 仍可能对应重复业务。此处无需返回库存式 code/data JSON。

##### 5810005 入参与接收确认

###### 请求 · payload 关键字段示例

```json
{
  "orderId": "示例订单ID"
}
```

###### 接收确认 · 保存完成后的 HTTP 响应

```http
HTTP/1.1 204 No Content


```

<a id="sports-webhook-5810031"></a>

#### 5810031：预订核销同步

业务编号 58，mode=notification。关键字段：orderId、verifyStatus、verifyChannel；可能包含 type、serialNumber。verifyStatus='2' 表示核销成功；verifyChannel='1' 为第三方平台核销、'3' 为开店宝手动核销、'4' 为超时自动核销。按平台状态同步本地核销记录，收到通知不应再次发起核销。

无需业务决策或另调答复接口。验签后按 eventId 过滤同一投递任务的重投、可靠保存，再返回 HTTP 204（也接受其他 2xx）；不同 eventId 仍可能对应重复业务。此处无需返回库存式 code/data JSON。

##### 5810031 入参与接收确认

###### 请求 · payload 关键字段示例

```json
{
  "orderId": "示例订单ID",
  "verifyStatus": "2",
  "verifyChannel": "1"
}
```

###### 接收确认 · 保存完成后的 HTTP 响应

```http
HTTP/1.1 204 No Content


```

### 联调排障

<a id="sports-webhook-troubleshooting"></a>

#### 联调时务必核对：HTTP 200 不等于协议通过

> query / command 返回非 JSON、额外顶层字段、字符串 code 或预先序列化的字符串 data，会违反 MC 信封协议；库存明细、核销状态等业务字段由美团判定。遇到投递或协议问题请提供 X-Request-Id / data.traceId；重放查询应返回最新库存。按 eventId 去重只能过滤同一投递任务的重投，不同 eventId 仍可能对应重复业务。

##### 正确与错误响应的边界

HTTP 200 + {"code":0,"data":[...]} 是库存查询的正确方向；HTTP 200 + {"success":true,"code":0,"message":"success","data":[...]} 多出 success，当前严格解析会拒绝。msg 不能代替 message；code=10000 是体育馆 API 的结果码，不是回调成功码。

同步响应体当前读取上限为 1 MiB。超限、网络中断、超时或协议不合规都不是成功；不要伪造库存应答来绕过错误。MC 会将合法业务响应转换为美团原生响应，其中 5810033 的 data 自动转为 JSON 字符串。

本章展示的商品、订单、时间、门店和库存数值均为示例。接入时必须返回真实业务数据，并满足对应平台场景要求。

## 商品直连接口

以场地商品为单位管理商品与售卖时段。

<a id="sports-poi-list"></a>

### 查询授权门店

- 方法：`POST`
- URL：`https://newopen.elys.cn/api/v2/auth/sports/token/pageQueryPoiList`
- 在线调试风险：只读请求
- 授权：Bearer API Key 或 V2 Token。
- 说明：查询当前门店所绑定美团客户授权下的门店。
- 美团官方文档：https://developer.meituan.com/docs/api/ddzhkh-auth-token-pageQueryPoiList

#### JSON Body 参数

- `platform`（`string`，必填）：平台，目前仅支持 meituan。；默认值：meituan；可选值：meituan（美团）
- `shopId`（`number | string`，必填）：当前账号下的无限聚核门店 ID。
- `biz`（`object`，必填）：查询参数。
  - `offset`（`integer`，必填）：从 0 开始的偏移量。；默认值：0
  - `limit`（`integer`，必填）：每页数量，1 至 2000。；默认值：100

#### 请求示例

##### 请求示例

```json
{"platform":"meituan","shopId":100001,"biz":{"offset":0,"limit":100}}
```

#### 响应字段

- `data.platformResponse.data.total`（`integer`，选填）：门店总数。
- `data.platformResponse.data.poiInfoList`（`array`，选填）：门店列表，包含 opPoiId、name、address、cityName。

#### 响应示例

##### 成功响应

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"outcome":"succeeded","platformResponse":{"code":"OP_SUCCESS","data":{"total":1,"poiInfoList":[{"opPoiId":"示例门店ID","name":"示例体育馆"}]}}}}
```

<a id="sports-product-create"></a>

### 创建商品

- 方法：`POST`
- URL：`https://newopen.elys.cn/api/v2/shangpin/sports/product/create`
- 在线调试风险：会改变业务状态；调用前必须确认：确认门店、授权、商品信息和 SKU 无误，并同意创建真实美团商品。
- 授权：Bearer API Key 或 V2 Token。
- 说明：创建一个场地商品。每个 item 表示最小售卖时段或打包时段，appItemId 由开发者提供。服务端始终生成 18 位纯数字字符串 appProductId，先保存 pending 记录再调用美团；保存失败则不提交。调用方传入的 biz.product.appProductId（含字段名大小写变体、任意合法 JSON 类型的值）均忽略，响应通过 data.appProductId 返回生成的 ID。
- 美团官方文档：https://developer.meituan.com/docs/api/ddzhkh-shangpin-product-create

#### JSON Body 参数

- `platform`（`string`，必填）：平台，目前仅支持 meituan。；默认值：meituan；可选值：meituan（美团）
- `shopIds`（`array`，必填）：商品适用的无限聚核门店 ID 数组，1 至 1000 个且不可重复；ID 为正安全整数或对应的规范十进制字符串。
- `biz`（`object`，必填）：商品数据。
  - `product`（`object`，必填）：美团场地商品数据；业务字段按官方要求传入，平台门店列表由服务端组装。
    - `productName`（`string`，必填）：商品名称，最多 30 个字符。
    - `categoryIds`（`array`，必填）：体育馆预订类目固定 [100060,1650]。
    - `attributes`（`string`，必填）：商品属性 JSON 对象字符串，属性值为字符串数组；场馆类目必填属性请参照美团场馆属性文档。
    - `items`（`array`，必填）：至少一个时段 SKU。
      - `itemName`（`string`，必填）：SKU 名称，最多 30 个字符。
      - `itemPrice`（`object`，必填）：SKU 价格。
        - `price`（`number`，必填）：售卖价，单位元，最多两位小数。
      - `priceType`（`integer`，必填）：价格类型，0 为一口价。；默认值：0
      - `marketPrice`（`number`，必填）：市场价，单位元，最多两位小数。
      - `appItemId`（`string`，必填）：客户 SKU ID，最多 64 字节，商品内不可重复。
      - `attributes`（`string`，必填）：SKU 属性 JSON 对象字符串。
      - `stockScene`（`integer`，必填）：库存类型，体育馆取 1。；默认值：1

#### 请求示例

##### 创建场地商品

```json
{"platform":"meituan","shopIds":[100001],"biz":{"product":{"productName":"1号场","categoryIds":[100060,1650],"attributes":"{\"569\":[\"1\"],\"570\":[\"1号场\"],\"549\":[\"羽毛球场\"],\"1514\":[\"1\"],\"2354\":[\"08:00:00\"],\"2355\":[\"22:00:00\"]}","items":[{"itemName":"08:00-09:00","itemPrice":{"price":100},"priceType":0,"marketPrice":100,"appItemId":"sku-example","attributes":"{\"571\":[\"08:00\"],\"572\":[\"60\"],\"573\":[\"08:00-09:00\"],\"576\":[\"false\"],\"577\":[\"1\"]}","stockScene":1}]}}}
```

#### 响应字段

- `data.appProductId`（`string`，必填）：服务端生成的 18 位纯数字字符串三方商品 ID，创建成功时返回；请按字符串保存。
- `data.platformResponse.data.appProductId`（`string`，选填）：美团返回的三方商品 ID，以平台实际响应为准。
- `data.platformResponse.data.productId`（`long`，选填）：美团商品 ID。

#### 响应示例

##### 创建成功

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"outcome":"succeeded","appProductId":"202611010800000001","platformResponse":{"code":"OP_SUCCESS","data":{"productId":123456,"appProductId":"202611010800000001"}}}}
```

<a id="sports-product-update"></a>

### 更新商品

- 方法：`POST`
- URL：`https://newopen.elys.cn/api/v2/shangpin/sports/product/update`
- 在线调试风险：会改变业务状态；调用前必须确认：确认门店、商品和 SKU 信息无误，并同意更新真实美团商品。
- 授权：Bearer API Key 或 V2 Token。
- 说明：更新美团商品及 SKU，appItemId 仍由开发者提供。调用方传入的 biz.product.appProductId（含字段名大小写变体、任意合法 JSON 类型的值）均忽略；服务端按当前租户（账号）与 productId 恢复映射并补入平台请求，仅存在映射时返回 data.appProductId。无映射时仍不带 appProductId 转发，不生成新 ID，不增加业务门禁。更新超时不会冻结商品或阻止后续独立请求。
- 美团官方文档：https://developer.meituan.com/docs/api/ddzhkh-shangpin-product-update

#### JSON Body 参数

- `platform`（`string`，必填）：平台，目前仅支持 meituan。；默认值：meituan；可选值：meituan（美团）
- `shopIds`（`array`，必填）：更新后的完整商品适用门店 ID 数组，1 至 1000 个且不可重复；ID 为正安全整数或对应的规范十进制字符串。未包含的门店将被移除。
- `biz`（`object`，必填）：更新数据。
  - `product`（`object`，必填）：完整商品信息。
    - `productId`（`number | string`，必填）：美团商品 ID，按官方要求传入。
    - `productName`（`string`，必填）：商品名称，最多 30 个字符。
    - `categoryIds`（`array`，必填）：体育馆类目固定 [100060,1650]。
    - `attributes`（`string`，必填）：商品属性 JSON 字符串。
    - `items`（`array`，必填）：完整 SKU 列表；itemId 可用于修改已有 SKU。
      - `itemId`（`number | string`，选填）：已有美团 SKU ID。
      - `itemName`（`string`，必填）：SKU 名称。
      - `itemPrice`（`object`，必填）：价格模型。
        - `price`（`number`，必填）：售卖价，单位元。
      - `priceType`（`integer`，必填）：一口价传 0。；默认值：0
      - `marketPrice`（`number`，必填）：市场价，单位元。
      - `appItemId`（`string`，必填）：客户 SKU ID。
      - `attributes`（`string`，必填）：SKU 属性 JSON 字符串。
      - `stockScene`（`integer`，必填）：取 1。；默认值：1

#### 请求示例

##### 更新商品

```json
{"platform":"meituan","shopIds":[100001],"biz":{"product":{"productId":123456,"productName":"1号场","categoryIds":[100060,1650],"attributes":"{\"569\":[\"1\"],\"570\":[\"1号场\"],\"549\":[\"羽毛球场\"],\"1514\":[\"1\"],\"2354\":[\"08:00:00\"],\"2355\":[\"22:00:00\"]}","items":[{"itemId":123,"itemName":"08:00-09:00","itemPrice":{"price":100},"priceType":0,"marketPrice":100,"appItemId":"sku-example","attributes":"{\"571\":[\"08:00\"],\"572\":[\"60\"],\"573\":[\"08:00-09:00\"],\"576\":[\"false\"],\"577\":[\"1\"]}","stockScene":1}]}}}
```

#### 响应字段

- `data.appProductId`（`string`，选填）：当前租户与 productId 存在映射时返回的服务端三方商品 ID，按字符串保存；无映射时省略，不生成新 ID。

#### 响应示例

##### 更新成功（有映射）

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"outcome":"succeeded","appProductId":"202611010800000001","platformResponse":{"code":"OP_SUCCESS","data":{"productId":123456}}}}
```

##### 更新成功（无映射）

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"outcome":"succeeded","platformResponse":{"code":"OP_SUCCESS","data":{"productId":123456}}}}
```

<a id="sports-product-submit"></a>

### 提交商品

- 方法：`POST`
- URL：`https://newopen.elys.cn/api/v2/shangpin/sports/product/submit`
- 在线调试风险：会改变业务状态；调用前必须确认：确认门店和商品 ID 无误，并同意提交真实商品审核。
- 授权：Bearer API Key 或 V2 Token。
- 说明：提交已创建商品；提交成功不代表审核通过或已上架。
- 美团官方文档：https://developer.meituan.com/docs/api/ddzhkh-shangpin-product-submit

#### JSON Body 参数

- `platform`（`string`，必填）：平台，目前仅支持 meituan。；默认值：meituan；可选值：meituan（美团）
- `shopId`（`number | string`，必填）：无限聚核门店 ID。
- `biz`（`object`，必填）：提交数据。
  - `productId`（`number | string`，必填）：美团商品 ID，按官方要求传入。

#### 请求示例

##### 提交商品

```json
{"platform":"meituan","shopId":100001,"biz":{"productId":123456}}
```

#### 响应示例

##### 提交成功

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"outcome":"succeeded","platformResponse":{"code":"OP_SUCCESS","data":{"productId":123456}}}}
```

<a id="sports-product-online"></a>

### 商品恢复上架

- 方法：`POST`
- URL：`https://newopen.elys.cn/api/v2/shangpin/sports/product/online`
- 在线调试风险：会改变业务状态；调用前必须确认：确认门店和商品 ID 无误，并同意恢复上架真实商品。
- 授权：Bearer API Key 或 V2 Token。
- 说明：向美团申请恢复上架商品；业务状态与是否允许操作由美团判定。
- 美团官方文档：https://developer.meituan.com/docs/api/ddzhkh-shangpin-product-online

#### JSON Body 参数

- `platform`（`string`，必填）：平台，目前仅支持 meituan。；默认值：meituan；可选值：meituan（美团）
- `shopId`（`number | string`，必填）：无限聚核门店 ID。
- `biz`（`object`，必填）：上架数据。
  - `productId`（`number | string`，必填）：美团商品 ID。

#### 请求示例

##### 上架商品

```json
{"platform":"meituan","shopId":100001,"biz":{"productId":123456}}
```

#### 响应示例

##### 上架成功

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"outcome":"succeeded","platformResponse":{"code":"OP_SUCCESS","data":{"productId":123456}}}}
```

<a id="sports-product-offline"></a>

### 商品下架

- 方法：`POST`
- URL：`https://newopen.elys.cn/api/v2/shangpin/sports/product/offline`
- 在线调试风险：会改变业务状态；调用前必须确认：确认门店和商品 ID 无误，并同意下架真实美团商品。
- 授权：Bearer API Key 或 V2 Token。
- 说明：向美团申请下架商品；业务状态与是否允许操作由美团判定。
- 美团官方文档：https://developer.meituan.com/docs/api/ddzhkh-shangpin-product-offline

#### JSON Body 参数

- `platform`（`string`，必填）：平台，目前仅支持 meituan。；默认值：meituan；可选值：meituan（美团）
- `shopId`（`number | string`，必填）：无限聚核门店 ID。
- `biz`（`object`，必填）：下架数据。
  - `productId`（`number | string`，必填）：美团商品 ID。

#### 请求示例

##### 下架商品

```json
{"platform":"meituan","shopId":100001,"biz":{"productId":123456}}
```

#### 响应示例

##### 下架成功

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"outcome":"succeeded","platformResponse":{"code":"OP_SUCCESS","data":{"productId":123456}}}}
```

<a id="sports-product-load"></a>

### 查询商品详情

- 方法：`POST`
- URL：`https://newopen.elys.cn/api/v2/shangpin/sports/product/loadproduct`
- 在线调试风险：只读请求
- 授权：Bearer API Key 或 V2 Token。
- 说明：通过当前门店授权查询美团商品详情，不要求本地商品记录。创建结果未知时，可用美团 productId 核实平台结果。
- 美团官方文档：https://developer.meituan.com/docs/api/ddzhkh-shangpin-product-loadproduct

#### JSON Body 参数

- `platform`（`string`，必填）：平台，目前仅支持 meituan。；默认值：meituan；可选值：meituan（美团）
- `shopId`（`number | string`，必填）：无限聚核门店 ID。
- `biz`（`object`，必填）：查询数据。
  - `productId`（`number | string`，必填）：美团商品 ID。

#### 请求示例

##### 查询商品

```json
{"platform":"meituan","shopId":100001,"biz":{"productId":123456}}
```

#### 响应示例

##### 查询成功

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"outcome":"succeeded","platformResponse":{"code":"OP_SUCCESS","data":{"productId":123456,"appProductId":"court-example","productName":"1号场","flowStatus":30}}}}
```

<a id="sports-product-stock"></a>

### 查询商品库存

- 方法：`POST`
- URL：`https://newopen.elys.cn/api/v2/shangpin/sports/product/loadproductstock`
- 在线调试风险：只读请求
- 授权：Bearer API Key 或 V2 Token。
- 说明：使用门店授权查询美团商品的 SKU 与门店库存，不要求本地商品记录；此库存不表示日期时段库存。
- 美团官方文档：https://developer.meituan.com/docs/api/ddzhkh-shangpin-product-loadproductstock

#### JSON Body 参数

- `platform`（`string`，必填）：平台，目前仅支持 meituan。；默认值：meituan；可选值：meituan（美团）
- `shopIds`（`array`，必填）：要查询库存的无限聚核门店 ID 数组，1 至 1000 个且不可重复；ID 为正安全整数或对应的规范十进制字符串。
- `biz`（`object`，必填）：查询商品与授权门店。
  - `productId`（`number | string`，必填）：美团商品 ID。大整数可使用十进制字符串，避免 JavaScript 精度损失；不要求本地商品映射。

#### 请求示例

##### 查询商品库存

```json
{"platform":"meituan","shopIds":[100001],"biz":{"productId":"9007199254740993"}}
```

#### 响应字段

- `data.platformResponse.data.productId`（`long`，选填）：美团商品 ID。
- `data.platformResponse.data.flowstatus`（`integer`，选填）：商品流程状态。
- `data.platformResponse.data.itemStockInfos`（`array`，选填）：商品 SKU 库存列表；包含 itemId、stock 和 shopStockInfos。
- `data.platformResponse.data.itemStockInfos[].shopStockInfos`（`array`，选填）：门店库存列表；包含 opPoiId、shopName、stock、saleStock、remainStock。

#### 响应示例

##### 查询成功

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"outcome":"succeeded","platformResponse":{"code":"OP_SUCCESS","data":{"productId":123456,"flowstatus":30,"itemStockInfos":[{"itemId":123,"stock":10,"shopStockInfos":[{"opPoiId":"示例美团门店ID","shopName":"示例体育馆","stock":"10","saleStock":"2","remainStock":"8"}]}]}}}}
```

<a id="sports-product-list"></a>

### 查询门店商品列表

- 方法：`POST`
- URL：`https://newopen.elys.cn/api/v2/shangpin/sports/shopProducts/get`
- 在线调试风险：只读请求
- 授权：Bearer API Key 或 V2 Token。
- 说明：分页查询美团授权客户的门店商品；服务端按 shopIds 组装平台门店列表。
- 美团官方文档：https://developer.meituan.com/docs/api/ddzhkh-shangpin-shopProducts-get

#### JSON Body 参数

- `platform`（`string`，必填）：平台，目前仅支持 meituan。；默认值：meituan；可选值：meituan（美团）
- `shopIds`（`array`，必填）：要查询商品的无限聚核门店 ID 数组，1 至 1000 个且不可重复；ID 为正安全整数或对应的规范十进制字符串。
- `biz`（`object`，必填）：分页参数。
  - `pageNo`（`integer`，必填）：页码，从 1 开始。；默认值：1
  - `pageSize`（`integer`，必填）：每页数量，最大 100。；默认值：20
  - `spuType`（`string`，选填）：美团商品分类，按官方要求选填。

#### 请求示例

##### 分页查询

```json
{"platform":"meituan","shopIds":[100001],"biz":{"pageNo":1,"pageSize":20}}
```

#### 响应示例

##### 查询成功

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"outcome":"succeeded","platformResponse":{"code":"OP_SUCCESS","data":{"pageNo":1,"pageSize":20,"totalCount":1,"shopProducts":[{"productId":123456,"appProductId":"court-example"}]}}}}
```

## 体育馆预订接口

同步预订规则，处理美团消费者订单。

<a id="sports-book-rule"></a>

### 同步预订规则

- 方法：`POST`
- URL：`https://newopen.elys.cn/api/v2/yuding/sports/updatebookrule`
- 在线调试风险：会改变业务状态；调用前必须确认：确认门店和规则无误，并同意更新真实预订规则。
- 授权：Bearer API Key 或 V2 Token。
- 说明：向美团同步当前门店的预订及退款规则。
- 美团官方文档：https://developer.meituan.com/docs/api/ddzh-yuding-updatebookrule

#### JSON Body 参数

- `platform`（`string`，必填）：平台，目前仅支持 meituan。；默认值：meituan；可选值：meituan（美团）
- `shopId`（`number | string`，必填）：无限聚核门店 ID。
- `biz`（`object`，必填）：预订规则。
  - `refundable`（`integer`，必填）：0 可退，1 不可退。；可选值：0（可退）、1（不可退）
  - `addOrderBefore`（`integer`，选填）：提前可订分钟数。
  - `refundBefore`（`integer`，选填）：提前可退分钟数。
  - `irregularRefund`（`boolean`，选填）：是否支持非规则退款审核。
  - `notifyPhone`（`string`，选填）：平台通知手机号。
  - `reservePeriodBegin`（`string`，选填）：可预订开始时段，HH:mm。
  - `reservePeriodEnd`（`string`，选填）：可预订结束时段，HH:mm。

#### 请求示例

##### 规则示例

```json
{"platform":"meituan","shopId":100001,"biz":{"refundable":0,"addOrderBefore":60,"refundBefore":30}}
```

#### 响应示例

##### 同步成功

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"outcome":"succeeded","platformResponse":{"code":"OP_SUCCESS","data":true}}}
```

<a id="sports-merchant-cancel"></a>

### 商家取消订单

- 方法：`POST`
- URL：`https://newopen.elys.cn/api/v2/yuding/sports/merchantcancelorder`
- 在线调试风险：会改变业务状态；调用前必须确认：确认门店和订单无误，并同意取消真实预订订单。
- 授权：Bearer API Key 或 V2 Token。
- 说明：使用当前门店授权向美团取消预订订单，不要求消息中心已有预订记录；网关不检查本地订单状态，是否允许取消由美团判定。
- 美团官方文档：https://developer.meituan.com/docs/api/ddzh-yuding-merchantcancelorder

#### JSON Body 参数

- `platform`（`string`，必填）：平台，目前仅支持 meituan。；默认值：meituan；可选值：meituan（美团）
- `shopId`（`number | string`，必填）：无限聚核门店 ID。
- `biz`（`object`，必填）：取消参数。
  - `orderId`（`string`，必填）：美团预订订单 ID。
  - `cancelReason`（`string`，选填）：取消原因。
  - `type`（`integer`，选填）：交易类型；具体按美团预订接口要求传入。

#### 请求示例

##### 取消订单

```json
{"platform":"meituan","shopId":100001,"biz":{"orderId":"示例订单ID","cancelReason":"场地不可用","type":3}}
```

#### 响应示例

##### 取消成功

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"outcome":"succeeded","platformResponse":{"code":"OP_SUCCESS","data":{"result":"true"}}}}
```

<a id="sports-isv-consume"></a>

### 用户到店核销

- 方法：`POST`
- URL：`https://newopen.elys.cn/api/v2/yuding/sports/isvconsume`
- 在线调试风险：会改变业务状态；调用前必须确认：确认门店、订单和到店信息无误，并同意执行真实预订核销。
- 授权：Bearer API Key 或 V2 Token。
- 说明：使用当前门店授权向美团提交预订订单履约，不要求消息中心已有预订记录；网关不检查本地订单状态，是否允许核销由美团判定。
- 美团官方文档：https://developer.meituan.com/docs/api/ddzh-yuding-isvconsume

#### JSON Body 参数

- `platform`（`string`，必填）：平台，目前仅支持 meituan。；默认值：meituan；可选值：meituan（美团）
- `shopId`（`number | string`，必填）：无限聚核门店 ID。
- `biz`（`object`，必填）：核销参数。
  - `orderId`（`string`，必填）：美团预订订单 ID。
  - `startTime`（`string`，选填）：实际开始时间，yyyy-MM-dd HH:mm；续时场景按美团要求传入。
  - `endTime`（`string`，选填）：预计结束时间，yyyy-MM-dd HH:mm；续时场景按美团要求传入。

#### 请求示例

##### 到店核销

```json
{"platform":"meituan","shopId":100001,"biz":{"orderId":"示例订单ID","startTime":"2026-11-01 08:00","endTime":"2026-11-01 09:00"}}
```

#### 响应示例

##### 核销成功

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"outcome":"succeeded","platformResponse":{"code":"OP_SUCCESS","data":{"orderId":"示例订单ID"}}}}
```

<a id="sports-book-result"></a>

### 答复预订结果

- 方法：`POST`
- URL：`https://newopen.elys.cn/api/v2/yuding/sports/bookresultcallback`
- 在线调试风险：会改变业务状态；调用前必须确认：确认门店、消息、订单和接单结果无误，并同意提交真实预订答复。
- 授权：Bearer API Key 或 V2 Token。
- 说明：答复消息中心的开始预订消息。每次有效答复单独提交，重复或不同答复不以幂等冲突拒绝。2xx 确认接收不代表已答复，答复保存后仍需查询处理状态。
- 美团官方文档：https://developer.meituan.com/docs/api/ddzh-yuding-bookresultcallback

#### JSON Body 参数

- `platform`（`string`，必填）：平台，目前仅支持 meituan。；默认值：meituan；可选值：meituan（美团）
- `shopId`（`number | string`，必填）：消息所属的无限聚核门店 ID。
- `requestId`（`string`，必填）：从开始预订 Webhook 的 data.requestId 取得，与 biz.orderId 一起匹配已验签消息的账号、门店、接口和订单身份；无本地业务期限或订单状态门禁。
- `biz`（`object`，必填）：预订结果。
  - `orderId`（`string`，必填）：与消息中一致的美团订单 ID。
  - `bookStatus`（`integer`，必填）：美团要求：数字 2 接单成功，数字 3 拒单，不能使用字符串；网关透传并由平台判定。；默认值：2；可选值：2（接单）、3（拒单）
  - `code`（`integer`，必填）：美团要求整数：接单为 200，拒单为 40001～40007，不能带引号；网关不校验业务码与状态组合。；默认值：200；可选值：200（接单成功）、40001（拒单）、40002（拒单）、40003（拒单）、40004（拒单）、40005（拒单）、40006（拒单）、40007（拒单）
  - `appOrderId`（`string`，选填）：客户系统订单 ID，可选；按美团要求提供。网关透传已提供的值，不自动删除或补齐。

#### 请求示例

##### 接单

```json
{"platform":"meituan","shopId":100001,"requestId":"mc_example","biz":{"orderId":"示例订单ID","bookStatus":2,"code":200,"appOrderId":"customer-example"}}
```

##### 拒单（不传空 appOrderId）

```json
{
  "platform": "meituan",
  "shopId": 100001,
  "requestId": "mc_example",
  "biz": {
    "orderId": "示例订单ID",
    "bookStatus": 3,
    "code": 40001
  }
}
```

#### 响应示例

##### 已记录，HTTP 202

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"status":"reply_recorded","requestId":"mc_example"}}
```

#### 补充说明

- **美团答复参数要求**：美团要求 bookStatus 和 code 为 JSON 整数；接单使用 2 + 200，拒单使用 3 + 40001～40007。没有客户订单号时可省略 appOrderId。业务类型、枚举和组合交美团判定，调试器与网关不替平台校验；requestId 和 biz.orderId 仍必须匹配原消息身份。
- **使用与消息一致的环境**：本页随站点选择预发或正式接口，答复入口必须与 MC 消息所属环境一致。requestId、账号与门店必须匹配该环境的原消息；技术调用状态不代表订单状态，是否接受业务操作由美团判定。

<a id="sports-refund-audit"></a>

### 答复取消预订审核

- 方法：`POST`
- URL：`https://newopen.elys.cn/api/v2/yuding/sports/refundauditresult`
- 在线调试风险：会改变业务状态；调用前必须确认：确认门店、消息、订单和退款审核结果无误，并同意提交真实审核结果。
- 授权：Bearer API Key 或 V2 Token。
- 说明：答复消息中心收到的取消预订审核消息，决定是否同意退款。每次有效答复单独提交，重复或不同答复不以幂等冲突拒绝；答复保存后仍需查询处理状态。
- 美团官方文档：https://developer.meituan.com/docs/api/ddzh-yuding-refundauditresult

#### JSON Body 参数

- `platform`（`string`，必填）：平台，目前仅支持 meituan。；默认值：meituan；可选值：meituan（美团）
- `shopId`（`number | string`，必填）：消息所属的无限聚核门店 ID。
- `requestId`（`string`，必填）：从审核 Webhook 的 data.requestId 取得，与 biz.orderId 一起匹配已验签消息的账号、门店、接口和订单身份；无本地业务期限或订单状态门禁。
- `biz`（`object`，必填）：审核结果。
  - `orderId`（`string`，必填）：与入站消息一致的美团订单 ID。
  - `auditResult`（`integer`，必填）：美团要求：整数 2 审核通过，整数 3 审核未通过，不能使用字符串；网关透传并由平台判定。；默认值：2；可选值：2（同意）、3（拒绝）
  - `subOrderIds`（`array`，选填）：关联续时订单；如提供，须与消息中的列表逐项同序一致。

#### 请求示例

##### 同意退款

```json
{"platform":"meituan","shopId":100001,"requestId":"mc_example","biz":{"orderId":"示例订单ID","auditResult":2}}
```

#### 响应示例

##### 已记录，HTTP 202

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"status":"reply_recorded","requestId":"mc_example"}}
```

#### 补充说明

- **使用与消息一致的环境**：本页随站点选择预发或正式接口，答复入口必须与 MC 消息所属环境一致。requestId、账号与门店必须匹配该环境的原消息；技术调用状态不代表订单状态，是否接受业务操作由美团判定。

<a id="sports-message-query"></a>

### 查询消息处理状态

- 方法：`POST`
- URL：`https://newopen.elys.cn/api/v2/message-center/v1/requests/{requestId}/query`
- 在线调试风险：只读请求
- 授权：Bearer API Key 或 V2 Token。
- 说明：查询当前门店的开始预订或退款审核决策消息状态，不适用于同步查询或其他通知消息。已有答复时返回最近一次被 MC 接收的答复提交（submission）状态；旧任务完成不会覆盖较新答复的状态。completed 仅表示最近一次答复提交成功，不代表所有历史答复均已完成，也不代表订单状态。查询仅反映投递与平台调用结果。

#### Path 参数

- `requestId`（`string`，必填）：消息中心请求 ID。

#### JSON Body 参数

- `platform`（`string`，必填）：平台，目前仅支持 meituan。；默认值：meituan；可选值：meituan（美团）
- `shopId`（`number | string`，必填）：消息所属的无限聚核门店 ID。

#### 请求示例

##### 查询请求

```json
{"platform":"meituan","shopId":100001}
```

#### 响应示例

##### 最近一次答复提交成功，不代表所有历史答复均已完成

```json
{"success":true,"code":10000,"message":"","traceId":"trace_example","data":{"status":"queried","state":"completed","requestId":"mc_example","mode":"decision"}}
```

#### 补充说明

- **使用与消息一致的环境**：本页随站点选择预发或正式接口，答复入口必须与 MC 消息所属环境一致。requestId、账号与门店必须匹配该环境的原消息；技术调用状态不代表订单状态，是否接受业务操作由美团判定。

## 技术支持

接入过程中可联系无限聚核技术支持。
