FITCARD

← 案例介绍

基础功能

一键登录
首页
会员中心
会员二维码弹窗
会员信息
切换门店

场馆 & 教练

场馆详情
教练列表
教练详情

课程 & 预约

课程商城
课程购买
预约课程
私教记录

会员卡 & 支付

健身卡列表
会员卡列表
会员卡购买

订单 & 其他

我的订单
会员卡激活
私教课激活
团购核销
人脸录入
首页

健身卡 App 产品需求文档

PRD - Product Requirements Document

版本: v2.0 日期: 2026-04-14 状态: 设计中

1项目概述

1.1 项目背景

随着健身行业数字化转型加速,传统健身房需要一套完整的会员管理移动端应用,实现会员卡管理、课程预约、教练匹配等核心业务的线上化。本项目旨在为健身俱乐部打造一款面向会员的移动端产品,提升会员体验和运营效率。

1.2 目标用户

  • 健身俱乐部现有会员:需要管理会员卡、预约课程、查看训练记录
  • 潜在新会员:了解场馆信息、教练资源,促进转化

1.3 产品目标

  1. 实现会员卡电子化,支持扫码签到和人脸签到
  2. 提供在线课程购买、会员卡购买和私教预约功能
  3. 搭建会员与教练的线上沟通桥梁
  4. 支持美团/抖音团购券在线核销
  5. 提升会员留存率和复购率

2功能架构

登录
首页
场馆
教练
我的
↓ 核心功能模块 ↓
扫码签到
课程预约
场馆浏览
教练选择
会员管理
训练记录
↓ v2.0 新增模块 ↓
课程购买
会员卡购买
人脸录入
团购核销
订单管理

3页面需求详细说明

3.1 首页

模块需求描述
门店切换顶部显示当前门店名称,点击可切换至其他门店
搜索支持搜索课程名称和教练姓名
轮播Banner展示运营活动和促销信息,自动轮播(3秒间隔),支持手动滑动
快捷入口4个快捷功能:扫码签到、预约课程、场馆介绍、私教服务
会员卡展示展示当前用户的会员卡信息(卡号、姓名、等级、有效期),支持查看全部卡片
热门课程横向滚动展示热门课程卡片(课程图片、名称、教练、时长),点击进入课程详情
底部Tab栏4个Tab:首页、场馆、教练、我的,支持Tab切换

3.2 会员中心

模块需求描述
用户信息区橙色渐变背景,展示用户头像、姓名、手机号、会员等级标签
数据统计3列展示:账户余额(元)、我的积分、剩余课程(节)
功能菜单8个菜单项:我的会员卡、预约记录、私教记录、我的教练、会员二维码、会员信息、意见反馈、关于我们

3.3 会员二维码弹窗

模块需求描述
弹窗展示从会员中心点击"会员二维码"弹出,半透明遮罩背景
二维码展示动态生成的会员专属二维码,包含会员唯一标识
会员信息头像、姓名、会员类型、卡号(脱敏显示)
关闭操作点击关闭按钮或遮罩区域关闭弹窗

3.4 会员信息

模块需求描述
头像编辑展示用户头像,支持点击更换头像(调用系统相机/相册)
基本信息只读展示:姓名、手机号、性别、生日、会员类型、开卡日期、到期日期
编辑模式点击右上角"编辑"进入编辑模式,可修改姓名、性别、生日
退出登录底部退出登录按钮,点击后弹出确认弹窗

3.5 切换门店

模块需求描述
定位信息获取用户当前位置,显示省市区信息
搜索门店支持按门店名称搜索
当前门店橙色边框高亮显示当前门店,右上角"当前门店"标签
门店列表展示所有门店的名称、详细地址、距离信息
切换操作点击门店卡片切换至对应门店,切换后首页数据更新

3.6 场馆详情

模块需求描述
场馆图片顶部展示场馆主图,支持多图轮播
基本信息名称、评分(五星制)、地址、营业时间、联系电话
设施标签展示场馆配套设施数据:有氧区、力量区、游泳池、瑜伽室、桑拿房等
场馆介绍富文本展示场馆详细描述
导航功能底部"导航到这里"按钮,调用第三方地图导航

