tickets icon indicating copy to clipboard operation
tickets copied to clipboard

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

Open fbotp opened this issue 11 months ago • 40 comments

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

  • utils/dm/index.js中添加getUA方法,用于后续的订单创建、提交等,补充代码如下:
export async function getUA() {
    return new Promise((resolve, reject) => {
        window.AWSC.use("uab", function(e, i) {
            if ("loaded" === e) {
                resolve(i.getUA());
            } else {
                reject(new Error("Failed to load AWS Cognito User Agent Banner"));
            }
        });
    });
}
  • src/components/dm/Product.vue中的getProductInfo函数替换为访问请求https://detail.damai.cn/item.htm?id={},获取其中的staticData和data,以productInfo.value = {"staticData": staticData, "item": item}保存,并将getSkuInfo中的performId修改为string类型
  • src/components/dm/Product.vue中的getOrderDetail同样替换为当前版本的新版链接,这里需要注意两个参数,signKey从上面修改的productInfo.value中获取,ua则需要调用上面新增的await getUA()方法获取
  • src-tauri/src中的get_infoget_ticket_detail_res需修改为对应的新API,其中get_ticket_detail_res要注意以format!("data={}&bx-ua={}&bx-umidtoken={}", encode(data), ua, umidtoken)的方式构建body,同时设置.header(reqwest::header::CONTENT_TYPE, "application/x-www-form-urlencoded"),并通过body(body)发送,避免对body内容自动URI编码,create_order_res也修改为最新API

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

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

fbotp avatar Apr 03 '24 04:04 fbotp

:thumbsup:

shiyutim avatar Apr 03 '24 04:04 shiyutim

厉害

sasaafd avatar Apr 03 '24 05:04 sasaafd

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

fbotp avatar Apr 03 '24 08:04 fbotp

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

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

shiyutim avatar Apr 03 '24 09:04 shiyutim

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

fbotp avatar Apr 03 '24 10:04 fbotp

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

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

shiyutim avatar Apr 03 '24 11:04 shiyutim

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

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

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

fbotp avatar Apr 03 '24 11:04 fbotp

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

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

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

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

shiyutim avatar Apr 03 '24 11:04 shiyutim

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

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

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

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

好的 谢谢

fbotp avatar Apr 03 '24 11:04 fbotp

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

RuihanD avatar Apr 08 '24 08:04 RuihanD

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

fbotp avatar Apr 11 '24 10:04 fbotp

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

thexiez avatar Apr 13 '24 07:04 thexiez

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

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

sasaafd avatar Apr 15 '24 15:04 sasaafd

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

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

sasaafd avatar Apr 15 '24 16:04 sasaafd

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

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

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

thexiez avatar Apr 16 '24 12:04 thexiez

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

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

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

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

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

thexiez avatar Apr 16 '24 13:04 thexiez

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

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

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

fbotp avatar Apr 18 '24 10:04 fbotp

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

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

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

fbotp avatar Apr 18 '24 10:04 fbotp

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

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

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

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

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

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

fbotp avatar Apr 18 '24 10:04 fbotp

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

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

fbotp avatar Apr 18 '24 10:04 fbotp

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

fbotp avatar Apr 18 '24 10:04 fbotp

大佬,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 avatar Apr 18 '24 11:04 sasaafd

大佬,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……

sasaafd avatar Apr 18 '24 11:04 sasaafd

大佬,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 avatar Apr 18 '24 12:04 fbotp

大佬,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 avatar Apr 18 '24 12:04 fbotp

大佬,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值了,所以只能重新更换接口

fbotp avatar Apr 18 '24 13:04 fbotp

大佬,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 avatar Apr 19 '24 06:04 sasaafd

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

sasaafd avatar Apr 19 '24 07:04 sasaafd

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

sasaafd avatar Apr 19 '24 09:04 sasaafd

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 avatar Apr 19 '24 12:04 fbotp