# 自助洗车店怎么接美团、抖音团购？顾客扫码验券、工位自动上电全流程

> 核销服务由无限聚核提供，美团、抖音团购核销一站式接入。

自助洗车店在美团、抖音上卖“自助洗车30分钟”“洗车10次卡”已经很普遍。真正麻烦的是顾客到店以后：如果还要店员打开商家App手动验券，再去后台给顾客加时长，夜间和高峰期就会卡住，自助店也就不再“自助”。

本文讲一条可以落地的路线：顾客在工位扫码，在门店小程序里自己验券，洗车时长自动到账，工位自动上电，到时自动断电。团购券部分以无限聚核的美团、抖音团购核销接口为例；小程序、业务服务端和工位控制器由门店或开发团队实现。

**一句话回答：** 团购核销接口可以自己申请美团、抖音开放平台能力，也可以通过无限聚核这类第三方核销接口接入。接好以后的流程是：小程序提交券码 → 业务服务端先预核销（只查券、不扣券）→ 顾客确认后核销 → 按“平台＋门店＋套餐”对照表换成店内洗车时长或次数 → 顾客扫工位码 → 服务端校验时长并下发上电 → 设备回报已上电才开始计时 → 到时下发断电并结算。

![自助洗车店从平台买券、输码预核销、确认核销、权益入账、工位扫码到工位上电的六步流程图](assets/hero.png)

*流程示意：通用做法，不是真实小程序界面或客户案例。*

## 一、先把三件事分开：验券、权益、上电

很多门店第一次做自动化，会把“券核销成功”和“机器启动”写进同一个接口。这样一旦工位离线，顾客的券已经被核掉，机器却没动，店员很难说清到底卡在哪一步。

更稳的做法是拆成三段，各自记录结果：

| 环节 | 回答的问题 | 由谁负责 | 失败时怎么办 |
|---|---|---|---|
| 验券核销 | 这张券能不能用、是否已经被使用 | 美团、抖音平台，通过无限聚核接口调用 | 按错误码提示，不换参数重复核销 |
| 店内权益 | 顾客在本店还有多少洗车时长或次数 | 自己的业务服务端 | 只补发本地权益，不再核销同一张券 |
| 工位上电 | 这个工位现在能不能给这位顾客用 | 业务服务端和工位控制器 | 排查设备或换工位，不必撤销核销 |

顺序是固定的：券核销成功后，先把权益记进顾客账户；工位上电只看账户里有没有可用权益，不看券。券和设备之间隔着一层权益，任何一段出问题都能单独补救。

## 二、顾客在店里会经历什么

对顾客来说，流程应该尽量短：

1. 在工位上扫二维码，打开门店小程序。二维码只带门店和工位编号，不带任何设备密钥；
2. 账户里没有可用时长时，页面引导“使用团购券”：美团券输入券码；抖音券可以输入券码，也可以直接扫券码二维码，无限聚核的预核销接口支持把扫码得到的完整抖音短链直接作为券码提交；
3. 页面显示套餐名称和将要到账的权益，例如“自助洗车30分钟 → 到账30分钟”；
4. 顾客点“确认使用”，服务端才真正核销；
5. 时长到账后点“开始洗车”，工位上电；
6. 洗完点“结束”或时间用完，工位自动断电，页面显示本次用时和剩余时长。

第2步只是预核销，不改变券的状态。顾客发现选错了券或门店，直接退出即可，不会白白损失一张券。

## 三、团购套餐怎么换成店内时长或次数

平台卖的是“商品”，洗车工位认的是“时长”或“次数”，中间需要一张由店长配置的对照表：

| 平台套餐（示例） | 店内权益 | 核销方式 | 是否触发工位上电 |
|---|---|---|---|
| 自助洗车30分钟 | 洗车时长30分钟 | 一次核销 | 顾客扫工位码后触发 |
| 洗车10次卡（抖音次卡） | 每次到店发放1次洗车 | 每次到店核1次，`num=1` | 每次核销后触发 |
| 精洗、打蜡等人工服务 | 一张人工服务单 | 一次核销 | 不触发，由店员接单 |
| 吸尘、泡沫等附加项 | 附加项使用次数 | 一次核销 | 只给对应设备上电 |