3.7 教练列表

模块需求描述
分类筛选横向Tab筛选:全部、增肌、减脂、体能、康复、瑜伽
教练卡片展示:头像、姓名、性别、专长标签、评分、已授课数
预约按钮每张卡片右侧"预约"按钮,点击跳转预约页面
筛选功能右上角筛选图标,支持按评分、价格、距离等条件筛选

3.8 教练详情

模块需求描述
教练头部橙色渐变背景,展示头像、姓名、专长标签
数据统计3列展示:评分、已授课节数、教龄
个人简介展示教练的详细个人介绍
资质认证列表展示教练持有的专业认证
学员评价展示最新评价(头像、昵称、星级、内容、日期),支持"查看全部"
预约按钮底部固定"立即预约"按钮

3.9 预约课程

模块需求描述
选择教练横向滚动教练头像列表,选中状态橙色边框+勾选
选择日期横向滚动日期选择器,展示一周7天(星期+日期),已过日期不可选
选择时段9宫格时段选择:08:00-20:00共9个时段,已被预约的时段灰色不可选
课程类型单选列表:私教一对一(¥300/节)、私教一对二(¥200/节)、小团课(¥150/节)
确认预约底部显示合计金额+"确认预约"按钮,提交后生成预约记录

3.10 私教记录

模块需求描述
状态筛选4个Tab:全部、已完成、待上课、已取消,选中态橙色下划线
记录卡片展示:课程类型、状态标签、教练信息、上课时间
已完成显示课程评分,支持查看训练详情
待上课显示"取消预约"按钮,点击后二次确认取消
已取消灰色显示,不提供操作按钮

↓ v2.0 新增需求 ↓

3.11 一键登录 / 手机号登录

模块需求描述
一键登录读取本机手机号(运营商授权),显示脱敏号码(138****8888),点击即可登录。支持关闭页面返回
手机号登录输入手机号 + 短信验证码登录。未注册手机号自动创建新账号。60秒倒计时重发验证码
第三方登录支持微信、支付宝、Apple ID 三种第三方登录方式
协议确认登录页底部展示用户协议和隐私政策链接,登录即视为同意

3.12 首页(升级版)

模块需求描述
快捷入口升级由4个扩展为8个:扫码签到、预约课程、场馆、私教服务、买会员卡、课程商城、我的订单、人脸录入
团购核销入口新增美团/抖音团购核销推广入口卡片,点击进入团购核销页面
会员卡人脸标识会员卡右上角显示"已录入人脸"徽章,未录入时不显示
课程价格热门课程卡片增加价格展示(如¥300/节)

3.13 课程商城(课程列表)

模块需求描述
分类筛选横向Tab:全部、私教课、团课、瑜伽、搏击、康复
搜索支持按课程名称搜索
课程卡片展示课程图片、名称、专长标签、教练信息、时长、价格,右侧"立即购买"按钮
购买跳转点击"立即购买"进入课程购买页面

3.14 课程购买

模块需求描述
课程信息顶部展示课程名称、专长标签、教练、评分、销量
套餐选择单节体验/10节套餐(推荐)/20节套餐,显示原价和优惠价,选中态橙色边框
教练选择横向滚动教练头像列表,支持切换教练
优惠券展示可用优惠券数量,点击展开优惠券选择
支付底部固定合计金额 + "立即支付"按钮

3.15 会员卡列表/购买

模块需求描述
当前会员卡顶部橙色渐变卡片展示当前使用中的会员卡信息(名称、等级、卡号、有效期)
购卡列表展示可选会员卡:月卡(¥199)、季卡(¥499,推荐)、年卡(¥1,688),含原价/优惠价对比
权益对比每张卡下方标签展示包含权益(入场次数、团课、私教、设施等)
购买按钮底部固定"立即购买"按钮,价格跟随选中卡类型动态变化

3.16 会员卡购买(确认订单)

模块需求描述
商品信息展示购买的会员卡类型、描述、价格
订单信息适用门店、有效期、开始日期(可选)
优惠券展示已选优惠券优惠金额
支付方式微信支付/支付宝/余额支付,单选切换
协议确认需勾选同意《会员卡购买协议》和《人脸识别隐私协议》
确认支付底部显示实付金额(原价-优惠券)+ "确认支付"按钮

