当前位置: 首页 > java >正文

纷玩岛协议抢票免费源码

支持定时预售,支持回流捡漏,支持蹲候补

下载地址:纷玩岛协议源码_123云盘免登录下载不限速

.版本 2
.支持库 spec

.程序集 窗口程序集_启动窗口
.程序集变量 log, 控制台类
.程序集变量 全局参数存储, 文本型
.程序集变量 强制停止, 逻辑型
.程序集变量 剩余秒数, 整数型
.程序集变量 下单成功, 逻辑型
.程序集变量 循环次数, 整数型
.程序集变量 最大循环次数, 整数型
.程序集变量 场次ID, 文本型
.程序集变量 票价ID, 文本型
.程序集变量 票价金额, 文本型
.程序集变量 联系人, 文本型
.程序集变量 手机号, 文本型

.子程序 __启动窗口_创建完毕

log.创建 (真, “纷玩岛协议+无需IP版”, 真)
加载皮肤 (8)


.子程序 cmd_log
.参数 文本, 文本型
.局部变量 time, 文本型

time = “[” + 时间_到文本 (, 1, 3, 2) + “]”
log.标准输出 (, time + 文本, 2)
log.换行 ()

.子程序 _按钮2_被单击
.局部变量 res, 文本型
.局部变量 projectId, 文本型
.局部变量 name, 文本型
.局部变量 成员, 整数型
.局部变量 次数, 整数型
.局部变量 json, 类_json


组合框1.清空 ()
res = 查询 (编辑框1.内容)
json.解析 (res, , )
json.解析 (json.取属性 (“data”).取数据文本 (), , )
成员 = json.成员数 (json.取属性 (“data[0]”).取数据文本 ())
cmd_log (“场次:” + 到文本 (成员))
.计次循环首 (成员, 次数)
    projectId = json.取通用属性 (“[” + 到文本 (次数 - 1) + “].projectId”, )  ' 演出ID
    name = json.取通用属性 (“[” + 到文本 (次数 - 1) + “].name”, )


    组合框1.加入项目 (name + “----” + projectId, )
    cmd_log (name)

.计次循环尾 ()


.子程序 查询, 文本型, , 本命令由【精易网页调试助手】生成,请配合精易模块使用。
.参数 keyword, 文本型
.局部变量 局_网址, 文本型
.局部变量 局_方式, 整数型
.局部变量 局_提交数据, 文本型
.局部变量 ADD_协议头, 类_POST数据类
.局部变量 局_提交协议头, 文本型
.局部变量 局_结果, 字节集
.局部变量 局_返回, 文本型