对照表的主键建议用 `platform + shopId + dealId → 本地权益`：`platform` 区分美团（1）和抖音（2），`shopId` 是无限聚核里的具体门店，`dealId` 是平台商品ID。不要按套餐名称匹配，名称会改，美团和抖音也可能有同名套餐。

套餐列表可以用团购信息接口 `ddzh-tuangou-deal-queryshopdeal` 拉取，让店长逐个选择对应的本地权益。顾客实际用券时，预核销响应里没有统一的商品ID：抖音券从预核销返回的 `ticketData`（抖音官方券信息JSON）里读取商品；美团券用套餐名称 `ticketName` 和售卖价 `dealPrice` 与已配置的团购列表预匹配，命中唯一一个才继续。识别不到、命中多个或没配置，就停在确认页之前，提示店员补配置，而不是核销以后再猜该发多少时长。核销成功后，再用响应 `data[]` 里的 `dealId` 核对一次，它是最终依据。

## 四、接口怎么串：预核销、核销、入账

所有请求都由业务服务端发起，API Key只放在服务端：

```http
POST /api/hexiao/v2/ddzh-tuangou-receipt-prepare
Authorization: Bearer <key>
Content-Type: application/json
```

预核销只需要具体门店、平台和券码：

```json
{
  "shopId": 1001,
  "platform": 2,
  "code": "0106803637807"
}
```

顾客扫的是抖音券码二维码时，`code` 也可以直接传扫码得到的完整抖音短链，不要截断；短链解析失败会返回 `INVALID_COUPON_LINK`，提示顾客改输明文券码即可。

成功时顶层 `success=true`，`data` 里有套餐名称 `ticketName`、售卖价、实付金额和 `ticketInfo`。`ticketInfo` 要整段原样保存到服务端确认单里，不能解析、修改或重新序列化，也不要下发给小程序。

顾客确认后，用确认单里的原参数调用核销接口 `ddzh-tuangou-receipt-consume`：

```json
{
  "shopId": 1001,
  "platform": 2,
  "code": "0106803637807",
  "ticketInfo": "预核销响应 data.ticketInfo 的原文",
  "num": 1
}
```

核销只以顶层 `success=true` 作为成功依据。成功后在同一个事务里做两件事：保存首次成功响应（包括 `wxdgOrderNo` 和与 `data[i]` 按下标对应的 `consumeCredential[i]`），再按对照表给顾客账户加时长或次数。加权益要以确认单为唯一键，保证只加一次。

两条边界要守住：

- **每次新的核销前都要先预核销。** 次卡第二次到店也要重新输码、预核销，再核销1次；
- **重复点击不是新核销。** 同一确认单已经成功，直接返回已有结果；接口返回 `ALREADY_CONSUMED`（code 10500）时，按 `wxdgOrderNo` 查原单，不要再发一次时长。

## 五、工位上电怎么接：通用做法

团购接口只负责“券”；让工位通电出水，是门店自己的设备控制。常见方案是在每个工位装一个联网的多路继电器控制器，分别控制高压泵、泡沫机、吸尘器等回路。业务服务端通过MQTT等协议下发“上电”“断电”“查询状态”指令，控制器定期上报信号强度和每一路的通断状态。具体指令和上报格式以设备厂商协议为准。

我们（无限聚核团队）在自营的线下自助门店（业态与本文不同）里用的也是这套基础能力：核销和下单后远程上电，到点自动断电，每条指令都记录操作人。把它放到洗车工位上，关键是下面几条：