3.17 我的订单

模块需求描述
订单Tab4个Tab:全部/待使用/已完成/退款,选中态橙色下划线
订单卡片展示订单号、状态标签、商品图、名称、描述、规格、金额、下单时间
待使用操作按钮:"立即使用"(会员卡)/"去预约"(课程)/"申请退款"
已完成操作按钮:"再次购买"/"评价"
已退款显示原价删除线 + "已退款"标签,操作:"再次购买"
订单类型区分三种订单图标:会员卡(橙色)、课程(紫色)、团购(青色)

3.18 团购核销(美团/抖音)

模块需求描述
平台入口顶部展示美团、抖音两个平台图标,直观区分核销来源
输入券码手动输入团购券码,点击"立即核销"完成核销
扫码核销调用摄像头扫描团购二维码/条形码自动核销
核销记录列表展示历史核销记录:来源平台标签、券名、券码、状态(待核销/已核销/已过期)、购买/核销时间
多次核销支持多次使用的团购券(如3次卡),显示已用/总次数

3.19 人脸录入

模块需求描述
隐私协议强制展示人脸识别隐私协议弹窗,用户必须阅读并勾选同意后才能继续。协议内容涵盖信息收集、存储安全、用户权利、保留期限
人脸预览圆形人脸框预览区域,未录入时显示虚线框+人脸图标,录入成功后变绿色实线+勾选
录入提示展示录入注意事项:光线充足、正面、无遮挡、耗时5-10秒、加密存储
开始录入点击"开始录入"调用摄像头进行人脸采集,采集过程约2秒动画反馈
录入成功成功后展示绿色勾选图标、录入时间,按钮变为"重新录入"
跳过支持"稍后再说"跳过,后续可从会员中心菜单再次进入

3.20 会员卡激活

模块需求描述
前置条件用户已注册(手机号授权),已完成会员卡购买且订单状态为"待使用"。点击订单列表中的"立即激活"按钮进入激活流程
步骤条引导顶部3步骤引导条:完善资料 → 确认协议 → 激活成功,已完成步骤变绿色勾选,当前步骤橙色高亮
订单信息展示展示购买的会员卡信息卡片:卡类型、描述、价格、适用门店(橙色渐变卡片)
完善个人资料必填项:姓名(文本输入,最大20字)、性别(男/女单选按钮)。注册时仅授权了手机号,激活时需补充真实身份信息
有效期预览实时计算并展示激活时间和到期时间。激活时间为当天日期,到期时间根据卡类型自动计算(月卡+30天,季卡+90天,年卡+365天)
开卡须知协议展示《会员开卡须知》完整内容,包含:会员卡类型及权益、激活与有效期规则、使用规则、退卡退款政策、安全隐私条款、其他说明。用户必须勾选同意后才能激活
确认激活信息在协议下方汇总展示所有激活信息:会员姓名、性别、手机号、卡类型、门店、激活时间、到期时间,供用户最终确认
激活成功激活后弹出成功弹窗,展示:会员姓名、卡类型、卡号(系统自动生成)、激活时间、到期时间。底部"查看我的会员卡"按钮跳转会员卡页面
数据更新激活成功后:① 订单状态变更为"已完成" ② 创建会员卡记录(含卡号、有效期) ③ 用户会员等级更新 ④ 会员信息中补全姓名和性别

3.21 私教课激活