' https://api.livelab.com.cn/search/app/search/text
局_网址 = “https://api.livelab.com.cn/search/app/search/text”
局_方式 = 1
' {"keyword":"林忆莲","channel":"2"}
局_提交数据 = “{” + #引号 + “keyword” + #引号 + “:” + #引号 + keyword + #引号 + “,” + #引号 + “channel” + #引号 + “:” + #引号 + “2” + #引号 + “}”
ADD_协议头.添加 (“Host”, “api.livelab.com.cn”, )
ADD_协议头.添加 (“Connection”, “keep-alive”, )
ADD_协议头.添加 (“Content-Length”, “37”, )
ADD_协议头.添加 (“xweb_xhr”, “1”, )
ADD_协议头.添加 (“platform-version”, “3.12.0”, )
ADD_协议头.添加 (“platform-type”, “%E7%BA%B7%E7%8E%A9%E5%B2%9B%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F”, )
ADD_协议头.添加 (“x-fwd-anonymousId”, “ocXac5K3oKxpSuFdnaEteS9FK2bc”, )
ADD_协议头.添加 (“User-Agent”, “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254061a) XWEB/14307”, )
ADD_协议头.添加 (“Content-Type”, “application/json”, )
ADD_协议头.添加 (“Accept”, “*/*”, )
ADD_协议头.添加 (“Sec-Fetch-Site”, “cross-site”, )
ADD_协议头.添加 (“Sec-Fetch-Mode”, “cors”, )
ADD_协议头.添加 (“Sec-Fetch-Dest”, “empty”, )
ADD_协议头.添加 (“Referer”, “https://servicewechat.com/wx5a8f481d967649eb/114/page-frame.html”, )
ADD_协议头.添加 (“Accept-Language”, “zh-CN,zh;q=0.9”, )

局_提交协议头 = ADD_协议头.获取协议头数据 ()

局_结果 = 网页_访问_对象 (局_网址, 局_方式, 局_提交数据, , , 局_提交协议头, , , , , , , , , , , , , )
局_返回 = 到文本 (编码_编码转换对象 (局_结果, , , ))
返回 (局_返回)


.子程序 _组合框1_列表项被选择
.局部变量 showid, 文本型
.局部变量 res, 文本型
.局部变量 json, 类_json
.局部变量 json_performInfos, 类_json
.局部变量 json_performInfo, 类_json
.局部变量 日期数, 整数型
.局部变量 场次数, 整数型
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 id, 文本型
.局部变量 name, 文本型

组合框2.清空 ()  ' 清空组合框2

' 1. 获取选中的项目并提取 showid
res = 组合框1.取项目文本 (组合框1.现行选中项)
showid = 文本_取右边 (res, “----”, , )

' 2. 查询场次时间
res = 查询场次时间 (showid)
.如果 (res = “”)
    信息框 (“请求失败,请检查网络”, 0, “错误”, )
    返回 ()
.否则
    json.解析 (res, , )  ' 解析最外层JSON
.如果结束

' 3. 检查是否存在 performInfos
.如果 (json.取属性 (“data.performInfos”).取数据文本 () = “null”)
    信息框 (“没有可用的演出场次”, 0, “提示”, )
    返回 ()
.否则
    ' 4. 解析 performInfos 数组
    json_performInfos.解析 (json.取属性 (“data.performInfos”).取数据文本 (), , )
    日期数 = json_performInfos.成员数 ()  ' 获取日期数量(示例中有2个日期)

    ' 5. 遍历每个日期的场次
    .计次循环首 (日期数, i)
        ' 解析当前日期的 performInfo 数组
        json_performInfo.解析 (json_performInfos.取属性 (“[” + 到文本 (i - 1) + “].performInfo”).取数据文本 (), , )
        场次数 = json_performInfo.成员数 ()

        ' 6. 遍历当前日期的所有场次
        .计次循环首 (场次数, j)
            id = json_performInfo.取通用属性 (“[” + 到文本 (j - 1) + “].id”, )
            name = json_performInfo.取通用属性 (“[” + 到文本 (j - 1) + “].name”, )

            ' 7. 添加到组合框2(格式:name----id)
            组合框2.加入项目 (name + “----” + id, )
        .计次循环尾 ()
    .计次循环尾 ()
.如果结束


.子程序 查询场次时间, 文本型
.参数 showid, 文本型
.局部变量 局_网址, 文本型
.局部变量 局_方式, 整数型
.局部变量 ADD_协议头, 类_POST数据类
.局部变量 局_提交协议头, 文本型
.局部变量 局_结果, 字节集
.局部变量 局_返回, 文本型

局_网址 = “https://api.livelab.com.cn/performance/app/project/get_performs?project_id=” + showid + “&v=” + 时间_取随机时间戳 () + “&retry=false”
局_方式 = 0

' 设置请求头
ADD_协议头.添加 (“Host”, “api.livelab.com.cn”, )
ADD_协议头.添加 (“Connection”, “keep-alive”, )
ADD_协议头.添加 (“Authorization”, “Bearer eyJhbGciOiJIUzUxMiJ9.eyJjdCI6MTc1NDMzMDg1NjIzNCwic3ViIjoiTDIxOTM0MTAzNCIsImF1ZCI6IkxJVkVMQUIiLCJpc3MiOiJUSUNLRVQiLCJtaWQiOjE3NTg4MDg1NzEzNzg2ODY5NTAsInR5cGUiOiJhcHBsZXQiLCJpYXQiOjE3NTQzMzA4NTYsImRpZCI6ImVmZjgwNDUzYWIxYjQ1MjciLCJrZXkiOiJMSVZFTEFCIn0.zgbyd8UFmURJbpb-75HLT48w9t_d5Jh2hx1FWyH3_ispGbyu-MpjyYPFWDhwSg-1Hbzry2HcEDa7kJmUJi7eNA”, )
ADD_协议头.添加 (“User-Agent”, “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254061a) XWEB/14307”, )

' ...其他请求头...

局_提交协议头 = ADD_协议头.获取协议头数据 ()

' 执行请求(增加超时设置)
局_结果 = 网页_访问_对象 (局_网址, 局_方式, , , , 局_提交协议头, , , , , , , , , , , , , )

' 检查请求结果
.如果 (取字节集长度 (局_结果) = 0)
    信息框 (“网络请求失败,请检查网络连接”, 0, “错误”, )
    返回 (“”)
.否则

.如果结束

局_返回 = 到文本 (编码_编码转换对象 (局_结果, , , ))
返回 (局_返回)

.子程序 _组合框2_列表项被选择
.局部变量 res, 文本型
.局部变量 json, 类_json
.局部变量 次数, 整数型
.局部变量 seatPlanName, 文本型
.局部变量 price, 文本型
.局部变量 status, 文本型
.局部变量 showid, 文本型
.局部变量 seatPlansData, 文本型
.局部变量 成员, 整数型
.局部变量 tagsData, 文本型
.局部变量 ashShowDesc, 文本型
.局部变量 seatPlanId, 文本型
.局部变量 canStandby, 逻辑型
.局部变量 standbyTag, 文本型
.局部变量 selectedPerformId, 文本型
.局部变量 json_performInfos, 类_json
.局部变量 json_performInfo, 类_json
.局部变量 i, 整数型
.局部变量 performIndex, 整数型

' 清空组合框3
组合框3.清空 ()

' 获取当前选择的场次ID
selectedPerformId = 文本_取右边 (组合框2.取项目文本 (组合框2.现行选中项), “----”, , )

' 获取演出ID
res = 组合框1.取项目文本 (组合框1.现行选中项)
showid = 文本_取右边 (res, “----”, , )

' 查询票价信息
res = 查询票价 (showid)
调试输出 (“API返回数据:”, res)

' 解析JSON数据
.如果 (json.解析 (res, , ) = 假)
    信息框 (“JSON解析失败!”, 0, “错误”, )
    返回 ()
.否则
    ' 检查data.performInfos是否存在
    .如果 (json.取属性 (“data.performInfos”).取数据文本 () = “[]” 或 json.取属性 (“data.performInfos”).取数据文本 () = “”)
        信息框 (“没有可用的演出场次信息!”, 0, “提示”, )
        返回 ()
    .否则
        ' 查找当前选择的场次
        json_performInfos.解析 (json.取属性 (“data.performInfos”).取数据文本 (), , )
        performIndex = -1

        ' 遍历所有场次找到匹配的
        .计次循环首 (json_performInfos.成员数 (), i)
            json_performInfo.解析 (json_performInfos.取属性 (“[” + 到文本 (i - 1) + “].performInfo”).取数据文本 (), , )

            .如果 (json_performInfo.取通用属性 (“[0].id”, ) = selectedPerformId)
                performIndex = i - 1
                跳出循环 ()
            .否则

            .如果结束

        .计次循环尾 ()

        .如果 (performIndex = -1)
            信息框 (“未找到匹配的场次信息!”, 0, “错误”, )
            返回 ()
        .否则

        .如果结束

        ' 获取对应场次的seatPlans数据
        seatPlansData = json_performInfos.取属性 (“[” + 到文本 (performIndex) + “].performInfo[0].seatPlans”).取数据文本 ()

        .如果 (seatPlansData = “[]” 或 seatPlansData = “”)
            信息框 (“该场次没有座位信息!”, 0, “提示”, )
            返回 ()
        .否则
            json.解析 (seatPlansData, , )
            成员 = json.成员数 ()

            ' 遍历所有座位区域
            .计次循环首 (成员, 次数)
                seatPlanId = json.取通用属性 (“[” + 到文本 (次数 - 1) + “].seatPlanId”, )
                seatPlanName = json.取通用属性 (“[” + 到文本 (次数 - 1) + “].seatPlanName”, )
                price = 到文本 (json.取通用属性 (“[” + 到文本 (次数 - 1) + “].price”, ))
                ashShowDesc = json.取通用属性 (“[” + 到文本 (次数 - 1) + “].ashShowDesc”, )
                tagsData = json.取属性 (“[” + 到文本 (次数 - 1) + “].tags”).取数据文本 ()

                ' 检查候补标签 - 更全面的判断
                canStandby = 假
                standbyTag = “”

                ' 检查所有可能的候补相关标签
                .如果 (寻找文本 (tagsData, “可候补”, , 假) ≠ -1)
                    canStandby = 真
                    standbyTag = “[可候补]”
                .否则
                    .如果 (寻找文本 (tagsData, “候补人数已满”, , 假) ≠ -1)
                        standbyTag = “[候补已满]”
                    .否则
                        .如果 (寻找文本 (tagsData, “缺票登记”, , 假) ≠ -1)
                            standbyTag = “[缺票登记]”
                        .否则
                            standbyTag = “”
                        .如果结束

                    .如果结束

                .如果结束

                ' 状态判断
                .如果 (ashShowDesc = “未到销售时间”)
                    status = “未开售”
                .否则
                    .如果 (json.取通用属性 (“[” + 到文本 (次数 - 1) + “].availableTicketQuantity”, ) ≠ “0”)
                        status = “有票”
                    .否则
                        status = “无票”
                    .如果结束

                .如果结束

                ' 添加到组合框3
                组合框3.加入项目 (seatPlanName + “ ” + price + “元 [” + status + “]” + standbyTag + “----” + seatPlanId, )

                cmd_log (“添加座位信息:” + seatPlanName + price + status + standbyTag + seatPlanId)
            .计次循环尾 ()
        .如果结束

    .如果结束

.如果结束


.子程序 查询票价, 文本型
.参数 showid, 文本型
.局部变量 局_网址, 文本型
.局部变量 局_方式, 整数型
.局部变量 ADD_协议头, 类_POST数据类
.局部变量 局_提交协议头, 文本型
.局部变量 局_结果, 字节集
.局部变量 局_返回, 文本型

局_网址 = “https://api.livelab.com.cn/performance/app/project/get_performs?project_id=” + showid + “&v=” + 时间_取随机时间戳 () + “&retry=false”
局_方式 = 0

' 设置请求头
ADD_协议头.添加 (“Host”, “api.livelab.com.cn”, )
ADD_协议头.添加 (“Connection”, “keep-alive”, )
ADD_协议头.添加 (“Authorization”, “Bearer eyJhbGciOiJIUzUxMiJ9.eyJjdCI6MTc1NDMzMDg1NjIzNCwic3ViIjoiTDIxOTM0MTAzNCIsImF1ZCI6IkxJVkVMQUIiLCJpc3MiOiJUSUNLRVQiLCJtaWQiOjE3NTg4MDg1NzEzNzg2ODY5NTAsInR5cGUiOiJhcHBsZXQiLCJpYXQiOjE3NTQzMzA4NTYsImRpZCI6ImVmZjgwNDUzYWIxYjQ1MjciLCJrZXkiOiJMSVZFTEFCIn0.zgbyd8UFmURJbpb-75HLT48w9t_d5Jh2hx1FWyH3_ispGbyu-MpjyYPFWDhwSg-1Hbzry2HcEDa7kJmUJi7eNA”, )
ADD_协议头.添加 (“User-Agent”, “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254061a) XWEB/14307”, )
ADD_协议头.添加 (“Content-Type”, “application/json”, )
ADD_协议头.添加 (“Accept”, “*/*”, )
ADD_协议头.添加 (“Sec-Fetch-Site”, “cross-site”, )
ADD_协议头.添加 (“Sec-Fetch-Mode”, “cors”, )
ADD_协议头.添加 (“Sec-Fetch-Dest”, “empty”, )
ADD_协议头.添加 (“Referer”, “https://servicewechat.com/wx5a8f481d967649eb/114/page-frame.html”, )
ADD_协议头.添加 (“Accept-Language”, “zh-CN,zh;q=0.9”, )

局_提交协议头 = ADD_协议头.获取协议头数据 ()

局_结果 = 网页_访问_对象 (局_网址, 局_方式, , , , 局_提交协议头, , , , , , , , , , , , , )
局_返回 = 到文本 (编码_编码转换对象 (局_结果, , , ))
返回 (局_返回)

.子程序 __按钮_下单_被单击
.局部变量 演出ID, 文本型
.局部变量 场次ID, 文本型
.局部变量 票价信息, 文本型
.局部变量 seatPlanId, 文本型
.局部变量 票价, 文本型
.局部变量 联系人, 文本型
.局部变量 手机号, 文本型
.局部变量 下单结果, 文本型

' 1. 获取用户选择的各项信息
' 从组合框1获取演出ID(projectId)
演出ID = 文本_取右边 (组合框1.取项目文本 (组合框1.现行选中项), “----”, , )

' 从组合框2获取场次ID(performId)
场次ID = 文本_取右边 (组合框2.取项目文本 (组合框2.现行选中项), “----”, , )

' 从组合框3获取票价信息和seatPlanId
票价信息 = 组合框3.取项目文本 (组合框3.现行选中项)
seatPlanId = 文本_取右边 (票价信息, “----”, , )
票价 = 文本_取出中间文本 (票价信息, “ ”, “元”, , )

' 获取用户输入的联系人信息
联系人 = 编辑框_联系人.内容
手机号 = 编辑框_手机号.内容
' 2. 验证必填信息
.如果 (演出ID = “” 或 场次ID = “” 或 seatPlanId = “” 或 联系人 = “” 或 手机号 = “”)
    信息框 (“请完整选择演出、场次、票价并填写联系人信息!”, 0, “提示”, )
    返回 ()
.否则

.如果结束

' 3. 调试输出选择的信息(可选)
调试输出 (“下单信息:”, “演出ID=” + 演出ID, “场次ID=” + 场次ID, “seatPlanId=” + seatPlanId, “票价=” + 票价, “联系人=” + 联系人, “手机号=” + 手机号)

' 4. 调用下单函数
下单结果 = 测试下单 (联系人, 手机号, 场次ID, 演出ID, seatPlanId, 票价)

' 5. 显示下单结果
.如果 (寻找文本 (下单结果, #引号 + “code” + #引号 + “:10000”, , 假) ≠ -1)  ' 假设10000表示成功
    cmd_log (“下单成功了!” + “恭喜发财!,为您播放音乐大展宏图”)
    播放MP3 (1, 取运行目录 () + “\警报\1.mp3”)

.否则
    cmd_log (“下单失败:” + 下单结果)
.如果结束

.子程序 测试下单, 文本型
.参数 联系人, 文本型
.参数 手机号, 文本型
.参数 场次ID, 文本型
.参数 演出ID, 文本型
.参数 seatPlanId, 文本型
.参数 票价, 文本型
.局部变量 局_网址, 文本型
.局部变量 局_方式, 整数型
.局部变量 局_提交数据, 文本型
.局部变量 ADD_协议头, 类_POST数据类
.局部变量 局_提交协议头, 文本型
.局部变量 局_结果, 字节集
.局部变量 局_返回, 文本型

局_网址 = “https://api.livelab.com.cn/order/app/center/v3/create”
局_方式 = 1

' 构造提交数据(使用传入的参数)
局_提交数据 = “{”
局_提交数据 = 局_提交数据 + #引号 + “deliveryType” + #引号 + “:1,”
局_提交数据 = 局_提交数据 + #引号 + “contactName” + #引号 + “:” + #引号 + 联系人 + #引号 + “,”
局_提交数据 = 局_提交数据 + #引号 + “contactPhone” + #引号 + “:” + #引号 + 手机号 + #引号 + “,”
局_提交数据 = 局_提交数据 + #引号 + “combineTicketVos” + #引号 + “:null,”
局_提交数据 = 局_提交数据 + #引号 + “ordinaryTicketVos” + #引号 + “:null,”
局_提交数据 = 局_提交数据 + #引号 + “payment” + #引号 + “:” + 票价 + “,”
局_提交数据 = 局_提交数据 + #引号 + “totalPrice” + #引号 + “:” + 票价 + “,”
局_提交数据 = 局_提交数据 + #引号 + “performId” + #引号 + “:” + 场次ID + “,”
局_提交数据 = 局_提交数据 + #引号 + “projectId” + #引号 + “:” + #引号 + 演出ID + #引号 + “,”
局_提交数据 = 局_提交数据 + #引号 + “privilegeCodeList” + #引号 + “:[],”
局_提交数据 = 局_提交数据 + #引号 + “audienceCount” + #引号 + “:1,”
局_提交数据 = 局_提交数据 + #引号 + “frequentIds” + #引号 + “:[49131974],”  ' 这个可能需要动态获取
局_提交数据 = 局_提交数据 + #引号 + “seatPlanIds” + #引号 + “:[” + seatPlanId + “],”
局_提交数据 = 局_提交数据 + #引号 + “blackBox” + #引号 + “:” + #引号 + “:0” + #引号
局_提交数据 = 局_提交数据 + “}”

' 设置请求头(保持原有)
ADD_协议头.添加 (“Host”, “api.livelab.com.cn”, )
ADD_协议头.添加 (“Connection”, “keep-alive”, )
ADD_协议头.添加 (“Content-Length”, “299”, )
ADD_协议头.添加 (“xweb_xhr”, “1”, )
ADD_协议头.添加 (“platform-version”, “3.13.0”, )
ADD_协议头.添加 (“platform-type”, “%E7%BA%B7%E7%8E%A9%E5%B2%9B%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F”, )
ADD_协议头.添加 (“x-fwd-anonymousId”, “ocXac5K8xbOpE0vT4BQf1bNzPUis”, )
ADD_协议头.添加 (“Authorization”, “Bearer ” + 编辑框_token.内容, )
ADD_协议头.添加 (“User-Agent”, “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254061a) XWEB/14307”)

ADD_协议头.添加 (“Content-Type”, “application/json”, )
ADD_协议头.添加 (“Accept”, “*/*”, )
ADD_协议头.添加 (“Sec-Fetch-Site”, “cross-site”, )
ADD_协议头.添加 (“Sec-Fetch-Mode”, “cors”, )
ADD_协议头.添加 (“Sec-Fetch-Dest”, “empty”, )
ADD_协议头.添加 (“Referer”, “https://servicewechat.com/wx5a8f481d967649eb/115/page-frame.html”, )
ADD_协议头.添加 (“Accept-Language”, “zh-CN,zh;q=0.9”, )

局_提交协议头 = ADD_协议头.获取协议头数据 ()

局_结果 = 网页_访问_对象 (局_网址, 局_方式, 局_提交数据, , , 局_提交协议头, , , , , , , , , , , , , )
局_返回 = 到文本 (编码_编码转换对象 (局_结果, , , ))
返回 (局_返回)


.子程序 _候补_被单击
.局部变量 演出ID, 文本型
.局部变量 场次ID, 文本型
.局部变量 票价信息, 文本型
.局部变量 seatPlanId, 文本型
.局部变量 票价, 文本型
.局部变量 联系人, 文本型
.局部变量 手机号, 文本型
.局部变量 候补结果, 文本型
.局部变量 当前选中项文本, 文本型
.局部变量 可候补标志, 逻辑型

' 1. 验证必填信息
' 检查是否选择了演唱会
.如果 (组合框1.现行选中项 = -1)
    信息框 (“请先搜索并选择演唱会!”, 0, “提示”, )
    返回 ()
.否则

.如果结束

' 检查是否选择了场次
.如果 (组合框2.现行选中项 = -1)
    信息框 (“请先选择演出场次!”, 0, “提示”, )
    返回 ()
.否则

.如果结束

' 检查是否选择了票价
.如果 (组合框3.现行选中项 = -1)
    信息框 (“请先选择票价档位!”, 0, “提示”, )
    返回 ()
.否则

.如果结束

' 2. 获取选择的票档信息
当前选中项文本 = 组合框3.取项目文本 (组合框3.现行选中项)

' 检查是否可候补
.如果 (寻找文本 (当前选中项文本, “[可候补]”, , 假) = -1)
    信息框 (“当前选择的票档不支持候补或候补已满!”, 0, “提示”, )
    返回 ()
.否则

.如果结束

' 3. 获取各项ID和参数
' 从组合框1获取演出ID
演出ID = 文本_取右边 (组合框1.取项目文本 (组合框1.现行选中项), “----”, , )

' 从组合框2获取场次ID
场次ID = 文本_取右边 (组合框2.取项目文本 (组合框2.现行选中项), “----”, , )

' 从组合框3获取seatPlanId
seatPlanId = 文本_取右边 (当前选中项文本, “----”, , )

' 获取票价
票价 = 文本_取出中间文本 (当前选中项文本, “ ”, “元”, , )

' 4. 获取联系人信息
联系人 = 编辑框_联系人.内容
手机号 = 编辑框_手机号.内容

' 验证联系人信息
.如果 (联系人 = “” 或 手机号 = “”)
    信息框 (“请填写联系人姓名和手机号!”, 0, “提示”, )
    返回 ()
.否则

.如果结束


调试输出 (“准备候补:”, “演出ID=” + 演出ID, “场次ID=” + 场次ID, “seatPlanId=” + seatPlanId, “票价=” + 票价)

候补结果 = 提交候补订单 (联系人, 手机号, 场次ID, 演出ID, seatPlanId, 票价)

.如果 (寻找文本 (候补结果, #引号 + “code” + #引号 + “:10000”, , 假) ≠ -1)
    cmd_log (“候补成功!”)
.否则
    cmd_log (“候补失败:” + 候补结果)
.如果结束


.子程序 _选择框1_被单击

.如果真 (选择框1.选中 = 真)
    .判断循环首 (真)
        延迟 (450)


        __按钮_下单_被单击 ()
        .如果真 (选择框1.选中 = 假)
            跳出循环 ()

        .如果真结束

    .判断循环尾 ()


.如果真结束

.子程序 _选择框2_被单击

.如果真 (选择框2.选中 = 真)
    .判断循环首 (真)
        延迟 (450)


        _候补_被单击 ()
        .如果真 (选择框2.选中 = 假)
            跳出循环 ()

        .如果真结束

    .判断循环尾 ()

.如果真结束


.子程序 提交候补订单, 文本型
.参数 联系人, 文本型
.参数 手机号, 文本型
.参数 场次ID, 文本型
.参数 演出ID, 文本型
.参数 seatPlanId, 文本型
.参数 票价, 文本型
.局部变量 局_网址, 文本型
.局部变量 局_方式, 整数型
.局部变量 局_提交数据, 文本型
.局部变量 ADD_协议头, 类_POST数据类
.局部变量 局_提交协议头, 文本型
.局部变量 局_结果, 字节集
.局部变量 局_返回, 文本型
.局部变量 json, 类_json

局_网址 = “https://api.livelab.com.cn/order/app/center/standby”
局_方式 = 1

' 构造候补提交数据 - 通用化处理任何演唱会
局_提交数据 = “{”
局_提交数据 = 局_提交数据 + #引号 + “deliveryType” + #引号 + “:1,”
局_提交数据 = 局_提交数据 + #引号 + “contactName” + #引号 + “:” + #引号 + 联系人 + #引号 + “,”
局_提交数据 = 局_提交数据 + #引号 + “contactPhone” + #引号 + “:” + #引号 + 手机号 + #引号 + “,”
局_提交数据 = 局_提交数据 + #引号 + “checkedAddress” + #引号 + “:{},”
局_提交数据 = 局_提交数据 + #引号 + “bearerIds” + #引号 + “:[49131974],”  ' 需要改为动态获取观演人ID
局_提交数据 = 局_提交数据 + #引号 + “performId” + #引号 + “:” + 场次ID + “,”
局_提交数据 = 局_提交数据 + #引号 + “projectId” + #引号 + “:” + #引号 + 演出ID + #引号 + “,”
局_提交数据 = 局_提交数据 + #引号 + “payment” + #引号 + “:” + 票价 + “,”
局_提交数据 = 局_提交数据 + #引号 + “spIds” + #引号 + “:[” + seatPlanId + “],”
局_提交数据 = 局_提交数据 + #引号 + “ticketsAmount” + #引号 + “:1,”
局_提交数据 = 局_提交数据 + #引号 + “totalPrice” + #引号 + “:” + 票价 + “,”
局_提交数据 = 局_提交数据 + #引号 + “blackBox” + #引号 + “:” + #引号 + “:0” + #引号
局_提交数据 = 局_提交数据 + “}”

' 设置通用请求头
ADD_协议头.添加 (“Host”, “api.livelab.com.cn”, )
ADD_协议头.添加 (“Connection”, “keep-alive”, )
ADD_协议头.添加 (“Content-Length”, 到文本 (取文本长度 (局_提交数据)), )
ADD_协议头.添加 (“xweb_xhr”, “1”, )
ADD_协议头.添加 (“platform-version”, “3.13.0”, )
ADD_协议头.添加 (“platform-type”, “%E7%BA%B7%E7%8E%A9%E5%B2%9B%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F”, )
ADD_协议头.添加 (“x-fwd-anonymousId”, “ocXac5K8xbOpE0vT4BQf1bNzPUis”, )
ADD_协议头.添加 (“Authorization”, “Bearer ” + 编辑框_token.内容, )
ADD_协议头.添加 (“User-Agent”, “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254061a) XWEB/14307”)
ADD_协议头.添加 (“Content-Type”, “application/json”, )
ADD_协议头.添加 (“Accept”, “*/*”, )
ADD_协议头.添加 (“Sec-Fetch-Site”, “cross-site”, )
ADD_协议头.添加 (“Sec-Fetch-Mode”, “cors”, )
ADD_协议头.添加 (“Sec-Fetch-Dest”, “empty”, )
ADD_协议头.添加 (“Referer”, “https://servicewechat.com/wx5a8f481d967649eb/115/page-frame.html”, )
ADD_协议头.添加 (“Accept-Language”, “zh-CN,zh;q=0.9”, )

局_提交协议头 = ADD_协议头.获取协议头数据 ()

' 发送候补请求
局_结果 = 网页_访问_对象 (局_网址, 局_方式, 局_提交数据, , , 局_提交协议头, , , , , , , , , , , , , )
局_返回 = 到文本 (编码_编码转换对象 (局_结果, , , ))

' 解析返回结果
.如果 (json.解析 (局_返回, , ))
    .如果 (json.取通用属性 (“code”, ) = “10000”)
        返回 (“候补成功!”)
    .否则
        返回 (“候补失败:” + json.取通用属性 (“msg”, ))
    .如果结束

.否则
    返回 (“候补请求失败,返回数据解析错误:” + 局_返回)
.如果结束


.子程序 _按钮8_被单击
.局部变量 时, 整数型
.局部变量 分, 整数型
.局部变量 秒, 整数型
.局部变量 当前时分秒, 整数型
.局部变量 目标时分秒, 整数型
.局部变量 当前时间, 日期时间型
.局部变量 目标时间文本, 文本型

' 初始化状态
下单成功 = 假
循环次数 = 0

' 验证时间输入
.如果 (编辑框_时.内容 = “” 或 编辑框_分.内容 = “” 或 编辑框_秒.内容 = “”)
    信息框 (“请填写完整的定时时间!”, 0, “提示”, )
    返回 ()
.否则
    时 = 到整数 (编辑框_时.内容)
    分 = 到整数 (编辑框_分.内容)
    秒 = 到整数 (编辑框_秒.内容)
    .如果 (时 < 0 或 时 > 23 或 分 < 0 或 分 > 59 或 秒 < 0 或 秒 > 59)
        信息框 (“时间格式错误!时(0-23) 分(0-59) 秒(0-59)”, 0, “错误”, )
        返回 ()
    .否则

    .如果结束

.如果结束

' 验证是否已选择必要信息(通过模拟点击前的检查)
.如果 (组合框1.现行选中项 = -1 或 组合框2.现行选中项 = -1 或 组合框3.现行选中项 = -1)
    信息框 (“请先选择演出、场次和票价!”, 0, “提示”, )
    返回 ()
.否则

.如果结束

.如果 (编辑框_联系人.内容 = “” 或 编辑框_手机号.内容 = “”)
    信息框 (“请填写联系人和手机号!”, 0, “提示”, )
    返回 ()
.否则

.如果结束

' 计算倒计时秒数
当前时间 = 取现行时间 ()
当前时分秒 = 取小时 (当前时间) × 3600 + 取分钟 (当前时间) × 60 + 取秒 (当前时间)
目标时分秒 = 时 × 3600 + 分 × 60 + 秒

' 计算剩余秒数(今天或明天)
.如果 (目标时分秒 > 当前时分秒)
    剩余秒数 = 目标时分秒 - 当前时分秒
    目标时间文本 = 补两位 (时) + “:” + 补两位 (分) + “:” + 补两位 (秒)
    cmd_log (“定时任务启动,将在今天 ” + 目标时间文本 + “ 开始下单”)
.否则
    剩余秒数 = 86400 - 当前时分秒 + 目标时分秒
    目标时间文本 = 补两位 (时) + “:” + 补两位 (分) + “:” + 补两位 (秒)
    cmd_log (“今天的” + 目标时间文本 + “已过,将在明天同一时间开始下单”)
.如果结束

' 启动时钟(1秒触发一次)
时钟1.时钟周期 = 1000
cmd_log (“倒计时开始,剩余” + 到文本 (剩余秒数) + “秒”)

.子程序 _时钟1_周期事件
.局部变量 下单结果, 文本型

' 倒计时逻辑
.如果 (剩余秒数 > 0 且 下单成功 = 假)
    剩余秒数 = 剩余秒数 - 1
    ' 每10秒或最后10秒输出一次倒计时
    .如果 (剩余秒数 ≤ 10 或 剩余秒数 % 10 = 0)
        cmd_log (“倒计时:” + 到文本 (剩余秒数) + “秒”)
    .否则

    .如果结束
    返回 ()
.否则
    时钟1.时钟周期 = 0  ' 停止倒计时时钟
.如果结束

' 倒计时结束,开始循环调用手动下单按钮的子程序
.如果 (下单成功 = 假)
    循环次数 = 循环次数 + 1
    cmd_log (“第” + 到文本 (循环次数) + “次尝试下单”)

    ' 关键:直接调用现有手动下单按钮的子程序
    __按钮_下单_被单击 ()

    ' 注意:如果需要判断是否成功,需要从原下单逻辑中获取结果
    ' (如果原按钮有返回结果的变量,可以在这里判断)
    ' 示例:如果原按钮用全局变量存储结果,可以这样判断:
    ' .如果 (全局下单结果 包含 “code:10000”)
    ' 下单成功 = 真
    ' .否则
    ' 时钟1.时钟周期 = 600
    ' .如果结束

    ' 暂时设置为固定间隔重试(根据实际情况调整)
    时钟1.时钟周期 = 600  ' 600毫秒后再次尝试
.否则
    ' 下单成功后处理
    时钟1.时钟周期 = 0
    cmd_log (“任务完成,下单成功”)
.如果结束


.子程序 补两位, 文本型
.参数 数值, 整数型

.如果 (数值 < 10)
    返回 (“0” + 到文本 (数值))
.否则
    返回 (到文本 (数值))
.如果结束

http://www.xdnf.cn/news/18385.html

相关文章:

  • Spring两个核心IoCDI(一)
  • java基础(十三)消息队列
  • #千问海报大赛
  • ORACLE中如何批量重置序列
  • 常德二院全栈国产化实践:KingbaseES 数据库的关键作用
  • PyTorch数据处理工具箱(可视化工具)
  • 大模型0基础开发入门与实践:第11章 进阶:LangChain与外部工具调用
  • Building Systems with the ChatGPT API 使用 ChatGPT API 搭建系统(第四章学习笔记及总结)
  • Eino 框架组件协作指南 - 智能图书馆建设手册
  • RAG学习(四)——使用混合检索进行检索优化
  • 机器学习4
  • 自己动手,在Mac开发机上利用ollama部署一款轻量级的大模型Phi-3:mini
  • Python Excel 通用筛选函数
  • 麒麟系统播放图片 速度比较
  • Python工程师进阶学习道路分析
  • 【Django:基础知识】
  • 数据结构-ArrayList
  • Redis实战-基于Session实现分布式登录
  • PyTorch API 1
  • PyTorch API 5
  • 372. 超级次方
  • IIS访问报错:HTTP 错误 500.19 - Internal Server Error
  • Spring Retry实战指南_让你的应用更具韧性
  • 区块链技术:重塑未来互联网的伟大动力
  • Python Day32 JavaScript 数组与对象核心知识点整理
  • 源码编译部署 LAMP 架构详细步骤说明
  • Java设计模式-命令模式
  • python的校园顺路代送系统
  • Day 40:训练和测试的规范写法
  • Flink实现Exactly-Once语义的完整技术分解