小步伐付航脱口秀抢票脚本

打印 上一主题 下一主题

主题 830|帖子 830|积分 2492


一、前言
付航越火,票越难抢。技能抢票,快乐看猴~
二、工具
(1)PC端微信(windows体系)、手机微信
(2)fiddler抓包工具
(3)python
三、流程
(1)手机端微信搜索小步伐付航脱口秀,登录后填写抢票信息(手机端操作方便,抓包备用)。注意:本文脚本只适用于抢普通区,单张票。(单身狗看猴专属)
(2)打开fiddler抓包工具,设置Filters,只筛选付航脱口秀相干请求。

(3)PC端微信搜索付航脱口秀,点击到预备抢票页面,至此所要用到的连接都已加载完毕。

(4)分析请求参数,末了一步提交抢票请求要用到的参数。
(4.1)请求一:获取定位信息请求(见下图),返回cityId、bsCityId两个参数,这两个参数在末了提交订单的请求中会用到,定位信息一般不会改,可以写成固定值。

(4.2)请求二:获取抢票预填信息的请求(见下图),关键参数都是从这个请求返回的
        headers中重点参数是access-token,这个参数是登录小步伐时背景返回的,每次抢票前都要手动更新。还有一个参数front-trace-id,是由时间戳和随机数组成(如下)。headers中其他参数都是固定值。
  1. front_trace_id = Date.now().toString(36) + Math.random().toString(36).substring(2)
复制代码

(4.3)请求三:提交抢票。这个请求只有在每周二下午6点正式抢票时才能抓到。
        headers中重点参数(同请求二)。
        请求体中的参数许多,但大多是固定值,需要更新的有以下几个:

  •             ver = "4.19.7"                                   #可从抓包请求头复制
  •             bsCityId = "BL1111"                         #省份id,上文请求一中获取
  •             locationCityId = "3205"                    #城市id,上文请求一中获取
  •             preFiledId = ""                                 #预填信息id,上文请求二中获取
  •             audienceId = ""                               #观众id,上文请求二中获取
  •             skuId = ""                                        #座位类型id,上文请求二中获取
  •             showId = ""                                     #演出id,上文请求二中获取
  •             sessionId = ""                                 #详细时间端的演出id,上文请求二中获取
四、代码(以下请求中的access_token要替换成自己的)
(1)上文请求二的代码:获取抢票预填信息
  1. #获取front_trace_id
  2. def get_front_trace_id():
  3.     with open('get_front_trace_id.js', 'r', encoding='utf-8') as f:
  4.         src = f.read()
  5.     js_code = execjs.compile(src)
  6.     front_trace_id = js_code.call('trace_id')
  7.     return front_trace_id
  8. #获取预填信息
  9. def get_prefilledlist(access_token):
  10.     url = 'https://65373d6e95c3170001074c57.caiyicloud.com/cyy_gatewayapi/show/buyer/v3/pre_filed_info/670e7a8f3d2d3000018bbf64'
  11.     headers = {
  12.         "Host": "65373d6e95c3170001074c57.caiyicloud.com",
  13.         "Connection": "keep-alive",
  14.         "terminal-src": "WEIXIN_MINI",
  15.         "content-type": "application/json",
  16.         "src": "weixin_mini",
  17.         "ver": ver,
  18.         "access-token": access_token,
  19.         "merchant-id": "65373d6e95c3170001074c57",
  20.         "front-trace-id": get_front_trace_id(),
  21.         "Accept-Encoding": "gzip,compress,br,deflate",
  22.         "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.44(0x18002c2f) NetType/4G Language/zh_CN",
  23.         "Referer": "https://servicewechat.com/wxe3489c9feaf8f361/39/page-frame.html"
  24.     }
  25.     params = {
  26.         "needDetails": "true",
  27.         "source": "FROM_SHOW_DETAIL_PRE_FILED",
  28.         "src": "weixin_mini",
  29.         "merchantId": "65373d6e95c3170001074c57",
  30.         "ver": "4.19.7",
  31.         "appId": "wxe3489c9feaf8f361"
  32.     }
  33.     res = requests.get(url=url, headers=headers, json=params)
  34.     prefilledlist = res.json()['data']
  35.     preFiledId = prefilledlist['preFiledId']  # preFiledId
  36.     audienceId = prefilledlist['userAudienceIds'][0]  # userAudienceIds[0]
  37.     skuId = prefilledlist['bizSeatPlanId']  # bizSeatPlanId
  38.     showId = prefilledlist['bizShowId']  # bizShowId
  39.     sessionId = prefilledlist['bizShowSessionId']  # bizShowSessionId
  40.     return preFiledId, audienceId, skuId, showId, sessionId