模块需求描述
前置条件用户已购买私教课且订单状态为"待使用"。点击订单列表中的"立即激活"按钮进入。用户必须已持有有效的会员卡,否则提示先激活会员卡
会员信息展示顶部展示已绑定的会员信息(橙色渐变卡片):头像、姓名、会员等级标签、手机号(脱敏)、会员卡号、有效期。状态标签显示已验证
课程信息展示展示购买的课程信息(紫色渐变卡片):课程名称、教练姓名及专长、订单号
激活确认详情展示激活明细:课程套餐(如10节套餐)、订单金额、教练及评分、适用门店
课程数展示大字号突出显示激活的课程数量(如"10节课"),附带有效期天数、单节时长、课程类型等详细信息
时间展示并排展示激活时间和到期时间。激活时间为当天,到期时间根据课程套餐有效期自动计算(如10节套餐有效期90天)
温馨提示展示课程使用注意事项:①有效期内完成预约 ②提前预约及取消规则 ③教练绑定规则 ④过期作废说明
激活成功激活后弹出成功弹窗(紫色主题),展示:会员姓名、课程名、教练、课程数(紫色高亮)、有效期范围。底部"立即预约课程"按钮跳转预约页面
数据更新激活成功后:① 订单状态变更为"已完成" ② 创建私教课记录(含剩余课时、有效期) ③ 课程绑定到指定教练 ④ 用户"剩余课程"数据更新

4非功能性需求

维度要求
性能页面首屏加载 < 2秒,接口响应 < 500ms
兼容性iOS 13+、Android 8+,主流屏幕适配(375px - 428px)
安全用户数据加密存储,API接口HTTPS传输,敏感信息脱敏显示
可用性99.9% 系统可用性,支持灰度发布和快速回滚
设计规范主色 #FF6B00,卡片圆角 12px,底部Tab栏固定,遵循iOS/Android设计规范

5核心数据模型

实体关键字段
会员姓名、手机号、性别、生日、会员类型、余额、积分、开卡日期、到期日期、所属门店、人脸特征ID
会员卡卡号、卡类型(月卡/季卡/年卡)、状态、有效期、余额、权益列表
教练姓名、性别、专长标签、评分、教龄、已授课数、资质认证、个人简介、所属门店
课程课程名称、课程类型、教练、时长、价格、容纳人数、套餐选项
预约记录会员、教练、课程类型、预约日期、时段、状态(待上课/已完成/已取消)、评分
门店名称、地址、经纬度、营业时间、联系电话、设施列表、评分
订单订单号、用户、商品类型(会员卡/课程/团购)、商品ID、金额、优惠券、支付方式、状态(待使用/已完成/退款)、创建时间
团购券券码、来源平台(美团/抖音)、商品名、总次数/已用次数、状态(待核销/已核销/已过期)、购买时间、有效期
人脸特征会员ID、特征向量(加密)、录入时间、状态

6核心交互流程

6.1 课程预约流程

选择教练
选择日期
选择时段
选择课程类型
确认预约

6.2 签到流程

点击扫码签到
调用摄像头扫码
验证会员身份
签到成功

6.3 会员二维码签到流程

进入会员中心
点击会员二维码
出示二维码
前台扫码核销
签到成功

6.4 课程购买流程(新增)

浏览课程商城
选择课程
选择套餐
选择教练
使用优惠券
支付完成

6.5 会员卡购买流程(新增)

选择卡类型
确认订单
选择支付方式
同意协议
支付完成

6.6 人脸录入流程(新增)

进入人脸录入
展示隐私协议
用户同意协议
调用摄像头
采集人脸
录入成功

6.7 团购核销流程(新增)

进入团购核销
输入券码/扫码
验证券码有效性
核销成功

6.8 会员卡激活流程(新增)

订单列表点击"立即激活"
填写姓名+选择性别
确认开卡须知协议
确认激活信息
激活成功
关键规则说明
注册信息补全用户注册时仅授权手机号,激活会员卡时强制要求补全姓名和性别
有效期计算激活当天为起始日,到期日 = 激活日 + 卡类型天数(月卡30/季卡90/年卡365)
协议确认必须勾选同意《会员开卡须知》后才能激活,协议包含退卡退款等关键条款
激活后状态订单变为"已完成",同时生成会员卡记录和会员卡号
退卡规则激活后7天内可退款(扣除已使用天数费用),超过7天不可退款

6.9 私教课激活流程(新增)

订单列表点击"立即激活"
验证会员卡有效性
展示会员+课程信息
确认激活时间和课程数
激活成功
关键规则说明
会员卡校验激活私教课前必须先拥有有效的会员卡,无会员卡时引导先激活会员卡
信息展示自动读取并展示已绑定的会员信息(姓名、卡号、有效期),供用户确认
课程数确认大字号突出显示购买的课程数量,明确有效期范围
教练绑定激活时绑定购买时选择的教练,后续更换需联系前台
过期规则有效期内未上完的课程自动作废,不予退款

