再有几天就要过年了,今年的火车票又是特别抢手,不知道大家都抢到了嘛?
今天看到一个网友抢票的问题,跟程序这块关系很大,特别分享给大家。
这个网友同时在12306和携程上抢票,结果在12306和携程上竟然抢到了同一张票,同一车次、同一个座位,关键是钱付了两份,这真是一个好消息和一个坏消息。如下图所示,左边是携程,右边是12306。
问题原因
出现这个问题的原因是什么呢?
我们先来分析下在12306和携程买火车票的逻辑。
12306:12306就是销售火车票的官方APP,下单成功那就是真的在数据库中写入了一条订单记录,你能看到订单就代表抢票成功了,而且这个下单的过程是有事务隔离保证的或者同一车次就是排队一张张处理的,一张票不会卖给两个人。抢到票之后,抓紧时间付钱就行了。
携程: 携程本身不卖火车票,所以它最多就是个代理。
- 这个代理可能是官方授权的,不过自从能在网上买票之后,火车票代售点都关门很久了,所以携程不大可能是这种;
- 之前还有一种是调用接口下单,不过12306已经明确不对第三方开放接口,所以这个大概率还是各个平台收到预约之后再去12306操作的;
- 最后就是目前比较流行且靠谱的bypass抢票模式,它实际上是模拟用户的浏览器操作,只不过全都由程序代劳了,这个速度肯定比手工操作要快,所以抢到票的几率也比较高,携程应该也是用的这种方式。
怎么判断有没有抢到票呢?
根据网友的这个问题现象,我猜携程大概率是不断的刷新订单页面,如果发现有对应车次的订单,就认为已经下单成功,然后扣掉用户的款项,通知用户抢票成功。
这是一种简单的方式,也比较节省资源,不用一直保持连接或者轮询,但是就很容易出现网友遇到的这种问题。有没有更好的方式呢?当然有。
大家如果使用bypass这个工具抢票,可能会注意到它在提交订单后会在日志中显示正在排队,并一直等待12306的返回结果,要么下单成功,要么给出下单失败的原因,这是和我们在12306上抢票的体验一致的。猜测bypass应该是模拟了12306网页下单的处理方式:长连接或者轮询。
这样就不会出现携程遇到的这个问题。当然这只是一种合理的猜测,具体问题原因很难确定,也许携程也是做了完整的模拟,只是出了点别的问题,比如恰巧机器重启了。
加价会有效果吗
很多抢票平台都推出了加速抢票的功能,这真的有用吗?
先说结论,有点用。
加了钱,平台可能就会给你分配更多的计算资源。比如普通用户是10个人使用同一个IP抢票,12306可能会认为这是作弊,抢票高峰期,这个IP就可能会被封掉,加了钱可能就是5个人使用同一个IP,甚至独占IP,这样被封掉的概率就低了很多。IP只是一个方面,CPU、内存、网络等资源都可以划分成不同的等级来进行分配。
不过这个性价比就很难说了。
因为你使用免费的bypass也能达到同样的效果。不过有时因为公司里太多人抢票,12306可能会封禁公司IP一段时间,解决这个问题也很简单,你完全可以使用家里的电脑抢票,或者弄个便宜的云服务器,独占资源不容易被封,也就更容易抢到票。
比如我这个阿里云抢占型实例,每个小时也就是几分钱,一天也就是一块多。
而携程这种黑盒的模式,你完全不知道它使用了多少资源来给你抢票,也许是10秒才给你请求一次,而且携程可以分配的机器和IP数量总归有限,放票的时候12306看过来的请求太多了,很可能就会把它封掉,从而错过了最佳抢票时机。后边抢到了票呢,就纯属巧合。对于抢票平台呢,在大用户基数的情况下,总会有很多用户抢到票,从而赚取一大票代理费,可以说稳赚不赔。
当然对于回家过年来说,多一种渠道总是好的,只是希望大家不要错付了期待。
怎么解决这个问题
如果已经在12306付款成功,银行流水或者支付平台显示的收款方就是12306,那么这就是你自己在12306购票成功了,其它人和平台都不会再买到同一车次的同一张票,也不会支付成功。
所以这时候就要去找抢票平台,说明你遇到的情况,让他们去确认是否真的向12306支付了这笔款项,让他们退款。抢票平台内部也会有完整的支付日志的,付没付,一查便知。
还有极少数的网友遇到12306多次扣款的情况,这个处理起来也不难,给12306打电话,提供你的付款单号和车次,让12306去调查,都能查清楚的,金钱交易都有极为严格的日志记录。
以上就是本文的主要内容。
当年华如梭,又是一年归家的时节。
遥想十几年前的春节,我站在售票点外的寒风中瑟瑟发抖,也只抢到一纸站票,技术的便捷让我们抢票更佳方便,只是我们好像永远无法走出没票的困境。
火车票的一纸轻描,背后承载着无数游子的急切与期待,它们如同归巢的燕子,在寒风中追逐着温暖的春光。
但愿在这个春运的浪潮中,每一位旅人都能顺利抵达心之所向。愿每一次的技术进步,都能为人们带来更多的便利与温馨,而非困扰与迷茫。愿我们都能在这个温情融融的节日里,收获平安喜乐,团圆美满。