shiyutim / tickets

大麦、大麦网 演唱会抢票软件,一个基于 tauri + rust + vue 调用接口的抢票软件。
MIT License
2.06k stars 311 forks source link

通过修改部分代码能够在当前版本可用 #114

Open fbotp opened 5 months ago

fbotp commented 5 months ago

首先感谢作者大大 @shiyutim 的代码,在其上略微修改可重新恢复功能,修改部分如下:

整体需要修改的部分已介绍,因为考虑到一些伸手党,所以没有直接放出修改后的版本,如果有问题欢迎讨论交流

再次感谢该项目的作者大大提供的代码~

shiyutim commented 5 months ago

:thumbsup:

sasaafd commented 5 months ago

厉害

fbotp commented 5 months ago

写完代码突然发现我想抢的票好像只能在app上抢……还在预约抢票阶段的演唱会怎么判断能不能h5抢票呢

shiyutim commented 5 months ago

写完代码突然发现我想抢的票好像只能在app上抢……还在预约抢票阶段的演唱会怎么判断能不能h5抢票呢

获取商品详情的时候有个判断是否支持该渠道

fbotp commented 5 months ago

@shiyutim 请问是哪个参数呢?直接全局搜索“渠道”没有找到,唯一相关的是detailViewComponentMap.item.item.buyBtnText

shiyutim commented 5 months ago

@shiyutim 请问是哪个参数呢?直接全局搜索“渠道”没有找到,唯一相关的是detailViewComponentMap.item.item.buyBtnText

"buyBtnStatus\":\"100\",\"buyBtnText\":\"该渠道不支持购买\" 我之前代码里就有,我是根据 buyBtnStatus 为 100 判断的

fbotp commented 5 months ago

@shiyutim 请问是哪个参数呢?直接全局搜索“渠道”没有找到,唯一相关的是detailViewComponentMap.item.item.buyBtnText

"buyBtnStatus":"100","buyBtnText":"该渠道不支持购买" 我之前代码里就有,我是根据 buyBtnStatus 为 100 判断的

我现在没到预售的时候,显示的是 "buyBtnStatus":90,"buyBtnText":"预约抢票","buyBtnTip":"提前选票档 抢票更丝滑" 可能到能买的时候才知道了

shiyutim commented 5 months ago

@shiyutim 请问是哪个参数呢?直接全局搜索“渠道”没有找到,唯一相关的是detailViewComponentMap.item.item.buyBtnText

"buyBtnStatus":"100","buyBtnText":"该渠道不支持购买" 我之前代码里就有,我是根据 buyBtnStatus 为 100 判断的

我现在没到预售的时候,显示的是 "buyBtnStatus":90,"buyBtnText":"预约抢票","buyBtnTip":"提前选票档 抢票更丝滑" 可能到能买的时候才知道了

有些会根据火爆程度,临开售前几天关闭的

fbotp commented 5 months ago

@shiyutim 请问是哪个参数呢?直接全局搜索“渠道”没有找到,唯一相关的是detailViewComponentMap.item.item.buyBtnText

"buyBtnStatus":"100","buyBtnText":"该渠道不支持购买" 我之前代码里就有,我是根据 buyBtnStatus 为 100 判断的

我现在没到预售的时候,显示的是 "buyBtnStatus":90,"buyBtnText":"预约抢票","buyBtnTip":"提前选票档 抢票更丝滑" 可能到能买的时候才知道了

有些会根据火爆程度,临开售前几天关闭的

好的 谢谢

RuihanD commented 5 months ago

求问修改为对应的新API是指哪个呢?

fbotp commented 5 months ago

求问修改为对应的新API是指哪个呢? get_ticket_detail_res、get_info这两个新版的链接换了,主要是前面部分不一样了,具体可以在F12里搜这两个,现在是给API的URI部分加了XXX.damai.XXX了

thexiez commented 5 months ago

佬,我纯小白只会加getUA方法和改String数据类型,能救救吗T T