7版本规划

版本功能范围优先级
v1.0首页、会员中心、场馆浏览、教练列表、课程预约、私教记录P0
v2.0一键登录、课程商城与购买、会员卡购买、人脸录入、团购核销(美团/抖音)、订单管理P0
v2.1扫码签到、消息推送、意见反馈、社交分享P1
v3.0训练数据分析、AI教练推荐、社区功能、积分商城P2

8多场馆微信支付架构

8.1 方案选型:微信支付服务商模式

本项目采用微信支付服务商模式(API v3),实现"一套小程序 + 多场馆独立收款"的核心需求。该方案的优势:

对比维度服务商模式(已选)普通商户模式
小程序数量仅需 1个小程序,通过 sub_mchid 区分收款方每个场馆需单独注册小程序,维护成本高
资金流向用户付款 → 直达子商户账户(场馆),不经平台收款到单一商户号,需手动分账或转账
商户入驻平台代入驻,场馆无需自行对接微信支付每个场馆自行申请商户号,审核周期长
手续费平台可自定义抽佣比例,微信按子商户分别计费统一费率,无法差异化
结算周期T+1 自动结算到各场馆对公账户T+1 结算到单一账户

8.2 核心架构

┌─────────────────────┐
│   微信小程序 (1个)    │  ← 服务商的 AppID(sp_appid)
│    FITCARD 健身卡     │
└──────────┬──────────┘
           │ 下单请求(携带 store_id)
┌──────────▼──────────┐
│    后端服务 (1套)     │  ← 根据 store_id 查询对应的 sub_mchid
│  payment-service    │
└──────────┬──────────┘
           │ 调用微信支付 API(JSAPI)
┌──────────▼──────────┐
│   服务商商户号        │  ← sp_mchid(仅发起支付,不收款)
│   (父商户号)         │
└──────────┬──────────┘
           │
    ┌──────┴──────┬───────────┬───────────┐
    ▼             ▼           ▼           ▼
┌────────┐  ┌────────┐  ┌────────┐  ┌────────┐
│子商户A  │  │子商户B  │  │子商户C  │  │子商户D  │
│北京旗舰店│  │上海国贸店│  │深圳南山店│  │杭州西湖店│
│sub_mchid│  │sub_mchid│  │sub_mchid│  │sub_mchid│
└────────┘  └────────┘  └────────┘  └────────┘
    ▲             ▲           ▲           ▲
    └─────────────┴───────────┴───────────┘
              资金直达各场馆账户,不经平台

8.3 关键配置参数

参数说明示例
sp_appid服务商关联的小程序 AppID(全局唯一)wx1234567890abcdef
sp_mchid服务商商户号(父商户号,仅发起支付)1234567890
sub_appid子商户关联的小程序 AppID(与服务商相同,因共用 1 个小程序)wx1234567890abcdef
sub_mchid子商户号(每个场馆一个,实际收款账户)门店A: 100001 / 门店B: 100002
sp_api_key服务商 API v3 密钥,用于签名和验签服务端安全存储
serial_no服务商 API 证书序列号用于请求头签名

8.4 数据库设计

字段说明
stores(场馆表)store_id场馆唯一标识(主键)
store_name场馆名称,如"北京旗舰店"
sub_mchid该场馆对应的微信支付子商户号
sub_mchid_status子商户状态:PENDING(审核中)/ ACTIVE(已激活)/ FROZEN(冻结)
commission_rate平台抽佣比例(万分之几),如 50 = 0.5%
orders(订单表)order_id订单号(唯一)
store_id订单归属场馆
sub_mchid实际收款的子商户号(冗余存储,防止场馆变更)
transaction_id微信支付流水号(支付成功后回填)
pay_status支付状态:UNPAID / PAID / REFUNDED / CLOSED

8.5 支付流程

8.5.1 统一下单流程