复制代码
  1. (2)get_front_trace_id.js代码
复制代码
  1. function trace_id() {
  2.     return Date.now().toString(36) + Math.random().toString(36).substring(2)
  3. }
复制代码
(3)上文请求三的代码:提交抢票请求
  1. #提交抢票请求
  2. def get_ticket(ver,bsCityId,locationCityId,preFiledId,audienceId,skuId,showId,sessionId,access_token):
  3.     url = 'https://65373d6e95c3170001074c57.caiyicloud.com/cyy_gatewayapi/trade/buyer/order/v5/create_order'
  4.     headers = {
  5.         "Host": "65373d6e95c3170001074c57.caiyicloud.com",
  6.         "Connection": "keep-alive",
  7.         "terminal-src": "WEIXIN_MINI",
  8.         "content-type": "application/json",
  9.         "src": "weixin_mini",
  10.         "ver": ver,
  11.         "access-token": access_token,
  12.         "merchant-id": "65373d6e95c3170001074c57",
  13.         "front-trace-id": get_front_trace_id(),
  14.         "Accept-Encoding": "gzip,compress,br,deflate",
  15.         "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.44(0x18002c2f) NetType/4G Language/zh_CN",
  16.         "Referer": "https://servicewechat.com/wxe3489c9feaf8f361/39/page-frame.html"
  17.     }
  18.     params = {
  19.         "locationParam" : {
  20.             "bsCityId" : bsCityId,
  21.             "locationCityId" : locationCityId
  22.         },
  23.         "preFiledId" : preFiledId,
  24.         "priceItemParam" : [
  25.             {
  26.                 "applyTickets" : [
  27.                 ],
  28.                 "priceItemType" : "TICKET_FEE",
  29.                 "priceItemSpecies" : "SEAT_PLAN",
  30.                 "priceItemVal" : "220.00",
  31.                 "priceDisplay" : "¥220",
  32.                 "priceItemName" : "票款总额",
  33.                 "direction" : "INCREASE"
  34.             }
  35.         ],
  36.         "merchantId" : "65373d6e95c3170001074c57",
  37.         "src" : "weixin_mini",
  38.         "appId" : "wxe3489c9feaf8f361",
  39.         "priorityId" : "",
  40.         "orderSource" : "COMMON",
  41.         "addressParam" : {
  42.         },
  43.         "many2OneAudience" : {
  44.         },
  45.         "ver" : ver,
  46.         "items" : [
  47.             {
  48.                 "sku" : {
  49.                     "ticketItems" : [
  50.                         {
  51.                             "id" : "1729591200100100000008",
  52.                             "audienceId" : audienceId
  53.                         }
  54.                     ],
  55.                     "ticketPrice" : "220.00",
  56.                     "skuId" : skuId,
  57.                     "qty" : 1,
  58.                     "skuType" : "SINGLE"
  59.                 },
  60.                 "spu" : {
  61.                     "addPromoVersionHash" : "EMPTY_PROMOTION_HASH",
  62.                     "promotionVersionHash" : "EMPTY_PROMOTION_HASH",
  63.                     "showId" : showId,
  64.                     "sessionId" : sessionId
  65.                 },
  66.                 "deliverMethod" : "E_TICKET"
  67.             }
  68.         ],
  69.         "paymentParam" : {
  70.             "totalAmount" : "220.00",
  71.             "payAmount" : "220.00"
  72.         },
  73.         "addPurchasePromotionId" : ""
  74.     }
  75.     res = requests.post(url=url, headers=headers, json=params)
  76.     return res
复制代码
(4)提交订单请求成功后,需要手动付款。
声明:本文仅供技能学习交流。 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

刘俊凯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表