1.背景
春节回家过个团圆年是每一个背井离乡、在外打拼的人每年年底的心愿。这些年春运期间,高铁票“一票难求”一直都还是主旋律,笔者每年深有感受,这不今年还是没抢到,但是对象抢到了。。。对象来了一句:“还得是我,靠你是靠不住的......”,我只能默不作声了。这里先介绍下她抢票情况是这样的,她分别在官方12306和三方平台(携程、微信同程艺龙、飞猪)都预约了抢票,这里提一嘴,她在携程提交预约抢票时没注意开启了全能抢票(说是有极速抢票特权,一张票需要50块钱)。
等到早上10点30放票的时候,她去官方12306APP根据之前预填的购票信息刷票排队“抢票占座”出票,结果没一会儿就抢占成功出票跳转到支付页面了,想都没想就马上付款了,高兴的不行。但是没过多久也收到携程的购票成功消息,打开携程和12306对比了一下,发现是同一张票。由于在太多三方平台购票,并且都是提前付款的,所以下班回到家之后仔细核对了一下账单才发现:被12306扣了两次钱了!!! 。
12306的订单详情:
携程的订单信息如下:
大写的吃惊。。。作为程序员的我都懵逼了,来了句按道理不应该会出现这种情况啊,但事实就是事实。。。接下来我们就浅浅地分析下吧。
2.抢票占座分析
2.1 官方12306
12306抢票和电商秒杀场景都是差不多的,流量高并发大,电商难点是要扣减商品库存防止超卖,12306同样也要扣减车票数量,但是这比单一扣减商品数量复杂多了,因为一个车次会经过多个站点,比如说上海到成都的高铁途经主要站点 :上海→杭州→南昌→长沙→贵阳→成都。假如有一个人成功买到了:南昌→长沙,那么杭州→贵阳的票就会少一张。至于抢票占座成功出票下单,和电商购买商品是一样的,后台会根据个人信息、车次信息、始末站点信息、座位信息生成一条订单,用户在规定的时间内支付完成,就算是成功出票了。
2.2 三方平台
三方平台(携程、微信同程艺龙,飞猪等等)购买高铁票也是当下很多人选择的主流方式,我们来看看三方平台是怎么帮我们买到票的?
-
首先12306官方说过,所有的火车票都是有12306官方平台出售的,不存在三方平台代售火车票,你想想要是可以代售,比如春运的某个车次的车票,分200张给携程卖,分100张飞猪卖,那么肯定各种加钱购票,且不是乱了套了,这肯定是不允许的
-
三方平台根据你预先填写的购票信息调12306下单接口购票。这种想法很符合年轻程序员的思路,但是是不太可能的,12306不可能开放下单接口供三方调用的,暴露接口是系统安全大忌,更何况是12306这种系统,再说了要是能调接口抢票,还有那些手动去app页面点下单的什么事哦?去手动点操作能快的过代码???
-
既然上面两种方式都不是,那三方平台到底是怎么购票的呢?普遍有一种说法,三方平台是根据我们提交的信息,模拟用户在浏览器网页进行购票。思路介绍:人工抢票的速度相对较慢,然而电脑的反应速度却极为迅捷。基于这一特点,主要采用的技术思路是利用Selenium框架来模拟人工操作。通过这一框架,我们能够精确地模拟用户的点击、输入等行为,从而在抢票过程中实现高效、精准的操作,极大地提升抢票的成功率和速度。Selenium框架作为一种强大的自动化测试工具,不仅能够模拟各种复杂的用户交互,还能在浏览器中实现自动化操作。在抢票场景中,我们可以通过编写脚本,让Selenium自动打开购票网站,填写购票信息,并快速提交订单。这种模拟人工操作的方式,不仅避免了人工操作的繁琐和低效,还能在关键时刻迅速响应,确保抢票的成功。
此外,Selenium框架还支持多种浏览器和操作系统的兼容性,使得我们的抢票工具能够在不同的环境下稳定运行。通过不断的优化和调试,我们可以进一步提升抢票工具的性能和稳定性,为用户提供更加可靠的抢票服务。
3.三方平台花钱加速抢票真的有用吗
有人说在三方平台抢票成功率会高点,个人觉得这纯属无稽之谈,在12306平台没有出候补功能之前,我觉得三方平台抢票还是有点用的,它像一个人帮你刷着后台的车次余票,一旦有票之后帮你买,但是12306平台有了候补功能之后,就没他什么事了。。。当然遇到12306部分显示车次列车运行图调整待售, 不能候补,而且往往不知道它什么时候放票,这个时候还是可以通过三方平台购票软件选择车次抢票,毕竟三方平台可以及早知道火车恢复运营的情况。
那花钱买加速包抢票到底有没有有用呢?
这个我觉得要分两种情况分析下:
-
放票时抢票 :我们都知道12306现在是最多买15天后的票,每天早上10点30准时放票供大家抢购,这种情况下我个人觉得三方平台的加速抢票估计还是有点用的,按照上面我们的分析,三方平台是模拟浏览器网页自动化购票的,有一个开源免费抢票软件:
bypass
,官网地址:www.bypass.cn/
它实际上就是模拟用户的浏览器操作,只不过全都由程序代劳了,这个速度肯定比手工操作要快,所以抢到票的几率也比较高。
你花了钱买加速包,三方平台可能在给你买票时,给你分配更多的资源配置:比如独享一个ip,更高的cpu,更高带宽网络来保证你的购票信息更快地提交到到12306。按照这种说法,你完全可以在家里的电脑上安装一个bypass免费操作,假如你家的宽带是千兆的,网络也
很快,说不一定比你花钱买加速包效果更好。当然本人没试过,这是只是分析哈~~~
- 候补抢票:候补抢票可以说花钱买加速是一点用都没有,花钱的都是傻子、冤大头。
什么朋友助力加速、VIP加速包、优先出票都是杀猪盘,12306候补完全可以替代这些花里胡哨的
第三方软件加速包,不过是挂一台服务器一直帮你点购票界面罢了,这个方法以前管用,但现在有候补功能了,并且12306官方说过,这种操作方式非但不管用了,甚至大部分情况还会触发12306的风控(12306的风控是很严的),最终被拉入黑名单或者放到低优先级队列,就算有票放出,你也买不到!!!
12306官方早已明确表示,所有票源均在官方系统中,抢票软件并无任何特殊渠道。所谓的“加速包”不过是商家为了割消费者“韭菜”而编造的谎言。它们利用消费者的焦虑和无奈,诱导人们付费,却从未真正兑现过承诺。
三方平台候补抢票真的没啥屁用,什么朋友助力加速提交大量的个人信息被三方平台采集,可能会造成个人隐私泄露,当然这里弱弱说一句让朋友助力还是有一丢丢好处:间接告诉亲朋好友春节会回去,可约,哈哈~~~
从技术角度来看,抢票软件的存在本身就是一种对购票公平的破坏。这些软件通过高频查询和大量请求,试图在12306系统中抢占票源。然而,这种行为不仅无法真正提高购票成功率,反而会对12306服务器造成巨大负担,甚至可能导致系统崩溃。
为了应对这种异常请求,12306不得不采取风控措施,将抢票软件的请求放入慢速队列或延迟处理。这意味着,使用抢票软件的用户不仅无法获得优先购票权,反而可能因为触发风控而购票速度更慢。
既然从技术的角度分析三方平台会无缘无故给12306系统带来了更多的压力,为什么国家不禁止三方平台这个购票入口的?大概是放票时抢票还是有点用的,再或者技术是无罪的,要包容,哈哈,我随便猜的。
其实三方平台卖火车票是不赚钱的,他根本不可能中间商赚差价啥的,国家不允许的,再加上也很少有冤大头花钱抢票,那他为啥还要花费大力气出这个功能呢?其实各大平台做火车票目的都一样,就是黏住用户,当你习惯在某平台买火车票了,你就会自然而然在这个平台买飞机票,看住宿酒店什么的,这种套路心理早就是大家心知肚明的了
你看看他这个取消抢票订单的按钮每次都要找半天,甚至还要百度查一波怎么取消才知道,就怕你看见,怕你取消,非常隐蔽,满满的都是套路
铁路放票规则
优先发售全程车票,及大站车票,区间票大部分只在开车前几天,有空余的情况下放出,网络、车站、电话订票是统一票仓,放票非一次性放出,而是针对区间分批放票,优先放全程及远途、大站车票。这个很好理解:就是追求资源利用最大化,利益最大化。你总不能让【杭州→贵阳】的人抢不到票,【杭州→千岛湖】的人却抢到了票,【杭州→千岛湖】骑车都能到,要是这样的话票务系统肯定被喷死,而且也运营不下去啊,因为这样意味着【千岛湖→贵阳】座位都是空着的,这少赚了多少高铁费啊。这也是为什么那些三方平台候补帮你抢票的时候给你出的优化方案是多买几站,你以为他尽心费力干了啥,其实他啥都没干,他也干不了啥。
在上面我们说过三方平台花钱买加速包在放票时抢票可能会有点用,那也是基于相同区间购票的情况讨论的,当然12306的出票规则在相同区间下,不一定就是先到先得的,可能还会考虑各种因素,比如说优先学生,再比如说你老是退票,你的优先级就比较低了,当然这些都是猜测的,并无实际考证哈。但是可以这么说你花钱抢【杭州→千岛湖】的票,系统肯定不会一开始就放这种短途区间票的,等临近发车时候抢到了,不是平台帮你抢到的,是12306放票给你了,不要傻乎乎地被三方平台忽悠了,搞得功劳都是他的。
项目推荐:基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba企业级系统架构底层框架封装,解决业务开发时常见的非功能性需求,防止重复造轮子,方便业务快速开发和企业技术栈框架统一管理。引入组件化的思想实现高内聚低耦合并且高度可配置化,做到可插拔。严格控制包依赖和统一版本管理,做到最少化依赖。注重代码规范和注释,非常适合个人学习和企业使用
Github地址:github.com/plasticene/…
Gitee地址:gitee.com/plasticene3…
微信公众号:Shepherd进阶笔记
交流探讨qun:Shepherd_126
4.12306为什么会扣两次钱?
根据上面的介绍,我们这里就姑且认为在放票时,携程是模拟了浏览器网页自动化购票,与此同时我们自己手动在12306的app也抢票,这就意味着使用相同的用户信息和购票信息分别在网页和app上购票,这时候假如我这个人抢票占座成功,这时候app和网页是不是都会感知到跳转到支付页面,这样就会出现同一车票,分别支付了两次,12306是不是生成了两个订单???但从上面12306和携程的订单信息截图来看,是同一个订单号,说明只有一个订单,那就是一个订单支付了两次?12306对订单的支付没有做唯一校验,或者幂等性啥的???当然做这些检验是会影响到支付速度的,而且系统有严格的对账单,即时多扣了后面也会发现及时退回的,所以在支付层面就没有做检验了,毕竟出现这种情况并不是很多。。。
由此个人分析总结如下:在生成订单后,系统会锁定车票,等待用户支付,完成支付车票立即确认成功。这时候12306和携程都能感知到这个订单的生成并分别完成了付款,也就是说在抢票高峰期,两个平台可能分别完成支付,导致扣款两次。尽管最终生成的车票只有一张,但支付请求是独立处理的。
解决办法也简单,打电话给12306反映下就行了,涉及到钱的都有严格的对账单系统,可以快速查出多扣款了一次,会在7个工作日之内原路退回。
5.最后
在这漫长的春运旅途上,愿每一位漂泊的心都能如愿回家,不仅是通过一张火车票,更是通过心中的那份温暖与牵挂。科技的进步让我们更近,尽管旅途艰难,但团圆的愿望始终在前方闪亮。愿你一路顺风,平安归家,和亲人共度一个温馨、美满的春节。最后,希望以后国家春运运力越来越强大,技术越来越进步让我们每个人都能轻松买到回家的票。最后的最后,我在这里提前遥祝大家春节快乐,幸福安康。当然如果你觉得分析的还可以的话,麻烦给个一键三连(点赞、在看、转发分享)支持一下,感谢Thanks♪(・ω・)ノ