用户选择商品
携带 store_id 请求后端
查询 sub_mchid
创建订单记录
调用 JSAPI 下单
步骤操作说明
1用户在小程序选择商品并下单前端将 store_id(当前场馆)+ 商品信息 + 金额发送至后端
2后端查询场馆对应的子商户号SELECT sub_mchid FROM stores WHERE store_id = ? AND sub_mchid_status = 'ACTIVE'
3后端创建本地订单生成 order_id,记录 store_id、sub_mchid、金额、商品信息,状态设为 UNPAID
4调用微信 JSAPI 统一下单POST /v3/pay/partner/transactions/native
请求参数中携带 sp_appid、sp_mchid、sub_appid、sub_mchid
5返回 prepay_id 给前端后端签名后返回支付参数,前端调用 wx.requestPayment 唤起支付
6用户完成支付资金从用户账户 → 直达 sub_mchid(场馆账户),不经过服务商
7接收支付结果通知微信回调后端 notify_url,后端验签后更新订单状态为 PAID
8前端查询支付结果轮询后端接口确认支付状态,展示支付成功页面

8.5.2 关键 API 调用(JSAPI 统一下单)

POST https://api.mch.weixin.qq.com/v3/pay/partner/transactions/jsapi
Content-Type: application/json
Authorization: WECHATPAY2-SHA256-RSA2048 ...

{
  "sp_appid":  "wx1234567890abcdef",   // 服务商小程序 AppID
  "sp_mchid":  "1234567890",            // 服务商商户号
  "sub_appid":  "wx1234567890abcdef",   // 子商户 AppID(共用小程序)
  "sub_mchid":  "100001",                // ← 核心:根据 store_id 动态切换
  "description":  "季卡会员 - 北京旗舰店",
  "out_trade_no": "ORDER20260415001",
  "notify_url":   "https://api.fitcard.com/pay/notify",
  "amount": {
    "total":    49900,        // 单位:分(¥499.00)
    "currency": "CNY"
  },
  "payer": {
    "sp_openid": "oXXXX..."  // 用户在服务商小程序下的 openid
  }
}

8.6 回调通知处理

步骤操作说明
1接收微信回调POST 请求到 notify_url,请求体为 AES-256-GCM 加密的 JSON
2解密并验签使用 API v3 密钥解密,验证签名防止伪造通知
3幂等校验通过 out_trade_no 查询订单,若已处理则直接返回成功(防止重复通知)
4更新订单状态更新为 PAID,记录 transaction_id、支付时间
5触发业务逻辑激活会员卡 / 发放课程 / 发送支付成功消息
6返回成功响应HTTP 200 + {"code":"SUCCESS","message":"成功"},否则微信会重试

8.7 退款流程

用户申请退款
后端校验退款条件
调用退款 API
资金原路退回
项目说明
退款 APIPOST /v3/refund/domestic/refunds,需携带 sp_mchid + sub_mchid
资金来源从子商户(场馆)账户扣除,退回用户微信账户
部分退款支持,通过 amount.refund 指定退款金额(≤ 订单金额)
退款通知退款成功后微信异步通知,后端更新订单状态为 REFUNDED
退款时效1-3 个工作日到账,微信会发送退款到账消息给用户

8.8 场馆(子商户)入驻流程

场馆提交资料
平台代为申请入驻
微信审核(1-5天)
审核通过
生成 sub_mchid
入驻资料说明
营业执照场馆运营主体的营业执照照片
法人身份证正反面照片
对公账户场馆名称一致的对公银行账户信息(开户行、账号)
联系人信息超级管理员的姓名、手机号、邮箱
商户简称用户支付时看到的商户名,如"FITCARD·北京旗舰店"

8.9 安全与风控

安全项实现方案
通信安全全部使用 HTTPS,API v3 基于 SHA256-RSA2048 签名验签
密钥管理API v3 密钥、商户私钥均存储在服务端环境变量或 KMS 中,禁止硬编码
回调验签必须验证回调签名(Wechatpay-Timestamp + Wechatpay-Nonce + Body),防止伪造通知
幂等处理所有支付/退款回调必须做幂等校验,通过 out_trade_no 去重
金额校验回调中的金额必须与本地订单金额一致,防止金额篡改
订单超时下单时设置 time_expire(建议 30 分钟),超时未支付自动关闭订单
防重复支付同一 order_id 只允许一次成功支付,支付前检查订单状态

