小程序上点了提交,页面转了两秒没反应,游客退回去再点一次,结果两笔都成了。智慧景区售票系统里第二天就多出两张同日同票种的电子票,其中一张没人用,退款申请挤到窗口时,现场才知道这件事。重复下单不难防,难的是弹提示的时机和退款时那一下别把好人一起伤着。
提示该在哪一步弹。提交前拦不住,因为前端还不知道扣款到底成没成;出票之后再问,票已经打到游客手里,只能走退款。正确位置在支付回跳之后、出票确认之前那一步做校验:同一证件、同一手机号、同一入园日期、同一票种,时间窗十分钟内出现两笔已付款未核销的,售票系统就把第二笔标成待确认,让现场先看一眼,而不是默认出两张。给游客两个选择也够了——保留这一笔、两笔都要。别把这一步做成静默出票,事后全靠客服补。
自动合并还是各退各。合并看起来漂亮,实际会带出新麻烦:两笔可能来自不同渠道、带着不同优惠,合并后原单号作废,游客在渠道侧看到的订单和票务系统里的对不上,客服解释起来更费劲,一笔退款要跨两个渠道各查一遍。常规做法是不合并,各单独立,第二笔走整单退款,原路退回原渠道。只有在两笔完全同构、同一渠道、同一批次的时候,才允许自动保留一票退一票,而且要在日志里写清哪一笔被留下了。
边界:真忘事还是恶意重复。看三个数——间隔、频次、分布。两笔间隔小于两分钟,多半是页面没反馈;同一天出现三次以上,或者连续几天都在买同一个入园日,就要进可疑名单。反过来,一次买两张给同行的人,随行人信息填得完整,这是正常需求,不能算重复下单。可疑名单交给后台,但处置动作是限到人工确认,不是直接封号;封号一旦误伤,现场要花十倍时间解释,智慧景区售票系统的口碑就是这么丢的。

退掉那一笔时,另一笔的状态怎么保证不动。关键在退款按什么键退。退款必须按订单号加票号退,不能按证件退。按人退是最常见也最难收拾的错法:同一张身份证下挂着两笔,系统“顺手”把另一笔也置为失效,游客第二天到闸机过不去,售票系统还得连夜补一张临时凭证。退款提交前,智慧景区售票系统里应当有一条硬校验——只改目标票号状态,同一证件下其他票号状态不变,回执回来后二次核对,两处不一致就挂人工。
核销侧要跟着同步。退掉那一笔,票号要立刻从可用凭证名单里消失,闸机、手持检票设备、自助机三处都得读到同一份名单。离线用过的设备在回连时先补名单再放行,中间空档通常控制在几分钟内,超过十分钟就要留一条现场提示,说明此时凭证以窗口登记为准。这一步没做,退款成功的单子和刷进去的记录会互相打脸,票务系统的账就成了两边都不认。

把重复下单当成体验问题看。售票系统里一周的重复下单量,其实是渠道健康度:某渠道突然翻倍,先看那边是不是回调超时了。把这件事只当游客粗心,就会一直靠人工退款收尾。