sasaafd commented 5 months ago

大佬,signKey从上面修改的productInfo.value中获取,具体是获取的哪个数据名称呢

我感觉signKey 不是从form的token中获取吗

sasaafd commented 5 months ago

求问修改为对应的新API是指哪个呢? get_ticket_detail_res、get_info这两个新版的链接换了,主要是前面部分不一样了,具体可以在F12里搜这两个,现在是给API的URI部分加了XXX.damai.XXX了

大佬,我想问一下,signKey这个参数指的是什么,我在productinfo里面没有找到

thexiez commented 5 months ago

求问修改为对应的新API是指哪个呢? get_ticket_detail_res、get_info这两个新版的链接换了,主要是前面部分不一样了,具体可以在F12里搜这两个,现在是给API的URI部分加了 XXX.damai.XXX 了

大佬,我想问一下,signKey这个参数指的是什么,我在productinfo里面没有找到

哥们,搞好了吗,能一起交流下不。

thexiez commented 5 months ago

求问修改为对应的新API是指哪个呢? get_ticket_detail_res、get_info这两个新版的链接换了,主要是前面部分不一样了,具体可以在F12里搜这两个,现在是给API的URI部分加了 XXX.damai.XXX 了

大佬,我想问一下,signKey这个参数指的是什么,我在productinfo里面没有找到

哥们,搞好了吗,能一起交流下不。

放弃了,没系统学过,创建订单异常。signkey不知道指什么

我也是,前端这些啥也不懂,对着大佬的思路边查边改,代码还没改完,准备编译试试的时候发现yarn依赖里tauri拉取不到。实在是写不明白了。

fbotp commented 5 months ago

大佬,signKey从上面修改的productInfo.value中获取,具体是获取的哪个数据名称呢

我感觉signKey 不是从form的token中获取吗

我是从productInfo这里获取到的signkey这个参数的,上面对getproductInfo的方法更换了url了,换了api,用https://detail.damai.cn/item.htm?id={}代替的,请求之后里面会有两个div,一个是staticDataDefault,一个是dataDefaultsignKey就是dataDefault.t对应的值

fbotp commented 5 months ago

大佬,signKey从上面修改的productInfo.value中获取,具体是获取的哪个数据名称呢

我感觉signKey 不是从form的token中获取吗

不管是哪个里面获取的,其实只要是signKey就行,具体的处理逻辑我也没有处理明白,只是因为在这个页面中发现了这个值,所以通过https://detail.damai.cn/item.htm?id={}获取得到的

fbotp commented 5 months ago

求问修改为对应的新API是指哪个呢? get_ticket_detail_res、get_info这两个新版的链接换了,主要是前面部分不一样了,具体可以在F12里搜这两个,现在是给API的URI部分加了 XXX.damai.XXX 了

大佬,我想问一下,signKey这个参数指的是什么,我在productinfo里面没有找到

哥们,搞好了吗,能一起交流下不。

放弃了,没系统学过,创建订单异常。signkey不知道指什么

我也是,前端这些啥也不懂,对着大佬的思路边查边改,代码还没改完,准备编译试试的时候发现yarn依赖里tauri拉取不到。实在是写不明白了。

拉取不到的话可以考虑换源

fbotp commented 5 months ago

佬,我纯小白只会加getUA方法和改String数据类型,能救救吗T T

对代码的整体修改部分并不多,主要都是对接口的替换,以及ts中一些请求要替换不同的请求头,因为我也不怎么会ts,所以改动都是比较简单机械的

fbotp commented 5 months ago

@thexiez @sasaafd 感觉大家也不用报什么希望,大麦现在基本上只要是个演唱会都只能app购买,能用h5抢的都是不怎么火爆的,反正我修改完以后要抢票时发现它变成仅app了🙂,但是自己动手可以涨涨代码经验,也还算有帮助

sasaafd commented 4 months ago

