
随着本地生活服务线上化程度的不断加深,用户对团购、优惠券、预约核销等便捷功能的需求日益增长。为提升现有小程序的商业转化效率与用户体验,本次二次开发旨在新增“团购核销”模块,并与主流大平台来客系统实现数据互通。通过该功能,商户可高效核销来自第三方平台的团购券、代金券及会员权益,同时实现订单数据、核销记录与用户信息的实时同步,降低人工对账成本,提升门店运营效率。
核心目标:
在小程序内嵌入独立的团购核销管理面板,支持扫码、手动输入两种核销方式。
打通大平台来客系统的开放接口(API),实现券码状态双向同步。
确保核销操作在2秒内完成响应,并生成不可篡改的核销日志。
设计容错机制,应对网络延迟、重复核销、过期券码等异常场景。
2.1 技术栈扩展
小程序端:基于原有框架(如原生开发或主流跨端方案),新增核销专用页面与组件。
后端服务:采用分布式架构,核销请求通过独立微服务处理,避免阻塞主业务。
数据库:主库存储核销记录,缓存中间件用于临时存储高频核销令牌。
接口通信:与大平台来客系统间使用HTTPS+JSON格式,采用令牌鉴权与签名验证。
2.2 数据流架构
关键设计点:
使用消息队列处理核销后异步任务(如积分发放、库存扣减)。
本地数据库定期从大平台拉取券码批次白名单,降低实时依赖风险。
3.1 核销入口权限控制
仅授予经过实名认证的商户管理员及门店核销员账号权限。
登录小程序后,根据角色动态展示“团购核销”菜单;非授权用户不可见。
支持多门店模式:核销员仅能核销归属本门店的券码,总部账号可查看全部门店核销报表。
3.2 双模式核销操作流程
| 核销方式 | 操作步骤 | 适用场景 |
|---|---|---|
| 扫码核销 | 1. 打开小程序核销页 → 2. 唤起摄像头扫描用户出示的券码条形码/二维码 → 3. 自动解析并校验 → 4. 确认无误后点击“确认核销” | 前台快速验证,用户无需手动输入 |
| 手动核销 | 1. 选择“手动输入” → 2. 输入用户提供的12-18位券码 → 3. 点击查询 → 4. 系统展示券详情 → 5. 核销 | 用户券码模糊不清、屏幕亮度不足或网络不稳定时备用 |
3.3 打通大平台来客系统的关键接口实现
A. 券码状态查询接口
请求参数:{ "coupon_code": "string", "store_id": "string", "timestamp": 12345678 }
返回字段:{ "status": "valid/invalid/used/expired", "amount": 25.00, "product_name": "双人套餐", "expire_date": "2026-12-31" }
调用时机:扫码或输入后立即调用;若来客系统无响应,3秒内重试2次,仍失败则提示“网络波动,请稍后”。
B. 确认核销接口
为防止重复核销,本地需生成唯一核销流水号(规则:年月日+门店ID+UUID前8位)。
请求来客系统时携带该流水号;来客系统需实现幂等处理:同一流水号多次请求只生效一次。
成功返回:{ "result": "success", "platform_order_id": "P123456" }
C. 核销状态回传与补偿机制
当本地数据库更新成功,但向大平台确认超时时,采用异步重试队列:每隔5分钟重试一次,最多3次。
若最终仍失败,触发人工告警(通过管理后台消息通知),并提供“手动强制同步”按钮给超级管理员。
3.4 核销记录与报表系统
每一笔核销均记录:券码、核销时间、核销员账号、门店、核销方式(扫码/手动)、来客平台订单号、设备IP。
核销记录不可删除,仅允许管理员备注说明(如“用户误操作,已退款作废”)。
提供按日/周/月维度汇总的报表:核销总额、核销张数、各时段核销峰值、各门店排名。支持导出为Excel。
3.5 异常场景处理
| 异常类型 | 用户端提示 | 后台处理逻辑 |
|---|---|---|
| 券码已被核销过 | “本券已于2026-xx-xx xx:xx:xx在某门店核销,请核对” | 拒绝操作,记录本次查询尝试日志 |
| 券码已过期 | “券码已超过有效期(xx年xx月xx日),无法使用” | 不允许核销,可提示用户联系发券平台 |
| 非本店适用券 | “该券仅限xxx门店使用,当前门店无核销权限” | 根据来客返回的适用门店列表校验 |
| 重复点击核销按钮 | “正在处理中,请勿重复提交” | 前端防抖(1秒内仅发送一次请求)+后端分布式锁(同一券码10秒内锁定) |
3.6 用户体验优化
扫码成功后震动提示+语音播报“核销成功”。
核销成功页面自动打印小票样式(可连接蓝牙打印机),包含金额、券码后四位、核销时间。
支持夜间模式,核销页面在高亮环境下自动调高扫码框亮度。
表1:核销记录表 (verify_log)
id bigint 主键
coupon_code varchar(32) 券码(加密存储)
platform_order_id varchar(64) 来客平台订单号
store_id int 门店ID
operator_id int 核销员ID
verify_time datetime 核销发生时间
verify_type tinyint 1扫码 2手动
amount decimal(10,2) 核销金额
status tinyint 1成功 2失败(原因记录于remark)
remark text 备注
create_ip varchar(45)
表2:券码批次白名单缓存表 (coupon_batch)
batch_id int 批次号
start_code varchar(18) 起始券码(可选,用于范围校验)
end_code varchar(18) 结束券码
effective_time datetime
expire_time datetime
available_stores json 适用门店ID列表
接口鉴权:使用大平台分配的AppKey + AppSecret生成签名。每次请求包含时间戳、随机数、签名字段,防止重放攻击。
数据最小化:只请求核销所必需的字段(券码、状态、金额、有效期),不传输用户手机号、身份证等敏感信息。
日志审计:所有与来客系统的请求/响应均记录本地日志,保留至少180天,但需对日志中的券码脱敏(显示前3后4位)。
网络隔离:后端服务通过固定IP白名单与大平台通信,禁止通过公网无限制访问。
6.1 开发阶段
搭建沙箱环境:使用大平台提供的测试券码和模拟接口进行开发。
实现核销接口的熔断机制:当大平台接口错误率超过30%时,自动暂停调用并切换到“只读本地缓存模式”(仅允许核销已在本地同步且未过期的券码)。
6.2 测试用例(不少于30个)
正常流程:扫码有效券→核销成功→双方数据一致。
边界值:券码有效期最后1秒核销、同一券码连续点击10次核销按钮。
异常模拟:大平台接口返回HTTP 500、超时、返回错误码“券码已冻结”。
高并发:使用压力工具模拟100个核销员同时扫码,观察数据库锁竞争情况。
6.3 灰度发布计划
阶段一(1周):选择3家直营门店开通核销功能,核销员接受15分钟操作培训。
阶段二(1周):扩大至30家门店,监控每日核销成功率(目标>99.5%)。
阶段三:全量发布,并保留手动回退开关(一键切换回纯本地核销模式)。
监控指标:核销接口平均耗时、来客系统可用性、每日重复核销尝试次数、各门店核销排行。
告警规则:单小时内核销失败超过20笔 → 企业微信通知技术负责人;来客系统连续5次超时 → 自动切换到备用的降级模式。
定期对账:每日凌晨自动比对本地与来客平台前一天的核销记录总数与总额,差异超过0.5%时生成对账异常报告。
用户反馈闭环:在核销失败页面增加“反馈问题”入口,用户可提交截图与描述,系统自动关联当日日志。
本次二次开发通过标准化接口对接大平台来客系统,为本地生活类小程序补充了高安全、高可靠的团购核销能力。整个方案兼顾了业务实时性与数据一致性,通过幂等设计、异步补偿、熔断降级等多种容错手段,确保极端网络条件下核销流程仍可闭环。同时,详细的权限分级、报表统计与审计日志,满足了商户日常管理与合规追溯的需求。后续可基于本次改造积累的核销数据,进一步开发用户复购分析、热销套餐自动推荐等增值功能,持续提升小程序的商业价值。