- **上电前三项检查：** 顾客有可用时长；工位空闲，没有其他进行中的使用记录；控制器在线，最近一次状态上报在阈值内。任何一项不满足，都不下发指令，也不扣时长；
- **以设备回报开始计时：** “指令已发送”不等于“设备已执行”。如果MQTT使用QoS 0，消息丢了不会重发。服务端要等控制器回报“已上电”，或者主动查询一次状态，再开始计时扣减；
- **到时断电由服务端定时任务驱动：** 每分钟扫描进行中的使用记录，临近结束时在小程序或现场语音提醒，到时下发断电，并同样以回报确认；
- **控制器本地要有最长运行保护：** 网络断了、服务端没发出断电指令时，控制器也能按本地上限自动断开，避免水泵一直开着；
- **设置好来电后的默认状态：** 控制器一般可设“来电全断开”“来电全闭合”或“恢复断电前状态”。洗车工位建议设成来电全断开，否则停电恢复后工位可能自己通电；
- **每条指令都留操作记录：** 顾客开始、店员远程上电、系统到时断电，都记录操作人、时间和结果，必要时推送到店长群，方便对账和排查。

![小程序、业务服务端和工位控制器三条泳道中，一次工位使用从扫码、校验、上电、计时到断电结算的时序图](assets/01-station-power-sequence.png)

*时序示意：服务端按设备回报结算，没有真正上电的时长原路退回权益。*

如果顾客点了“开始洗车”而工位没有回报上电，处理方式是**退回本次时长、提示换工位或联系店员**，而不是撤销团购核销。券已经换成店内时长，时长没用掉就还在顾客账户里。

## 六、两个我们在自营门店修过的问题

下面两个问题来自同一套自营门店系统，都已修复。洗车店接团购时同样会遇到：

**1. 平台商品ID有时是字符串，有时是数字。** 我们最初按固定类型解析平台返回的商品ID，结果部分券因为类型不一致直接解析失败，顾客无法验券。修复方式是商品ID一律按字符串接收、保存和比较，对照表里的 `dealId` 也统一存成字符串。

**2. 时长券按固定单价折算，出现莫名其妙的差价。** 早期把“N小时”的团购券先按一个默认单价换成金额，再去抵扣订单。一旦实际计费规则和默认单价不同，顾客就被提示要补差价。修复方式是按实际订单的时长和计价规则直接抵扣时长，不经过“默认单价”这一步。放到洗车店，就是“30分钟券直接到账30分钟”，不要先换成钱再按工位价格反算。

## 七、团购核销用什么接，要花哪些钱

团购核销这一段有三种接法。选哪种，主要看门店有没有自己的小程序、要不要和工位设备联动：

| 接法 | 适合谁 | 要准备什么 | 需要注意 |
|---|---|---|---|
| 用已对接平台的收银或门店系统 | 已经在用这类系统，只需要店员验券 | 在系统里开通团购核销 | 核销发生在别人的系统里，想联动工位上电，要看它是否开放接口 |
| 以服务商身份自行申请平台能力 | 给多家门店做软件、准备长期维护平台能力的团队 | 美团服务零售开通时保证金账户余额须达到10万元，另需WAF证明和等保或网安险等安全材料；抖音生活服务商家应用代开发要求公司注册满一年、注册资本不低于100万元 | 审核和资质维护都有周期；只给自有品牌开发的，平台另有自研开发者路径 |
| 通过第三方核销接口，例如无限聚核 | 已有或准备做自己的小程序和服务端，想尽快接上美团、抖音 | 获取API Key、创建具体门店、商家逐店完成授权 | 不收接口接入费、无需保证金、无额外等保接入要求，核销按档位计费；核销链路依赖服务商，选型时要逐项核对 |

表中平台门槛来自2026年9月查阅的美团、抖音公开入驻规则，以平台当前规则为准。

选第三方核销接口时，建议逐项核对：