8.10 对账与结算

项目说明
自动结算微信 T+1 自动将子商户交易款结算到场馆对公账户,平台无需干预
平台抽佣通过微信支付的"分账"功能实现:支付成功后按 commission_rate 将佣金分到服务商账户
对账方式每日调用 /v3/bill/tradebill 下载当日交易账单,与本地订单数据核对
对账字段out_trade_no(订单号)+ transaction_id(微信流水号)+ total_fee(金额)+ trade_state(状态)
差异处理自动对账发现差异时生成告警,运营人工核实

8.11 后端接口设计

接口方法说明
/api/pay/createPOST创建支付订单。入参:store_id, goods_type, goods_id, amount;返回:prepay_id 签名参数
/api/pay/notifyPOST微信支付回调。验签 → 解密 → 幂等校验 → 更新订单 → 返回 SUCCESS
/api/pay/query/{order_id}GET前端主动查询支付状态,兜底回调未到的场景
/api/refund/createPOST申请退款。入参:order_id, refund_amount, refund_reason
/api/refund/notifyPOST退款回调通知。验签后更新订单状态为 REFUNDED
/api/store/bind-sub-mchidPOST场馆入驻审核通过后,绑定 sub_mchid 到 store_id(运营后台调用)

8.12 异常场景处理

异常场景处理方案
子商户未激活(sub_mchid_status ≠ ACTIVE)前端提示"该场馆暂不支持在线支付",引导到店办理
支付超时(30分钟未支付)后端定时任务扫描超时订单,调用关单接口关闭后标记 CLOSED
回调未收到前端轮询 /api/pay/query 兜底查询,后端在 T+1 对账时补单
用户切换场馆后支付每次下单时从当前 store_id 动态获取 sub_mchid,不缓存
同一用户多场馆有会员卡会员卡绑定 store_id,购买时使用对应场馆的 sub_mchid 收款
网络异常导致重复下单前端做防重复提交(按钮 loading 态 + 请求去重),后端做幂等校验

9美团/抖音团购核销接入

9.1 美团团购核销 — 开通申请流程

美团团购核销接入需通过美团技术服务合作中心完成,分为服务商和自研品牌商两种身份。

身份类型适用对象特点
三方服务商SaaS公司、软件开发商需缴纳保证金,可服务多品牌
自研品牌商连锁品牌自有研发团队仅限自有品牌门店使用

第一步:官网注册

  • 访问 美团技术服务合作中心(developer.meituan.com)
  • 点击「注册」,选择对应身份类型(服务商 / 自研品牌商)

第二步:提交资质材料

材料类型具体要求
基本资质营业执照、法人身份证、申请人手持身份证照片
安全资质(上线必需)二级等保备案证明 或 网络信息安全险 + Web应用防火墙
软件著作权自研品牌商必须提供,服务商可选
承诺书《服务商数据交互合规化承诺书》

第三步:审核与签约

  1. 运营审核(通常 1-2 个工作日)
  2. 法人/授权人短信实名认证
  3. 签订电子合同
  4. 缴纳保证金(服务商需缴纳,金额根据业务评估自动生成)

第四步:获取开发者凭证

审核通过后,在控制台获取 developerIdSignKey,用于后续 API 调用签名。

9.2 美团团购核销 — 技术对接流程

商户授权绑定
查询可用团购
用户出示券码
调用核销接口
核销完成
接口功能接口路径说明
获取授权链接/api/groupBuy/getScopeUrl引导商户授权门店绑定
查询团购券适用门店查询接口获取门店可用团购套餐
核销验券/partner/tuangou/receipt/consume传入券码完成核销
撤销核销对应撤销接口核销后 1 小时内可撤销
重要提示说明
接口版本原北极星开放平台已下架,新对接需使用美团技术服务合作中心新接口
券码安全券码已加密,建议不要展示给用户,直接调用接口核销
批量核销最多支持单次 50 张券
撤销时效核销后 1 小时内可撤销,超时不可撤销

9.3 抖音团购核销 — 开通申请流程

抖音团购核销接入需通过抖音开放平台完成,创建生活服务商家应用。