大佬,signKey从上面修改的productInfo.value中获取,具体是获取的哪个数据名称呢 我感觉signKey 不是从form的token中获取吗

我是从productInfo这里获取到的signkey这个参数的,上面对getproductInfo的方法更换了url了,换了api,用https://detail.damai.cn/item.htm?id={}代替的,请求之后里面会有两个div,一个是staticDataDefault,一个是dataDefaultsignKey就是dataDefault.t对应的值

8H(}MZ`HGA{O0I@0(G$MEJA 我就发现这一个是请求后端数据的,不会是要修改这里面的api吧,再加上个id={},使得形参又多了一个。直接报错...

sasaafd commented 4 months ago

大佬,signKey从上面修改的productInfo.value中获取,具体是获取的哪个数据名称呢 我感觉signKey 不是从form的token中获取吗

我是从productInfo这里获取到的signkey这个参数的,上面对getproductInfo的方法更换了url了,换了api,用https://detail.damai.cn/item.htm?id={}代替的,请求之后里面会有两个div,一个是staticDataDefault,一个是dataDefaultsignKey就是dataDefault.t对应的值

8H(}MZ`HGA{O0I@0(G$MEJA 我就发现这一个是请求后端数据的,不会是要修改这里面的api吧,再加上个id={},使得形参又多了一个。直接报错...

额,我不太了解,在我的认知里,返回来的数据应该是JSON格式的数据,,只找到了staticdata和item……

fbotp commented 4 months ago

大佬,signKey从上面修改的productInfo.value中获取,具体是获取的哪个数据名称呢 我感觉signKey 不是从form的token中获取吗

我是从productInfo这里获取到的signkey这个参数的,上面对getproductInfo的方法更换了url了,换了api,用https://detail.damai.cn/item.htm?id={}代替的,请求之后里面会有两个div,一个是staticDataDefault,一个是dataDefaultsignKey就是dataDefault.t对应的值

8H(}MZ`HGA{O0I@0(G$MEJA 我就发现这一个是请求后端数据的,不会是要修改这里面的api吧,再加上个id={},使得形参又多了一个。直接报错...

是的,就是这个api需要修改,返回的东西变成了一个html的格式,然后在对应的.vue文件里修改请求结果的处理方式,分别获取其中的dataDefault和staticDataDefault,在这里传入id就只需要传入对应的itemid就行

fbotp commented 4 months ago

大佬,signKey从上面修改的productInfo.value中获取,具体是获取的哪个数据名称呢 我感觉signKey 不是从form的token中获取吗

我是从productInfo这里获取到的signkey这个参数的,上面对getproductInfo的方法更换了url了,换了api,用https://detail.damai.cn/item.htm?id={}代替的,请求之后里面会有两个div,一个是staticDataDefault,一个是dataDefaultsignKey就是dataDefault.t对应的值

8H(}MZ`HGA{O0I@0(G$MEJA 我就发现这一个是请求后端数据的,不会是要修改这里面的api吧,再加上个id={},使得形参又多了一个。直接报错...

额,我不太了解,在我的认知里,返回来的数据应该是JSON格式的数据,,只找到了staticdata和item……

访问替换后的新api,获取到的其实就是我们在浏览器直接打开那个链接所对应的源代码,所以并不是JSON格式的,而且也是通过GET请求得到的

fbotp commented 4 months ago

大佬,signKey从上面修改的productInfo.value中获取,具体是获取的哪个数据名称呢 我感觉signKey 不是从form的token中获取吗

我是从productInfo这里获取到的signkey这个参数的,上面对getproductInfo的方法更换了url了,换了api,用https://detail.damai.cn/item.htm?id={}代替的,请求之后里面会有两个div,一个是staticDataDefault,一个是dataDefaultsignKey就是dataDefault.t对应的值

8H(}MZ`HGA{O0I@0(G$MEJA 我就发现这一个是请求后端数据的,不会是要修改这里面的api吧,再加上个id={},使得形参又多了一个。直接报错...

额,我不太了解,在我的认知里,返回来的数据应该是JSON格式的数据,,只找到了staticdata和item……

image 像这里,GET获取到这个item页面的源代码,里面有这么两个div,需要的值就在这里面了,然后在vue文件里这么写: image 所以其实staticDataDefault就是原先代码中的staticData,dataDefault就是item。 之所以要这么修改,是因为damai换过接口以后,有些值在通过旧接口获取到的detail中已经没有相关key值了,所以只能重新更换接口

sasaafd commented 4 months ago

大佬,signKey从上面修改的productInfo.value中获取,具体是获取的哪个数据名称呢 我感觉signKey 不是从form的token中获取吗

我是从productInfo这里获取到的signkey这个参数的,上面对getproductInfo的方法更换了url了,换了api,用https://detail.damai.cn/item.htm?id={}代替的,请求之后里面会有两个div,一个是staticDataDefault,一个是dataDefaultsignKey就是dataDefault.t对应的值

8H(}MZ`HGA{O0I@0(G$MEJA 我就发现这一个是请求后端数据的,不会是要修改这里面的api吧,再加上个id={},使得形参又多了一个。直接报错...

额,我不太了解,在我的认知里,返回来的数据应该是JSON格式的数据,,只找到了staticdata和item……

image 像这里,GET获取到这个item页面的源代码,里面有这么两个div,需要的值就在这里面了,然后在vue文件里这么写: image 所以其实staticDataDefault就是原先代码中的staticData,dataDefault就是item。 之所以要这么修改,是因为damai换过接口以后,有些值在通过旧接口获取到的detail中已经没有相关key值了,所以只能重新更换接口

大哥,你是不是修改的大麦网页版官网的链接。。。那个基本都得app购买。你修改这个大麦链接的地址https://m.damai.cn/shows/home.html?from=def&spm=a2o71.project.bottom.dgotohome&sqm=dianying.h5.unknown.value

sasaafd commented 4 months ago

Snipaste_2024-04-19_14-58-57 我觉得就是在创建订单的时候,url里面多了一个requeStart参数,需要拿到这个参数,然后放到store里面

sasaafd commented 4 months ago

好吧,虽然没显示接口异常,但一直弹阿里的验证码拦截。

fbotp commented 4 months ago

Snipaste_2024-04-19_14-58-57 我觉得就是在创建订单的时候,url里面多了一个requeStart参数,需要拿到这个参数,然后放到store里面

这个参数我直接调用的代码里的t,不过好像没影响,反正我后来就把这个参数去掉了 那个detail页面的我没注意,不过应该都是按照同一个接口调用的,最后测试过可以购票,应该都差不多吧,毕竟哪怕是https://m.damai.cn/shows/home.html?from=def&spm=a2o71.project.bottom.dgotohome&sqm=dianying.h5.unknown.value 这个链接,也同样是仅限APP购买。可能m.daimai.cn里头接口名字不一样,但是结果应该都是一样的,最后都是调用了https://mtop.damai.cn/h5/mtop.damai.trade.order.build.h5/1.0/ 来创建订单的,~但是m.damai.cn我没有找它在哪一步传入的这个signkey的值,可以抓包然后全局搜索一下看看~,我看了一下,调用的是https://mtop/damai.cn/h5/mtop.alibaba.detail.subpage.getdetail/2.0/ 这个接口,返回值中有一个itemBasicInfo .t参数,就是对应的signKey这个值,之后再把这个值传入data一起加密编码就行了

刚刚试了一下,记起来为什么不用这个接口了,因为返回值一直报:非法请求,没找到问题在哪,所以就放弃了,转而用那个detail.html了

fbotp commented 4 months ago

好吧,虽然没显示接口异常,但一直弹阿里的验证码拦截。

在哪一步弹了 我这没弹

sasaafd commented 4 months ago

Snipaste_2024-04-19_14-58-57 我觉得就是在创建订单的时候,url里面多了一个requeStart参数,需要拿到这个参数,然后放到store里面

这个参数我直接调用的代码里的t,不过好像没影响,反正我后来就把这个参数去掉了 那个detail页面的我没注意,不过应该都是按照同一个接口调用的,最后测试过可以购票,应该都差不多吧,毕竟哪怕是https://m.damai.cn/shows/home.html?from=def&spm=a2o71.project.bottom.dgotohome&sqm=dianying.h5.unknown.value 这个链接,也同样是仅限APP购买。可能m.daimai.cn里头接口名字不一样,但是结果应该都是一样的,最后都是调用了https://mtop.damai.cn/h5/mtop.damai.trade.order.build.h5/1.0/ 来创建订单的,~但是m.damai.cn我没有找它在哪一步传入的这个signkey的值,可以抓包然后全局搜索一下看看~,我看了一下,调用的是https://mtop/damai.cn/h5/mtop.alibaba.detail.subpage.getdetail/2.0/ 这个接口,返回值中有一个itemBasicInfo .t参数,就是对应的signKey这个值,之后再把这个值传入data一起加密编码就行了

刚刚试了一下,记起来为什么不用这个接口了,因为返回值一直报:非法请求,没找到问题在哪,所以就放弃了,转而用那个detail.html了

可以抢到了,非常谢谢您

KyongJ commented 4 months ago

Snipaste_2024-04-19_14-58-57 我觉得就是在创建订单的时候,url里面多了一个requeStart参数,需要拿到这个参数,然后放到store里面

这个参数我直接调用的代码里的t,不过好像没影响,反正我后来就把这个参数去掉了 那个detail页面的我没注意,不过应该都是按照同一个接口调用的,最后测试过可以购票,应该都差不多吧,毕竟哪怕是https://m.damai.cn/shows/home.html?from=def&spm=a2o71.project.bottom.dgotohome&sqm=dianying.h5.unknown.value 这个链接,也同样是仅限APP购买。可能m.daimai.cn里头接口名字不一样,但是结果应该都是一样的,最后都是调用了https://mtop.damai.cn/h5/mtop.damai.trade.order.build.h5/1.0/ 来创建订单的,~但是m.damai.cn我没有找它在哪一步传入的这个signkey的值,可以抓包然后全局搜索一下看看~,我看了一下,调用的是https://mtop/damai.cn/h5/mtop.alibaba.detail.subpage.getdetail/2.0/ 这个接口,返回值中有一个itemBasicInfo .t参数,就是对应的signKey这个值,之后再把这个值传入data一起加密编码就行了 刚刚试了一下,记起来为什么不用这个接口了,因为返回值一直报:非法请求,没找到问题在哪,所以就放弃了,转而用那个detail.html了

可以抢到了,非常谢谢您

老哥可以加个好友吗 我明天也打算试试这个 wx:Kyonglok

thexiez commented 4 months ago

Snipaste_2024-04-19_14-58-57 我觉得就是在创建订单的时候,url里面多了一个requeStart参数,需要拿到这个参数,然后放到store里面

这个参数我直接调用的代码里的t,不过好像没影响,反正我后来就把这个参数去掉了 那个detail页面的我没注意,不过应该都是按照同一个接口调用的,最后测试过可以购票,应该都差不多吧,毕竟哪怕是https://m.damai.cn/shows/home.html?from=def&spm=a2o71.project.bottom.dgotohome&sqm=dianying.h5.unknown.value 这个链接,也同样是仅限APP购买。可能m.daimai.cn里头接口名字不一样,但是结果应该都是一样的,最后都是调用了https://mtop.damai.cn/h5/mtop.damai.trade.order.build.h5/1.0/ 来创建订单的,~但是m.damai.cn我没有找它在哪一步传入的这个signkey的值,可以抓包然后全局搜索一下看看~,我看了一下,调用的是https://mtop/damai.cn/h5/mtop.alibaba.detail.subpage.getdetail/2.0/ 这个接口,返回值中有一个itemBasicInfo .t参数,就是对应的signKey这个值,之后再把这个值传入data一起加密编码就行了 刚刚试了一下,记起来为什么不用这个接口了,因为返回值一直报:非法请求,没找到问题在哪,所以就放弃了,转而用那个detail.html了

可以抢到了,非常谢谢您 大佬方便加个V不,sizeof11

fbotp commented 4 months ago

Snipaste_2024-04-19_14-58-57 我觉得就是在创建订单的时候,url里面多了一个requeStart参数,需要拿到这个参数,然后放到store里面

这个参数我直接调用的代码里的t,不过好像没影响,反正我后来就把这个参数去掉了 那个detail页面的我没注意,不过应该都是按照同一个接口调用的,最后测试过可以购票,应该都差不多吧,毕竟哪怕是https://m.damai.cn/shows/home.html?from=def&spm=a2o71.project.bottom.dgotohome&sqm=dianying.h5.unknown.value 这个链接,也同样是仅限APP购买。可能m.daimai.cn里头接口名字不一样,但是结果应该都是一样的,最后都是调用了https://mtop.damai.cn/h5/mtop.damai.trade.order.build.h5/1.0/ 来创建订单的,~但是m.damai.cn我没有找它在哪一步传入的这个signkey的值,可以抓包然后全局搜索一下看看~,我看了一下,调用的是https://mtop/damai.cn/h5/mtop.alibaba.detail.subpage.getdetail/2.0/ 这个接口,返回值中有一个itemBasicInfo .t参数,就是对应的signKey这个值,之后再把这个值传入data一起加密编码就行了 刚刚试了一下,记起来为什么不用这个接口了,因为返回值一直报:非法请求,没找到问题在哪,所以就放弃了,转而用那个detail.html了

可以抢到了,非常谢谢您

祝你早日抢到想要的场次呀~

sasaafd commented 4 months ago

好吧,虽然没显示接口异常,但一直弹阿里的验证码拦截。

在哪一步弹了 我这没弹

这个signkey是在倒计时结束后,获取商品信息才能生成。这样的话和手抢没啥区别了,有没有一种可能根据某种规则直接生成signkey,这样就不用在发送获取商品的请求获取其中的signkey了。提高了抢票的几率。这个signkey好像是clh队列锁生成的

fbotp commented 4 months ago

好吧,虽然没显示接口异常,但一直弹阿里的验证码拦截。

在哪一步弹了 我这没弹

这个signkey是在倒计时结束后,获取商品信息才能生成。这样的话和手抢没啥区别了,有没有一种可能根据某种规则直接生成signkey,这样就不用在发送获取商品的请求获取其中的signkey了。提高了抢票的几率。这个signkey好像是clh队列锁生成的

这个signkey目前为止不知道是什么东西,只知道是服务端返回的,但是其实他一这个时间段内这个值是不会变化的,好像是用来判断某个商品现在这个页面是否超时的,如果可以的话其实实能够把这个存store里,然后之后请求如果报错的话在重新调用请请求这个值。然后重新保存到store里。

Xlff commented 1 month ago

有成功过吗

fbotp commented 1 month ago

有成功过吗

演唱会基本上都是要线下APP逆向,线上网页端可以抢一些篮球赛或者音乐节等等。

fahahaha commented 1 month ago

有成功过吗

演唱会基本上都是要线下APP逆向,线上网页端可以抢一些篮球赛或者音乐节等等。

想请教一下APP逆向这个概念,是不是通过一些工具获取到App里面的请求地址,然后模拟抢购,那这样拿到里面的请求地址之后,后续的操作是不是跟线上网页端差不多了?我之前试过一个教程获取小程序的,那段时间口令抢奶茶挺火,然后我就想抓包看看,没想到好麻烦,好像也要各种代理求抓包,这个APP逆向貌似更加麻烦,没什么概念。。。