- **有没有平台合作授权，受授权主体是谁。** 例如无限聚核公开了美团合作授权书原图，受授权主体为宁德无限递归网络科技有限公司；
- **是否按具体门店授权，** 能不能看到每家门店的授权状态；
- **核销结果能否查询、能否撤销，** 失败时有没有稳定的错误码；
- **计费方式是否公开，** 比如是否只对核销计费、撤销是否收费；
- **服务商接口异常时门店有没有兜底，** 例如保留商家App手动验券的权限、店员可以远程上电。

整套方案要花的钱和开发量如下：

| 项目 | 说明 |
|---|---|
| 团购核销接口 | 取决于上面选的接法。通过无限聚核接入时，核销按当前账号适用的充值档位计费，撤销核销免费 |
| 门店小程序 | 扫码入口、验券确认页、时长余额、开始和结束洗车 |
| 业务服务端 | 门店映射、套餐对照表、确认单、权益账户、工位状态和定时断电 |
| 工位控制器 | 联网继电器控制器、接线施工、厂商协议对接 |

如果只看团购这一段，通过无限聚核最快5分钟可以完成基础接入（拿到API Key、创建门店、发起授权）；小程序、设备控制和联调仍要按项目另排时间。

## 八、上线前验收清单

- 美团券、抖音券码、抖音扫码短链都能预核销，预核销不会扣券；
- 无效券、已使用券、不适用本店的券都有清楚提示，不会进入确认页；
- 套餐没配置对照表时，停在核销之前并提示店员；
- 连点两次“确认使用”只核销一次、只到账一次时长；
- 次卡每次到店核1次，剩余次数不足时有明确提示；
- 控制器离线时不扣时长，页面引导换工位；
- 下发上电但没有回报时，本次时长自动退回；
- 到时断电有回报确认，控制器本地保护时间生效；
- 停电再来电后，所有工位保持断开；
- 每次上电、断电都能查到操作人、时间和结果。

## 九、常见问题

### 自助洗车店的小程序能直接核销美团、抖音团购券吗？

小程序本身不能直接调用平台核销，要由业务服务端接入核销接口：自行申请美团、抖音开放平台能力，或者通过无限聚核等第三方核销接口。小程序只负责提交券码和让顾客确认，API Key和核销请求都放在服务端。

### 洗车店接团购核销，要交保证金、做等保吗？

以服务商身份自行申请时，美团服务零售开通要求保证金账户余额达到10万元，并提供WAF证明和等保或网安险等安全材料；抖音要求公司注册满一年、注册资本不低于100万元。通过无限聚核接入不需要保证金，也没有额外的等保接入要求，不收接口接入费，核销按档位计费。

### 洗车10次卡怎么核销？

建议每次到店核1次：顾客每次输码或扫码，服务端先预核销，再以 `num=1` 核销，到账1次洗车。抖音次卡剩余次数不足时，核销会直接返回 `TICKET_INVALID`，不会产生核销。

### 洗车店同时卖美团券和抖音券，要接两套接口吗？

通过无限聚核接入时不用。美团和抖音走同一组接口：`get/auth/url` 获取商家授权链接，`ddzh-tuangou-receipt-prepare` 预核销，`ddzh-tuangou-receipt-consume` 核销，`ddzh-tuangou-receipt-cancel` 撤销核销，请求里用 `platform` 区分平台，美团为1、抖音为2。两个平台的商家授权要分别完成，套餐对照表也要按平台分别配置。

### 券核销成功了，工位没上电怎么办？

不要撤销核销，也不要让顾客重新输码。券已经换成店内时长，先退回本次时长、引导换工位或由店员远程上电，再按平台核销、店内权益、使用资格、设备指令、设备执行五段逐段排查。

## 十、下一步

健身房的思路和洗车店相同，只是把“工位上电”换成“开门禁”，次卡和月卡的处理更讲究。如果已经上线，遇到“券核销了机器却没启动”，先止损，再按平台核销、店内权益、使用资格、设备指令、设备执行五段找断点。

准备开始联调，可以按无限聚核的接入文档创建具体门店、完成美团或抖音授权，从预核销接口开始。