第一步:前置准备

  • 入驻 抖音来客(life.douyin.com),获取来客账户 ID

第二步:创建应用

  • 访问抖音开放平台(open.douyin.com)
  • 注册并认证「生活服务商家应用代开发」能力
  • 平台审核周期约 10 个工作日

第三步:对公认证

  • 在「认证服务能力 - 对公认证」页签完成对公认证

第四步:申请接口权限

权限名称permission_key用途
门店管理-同步门店信息
商品查询-查询团购商品
团购核销12核心核销验券能力
团购核销对账-财务对账

9.4 抖音团购核销 — 技术对接流程

获取 Client Token
商家授权
验券准备接口
确认核销接口
核销完成

关键接口调用

1. 获取 Access Token

GET https://open.douyin.com/oauth/client_token/
    ?grant_type=client_credential
    &client_key={APPID}
    &client_secret={APP_SECRET}

2. 验券准备(查询券状态)

  • 从用户出示的二维码 URL 中提取 encrypted_data 参数
  • URL 格式:https://developer.toutiao.com/api/apps/trade/v2/share?encrypted_data=xxx

3. 确认核销

  • 调用核销接口完成验券,接口需确保幂等性设计,避免重复核销
重要提示说明
权限要求必须获得商家授权 permission_key=12(团购核销权限)
二维码数据encrypted_data 是加密字符串,只需提取参数值,不要感知 URL 其他部分
常见错误码参数错误(10000)、系统错误(13000)、二维码失效

9.5 集成方案对比

维度美团团购核销抖音团购核销
入驻门槛高(需等保/防火墙)中等(需对公认证)
审核周期1-2 个工作日约 10 个工作日
保证金服务商需缴纳
接口权限需申请开通需单独申请 permission_key=12
核销方式输入券码 / 扫码扫码提取加密数据
撤销机制支持 1 小时内撤销需查看具体接口文档
数据同步支持查询团购套餐映射支持门店/商品同步

9.6 小程序统一核销架构

建议采用统一核销网关设计,将美团和抖音的核销差异封装在后端,前端保持统一体验:

┌─────────────────────┐
│   微信小程序          │
│  (核销入口页面)       │  ← 统一 UI,用户无需感知平台差异
└──────────┬──────────┘
           │ 券码/扫码数据
┌──────────▼──────────┐
│   核销网关服务        │  ← 自动识别券码类型,路由到对应平台
│  (统一后端服务)       │
└──────────┬──────────┘
           │
    ┌──────┴──────┬──────────┐
    ▼             ▼          ▼
┌───────┐  ┌───────┐  ┌───────┐
│美团API │  │抖音API │  │其他平台│  ← 可扩展接入更多团购平台
└───────┘  └───────┘  └───────┘

核心功能模块

模块功能说明
券码识别自动识别美团券码(纯数字)vs 抖音二维码(加密 URL)
渠道路由根据券码格式自动路由到对应平台 API
状态管理查询券状态:未使用 / 已使用 / 已过期 / 已退款
核销确认展示券详情后二次确认,避免误操作
撤销功能支持异常时撤销核销(美团 1 小时内)
对账同步每日同步核销记录用于财务对账

9.7 注意事项

美团侧

  • 必须完成二级等保和防火墙采购才能上线(硬性要求)
  • 建议通过第三方服务商接口降低接入成本(如已有服务商资质)
  • 批量核销注意单次上限 50 张

抖音侧

  • 需先入驻抖音来客,再创建开放平台应用(顺序不可颠倒)
  • 苹果开发者账号必须注册,否则 iOS 用户无法看到核销入口
  • 小程序内不允许上线外卖/配送能力,仅限到店核销

通用建议

  • 两个平台核销流程差异较大,建议抽象统一核销模型(输入 → 查询 → 确认 → 结果)
  • 务必做好幂等性控制,防止网络重试导致重复核销
  • 建议先接入沙箱环境测试,再申请正式权限
  • 核销记录需持久化存储,支持后续对账和争议处理

参考文档

  • 美团技术服务合作中心:developer.meituan.com
  • 抖音开放平台:open.douyin.com/platform/doc
  • 抖音来客:life.douyin.com