日期:2026-08-17
某区域票务平台承接本地演出和中小赛事的电子票业务,早先的做法是用户下单后系统生成一张带二维码的电子票,观众到场出示,闸机扫一下就放行。看起来没问题,实际跑了两个月我们被黄牛教育了。黄牛用脚本批量刷接口抢票,把热门场次七成座位在开售三分钟内扫空,再挂到二手平台加价卖。观众买到的是真票,可价格翻了好几倍,投诉全砸到主办方和我们头上。更要命的是现场核验,静态二维码一截图就能无限次出示,我们巡检时就见过同一张码在入口被不同的人反复刷,闸机还都放行了。那次之后我们下定决心,把电子票从一张静态图改成一套带风控的核验体系。
这次落地围绕三个角色展开。观众侧,购票成功后不再拿到固定二维码,而是每三十秒刷新一次的动态码,截图即失效。闸机侧,我们换了支持离线校验的扫码终端,断网也能判真假,高峰期排队长了也不慌。运营侧,后台多了一块黄牛行为看板,哪些账号在短时间批量下单、哪些设备在多账号间切来切去,都会被打标。退票和转赠也重新设计了,退票库存实时回补公开场次,转赠要走一次人脸核验,不让票在黄牛手里空转。三个场景串起来,票的流转全程在我们的视野里。
首先要解决的是动态码怎么做才防截屏又不拖慢入场。我们没用简单倒计时,而是把票号、场次、时间戳和一把服务端私钥做 HMAC 签名,闸机端内置同样的校验逻辑,离线也能验签。码面每三十秒换一次,旧码立刻作废。接着要解决的是黄牛识别,单看下单频率容易误伤正常用户,我们把设备指纹、支付账号、收货地址、下单间隔几个维度合在一起打分,超过阈值才进风控队列,运营人工确认后再做限制,这样普通用户基本无感。还有一块难啃的是闸机高并发,演出散场前入场峰值能到每分钟上千次扫码,我们把验签逻辑下沉到终端,服务端只做异常上报,压力分摊下去就稳了。
案例片段(已脱敏): 动态码生成的服务端签名片段(字段示意): ``` sign = hmac_sha256(secret, f"{ticket_id}|{show_id}|{int(ts/30)}") payload = base64(f"{ticket_id}.{show_id}.{int(ts/30)}.{sign}")
闸机端用相同 secret 复核 int(ts/30) 与 sign,不一致或时间窗错位即拒
``` 一次黄牛识别命中:同一设备指纹在 90 秒内用 11 个账号下单同场次,行为分从 0.3 跳到 0.91,自动进入限制队列,运营复核后冻结该设备后续购票。
项目上线一个演出季后,我们拉了数据复盘。热门场次开售初期的黄牛占票率从约七成降到不到一成,这部分票回到了公开池子里正常售卖。现场假票拦截数一个季度抓到三百多起,基本都是拿截图反复刷的那类。闸机核验通过时效从人均约四秒压到一秒出头,入场排队明显短了。退票回补时效从过去的小时级变成分钟级,观众退了马上能买到。需要说明,动态码刷新频率我们后来从三十秒调到四十五秒,原因是部分老款手机时钟漂移导致偶发验签失败,调长一点反而更稳。
电子票这事回头看,最大的坑是我们一开始把它想简单了,以为发张码就行,结果黄牛和假票把底裤都打穿。后来我们认准一条,票不能是一张可以无限复制的静态图,必须让它在时间和身份上都被绑死。动态签名加离线验签这套,在我们的几个票务客户里都能直接搬,闸机端换不换硬件区别不大,关键是服务端那把密钥要管严。黄牛识别我现在的看法是别追求一网打尽,先把最明显的批量行为拦住,剩下的靠运营人工兜底,模型太激进反而误伤正常观众,那比黄牛还招投诉。这套东西目前还在根据新场次的数据慢调阈值。
回头看票务这套,最值钱的经验是把票从一张静态图重新定义成一次受控的流转。动态码加离线验签解决的是复制问题,黄牛行为识别解决的是抢票问题,两件事必须一起做,只做一边都会被绕过。我们上线后又调过几轮,每次大场次都会冒出新花样,比如有人用云手机批量养号,单看设备指纹就不够,得把网络特征和支付账号一起算进去打分。动态码刷新间隔我们试过三十秒、四十五秒、六十秒,六十秒时老款手机验签失败率最低,但黄牛截屏可利用的窗口变长,最后折中在四十五秒。黄牛打分模型我们用了设备指纹、支付账号、收货地址相似度三个特征,单特征误杀高,合起来才稳。这让我明白风控是持续的攻防,不是上线即终局,模型要跟着黑产一起进化。运营侧我们也走过弯路,最早黄牛命中了还得人工去点限制,响应慢半拍,后来把处置做成一键动作并接了实时告警,运营才真正用得起来。退票回补我们改成实时回公开池,之前是隔天批处理,观众退了买不到,又多一层投诉。转赠环节加了人脸核验,之前转赠不用核验,票在黄牛手里空转,加了之后转赠链路也干净了。闸机端我们把验签失败率接了监控,某台设备异常就告警,不再等观众投诉才发现。闸机端的离线验签我们当初为了快上线想省掉,结果首场就因为场馆网络抖动露了怯,后来补上反而成了卖点。动态码这套现在是我们票务方案的标配,新客户接入基本零改动。票务这行体验和安全是一件事,观众顺进场了,主办和我们的口碑才立得住。