style: 统一 Ruff 代码格式
This commit is contained in:
+145
-120
@@ -4,6 +4,7 @@
|
||||
|
||||
来源:m-shop.yaoguo.com 的 jce/ShopFacade.js、api/orderui.ts、api/mall/PlayMallNewHome.ts
|
||||
"""
|
||||
|
||||
from typing import List, Dict, Optional
|
||||
from .taf_protocol import TafOutputStream, TafInputStream, TafStruct, TafType
|
||||
|
||||
@@ -78,17 +79,19 @@ def _skip_to_struct_end(ins: TafInputStream):
|
||||
# 基础结构
|
||||
# ============================================================
|
||||
|
||||
|
||||
class UserId(TafStruct):
|
||||
"""用户标识(cookie 在这里)"""
|
||||
|
||||
def __init__(self):
|
||||
self.lUid: int = 0 # tag 0
|
||||
self.sGuid: str = "" # tag 1
|
||||
self.sToken: str = "" # tag 2
|
||||
self.sHuYaUA: str = "" # tag 3 "webh5&0.0.1&websocket&&diypc_52775"
|
||||
self.sCookie: str = "" # tag 4 完整 cookie
|
||||
self.iTokenType: int = 0 # tag 5
|
||||
self.sDeviceInfo: str = "" # tag 6
|
||||
self.sQIMEI: str = "" # tag 7
|
||||
self.lUid: int = 0 # tag 0
|
||||
self.sGuid: str = "" # tag 1
|
||||
self.sToken: str = "" # tag 2
|
||||
self.sHuYaUA: str = "" # tag 3 "webh5&0.0.1&websocket&&diypc_52775"
|
||||
self.sCookie: str = "" # tag 4 完整 cookie
|
||||
self.iTokenType: int = 0 # tag 5
|
||||
self.sDeviceInfo: str = "" # tag 6
|
||||
self.sQIMEI: str = "" # tag 7
|
||||
|
||||
def write_to(self, os: TafOutputStream):
|
||||
# HAR2 实证: 浏览器不优化空串/0值, 全写字段
|
||||
@@ -114,11 +117,12 @@ class UserId(TafStruct):
|
||||
|
||||
class ShopAppInfo(TafStruct):
|
||||
"""应用信息(HAR2 实证字段顺序: tag0 sAppId, tag1 sBizType, tag4 scene, tag5 sourceId)"""
|
||||
|
||||
def __init__(self):
|
||||
self.sAppId: str = "huya" # tag 0
|
||||
self.sBizType: str = "" # tag 1
|
||||
self.scene: int = 0 # tag 4
|
||||
self.sourceId: str = "" # tag 5
|
||||
self.sAppId: str = "huya" # tag 0
|
||||
self.sBizType: str = "" # tag 1
|
||||
self.scene: int = 0 # tag 4
|
||||
self.sourceId: str = "" # tag 5
|
||||
|
||||
def write_to(self, os: TafOutputStream):
|
||||
# HAR2 实证: 全写字段(含空串/0)
|
||||
@@ -138,14 +142,16 @@ class ShopAppInfo(TafStruct):
|
||||
# wsLaunch 初始化
|
||||
# ============================================================
|
||||
|
||||
|
||||
class WsLaunchSubStruct(TafStruct):
|
||||
"""wsLaunch tag4 子结构(5个空字符串字段,浏览器强制写)"""
|
||||
|
||||
def __init__(self):
|
||||
self.s0: str = "" # tag 0
|
||||
self.s1: str = "" # tag 1
|
||||
self.s2: str = "" # tag 2
|
||||
self.s3: str = "" # tag 3
|
||||
self.s4: str = "" # tag 4
|
||||
self.s0: str = "" # tag 0
|
||||
self.s1: str = "" # tag 1
|
||||
self.s2: str = "" # tag 2
|
||||
self.s3: str = "" # tag 3
|
||||
self.s4: str = "" # tag 4
|
||||
|
||||
def write_to(self, os: TafOutputStream):
|
||||
# 浏览器写空字符串(STRING1 length0),这里强制写以精确匹配
|
||||
@@ -169,11 +175,12 @@ class WsLaunchReq(TafStruct):
|
||||
tag3: appSrc "HUYA&ZH&2052"
|
||||
tag4: 子struct (5个空字符串)
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.lUid: int = 0 # tag 0
|
||||
self.s1: str = "" # tag 1
|
||||
self.lUid: int = 0 # tag 0
|
||||
self.s1: str = "" # tag 1
|
||||
self.sHuYaUA: str = "webh5&1.0.0&huya" # tag 2
|
||||
self.appSrc: str = "HUYA&ZH&2052" # tag 3
|
||||
self.appSrc: str = "HUYA&ZH&2052" # tag 3
|
||||
self.sub: WsLaunchSubStruct = WsLaunchSubStruct() # tag 4
|
||||
|
||||
def write_to(self, os: TafOutputStream):
|
||||
@@ -192,18 +199,20 @@ class WsLaunchReq(TafStruct):
|
||||
# 商品查询
|
||||
# ============================================================
|
||||
|
||||
|
||||
class GetGoodsInfoReqV5(TafStruct):
|
||||
"""商品查询请求 (shopMiddleUI.getGoodsInfoV5)"""
|
||||
|
||||
def __init__(self):
|
||||
self.userId = UserId() # tag 0
|
||||
self.userId = UserId() # tag 0
|
||||
self.shopAppInfo = ShopAppInfo() # tag 1
|
||||
self.pid: int = 0 # tag 2
|
||||
self.gameId: str = "" # tag 3
|
||||
self.spuId: str = "" # tag 4
|
||||
self.channelStockCode: str = "" # tag 5
|
||||
self.skuId: int = 0 # tag 6
|
||||
self.inviterUid: int = 0 # tag 7
|
||||
self.userModifyPriceId: int = 0 # tag 8
|
||||
self.pid: int = 0 # tag 2
|
||||
self.gameId: str = "" # tag 3
|
||||
self.spuId: str = "" # tag 4
|
||||
self.channelStockCode: str = "" # tag 5
|
||||
self.skuId: int = 0 # tag 6
|
||||
self.inviterUid: int = 0 # tag 7
|
||||
self.userModifyPriceId: int = 0 # tag 8
|
||||
|
||||
def write_to(self, os: TafOutputStream):
|
||||
# HAR2 实证: 全写字段
|
||||
@@ -224,13 +233,14 @@ class GetGoodsInfoReqV5(TafStruct):
|
||||
|
||||
class GoodsInfoRsp(TafStruct):
|
||||
"""商品查询响应。"""
|
||||
|
||||
def __init__(self):
|
||||
self.code: int = 0 # tag 0
|
||||
self.message: str = "" # tag 1
|
||||
self.goodsInfo = None # tag 2
|
||||
self.selfGoods: int = 0 # tag 3
|
||||
self.marketStatus: int = 0 # tag 5
|
||||
self.timestamp: int = 0 # tag 6
|
||||
self.code: int = 0 # tag 0
|
||||
self.message: str = "" # tag 1
|
||||
self.goodsInfo = None # tag 2
|
||||
self.selfGoods: int = 0 # tag 3
|
||||
self.marketStatus: int = 0 # tag 5
|
||||
self.timestamp: int = 0 # tag 6
|
||||
|
||||
def read_from(self, ins: TafInputStream):
|
||||
self.code = ins.read_int32(0, default=self.code)
|
||||
@@ -293,6 +303,7 @@ class GoodsInfoRsp(TafStruct):
|
||||
|
||||
class GoodsBaseInfo(TafStruct):
|
||||
"""商品基础信息(getGoodsInfoV5 tag2.tag0)。"""
|
||||
|
||||
def __init__(self):
|
||||
self.spuId: str = ""
|
||||
self.appId: str = ""
|
||||
@@ -328,6 +339,7 @@ class GoodsBaseInfo(TafStruct):
|
||||
|
||||
class GoodsSkuItem(TafStruct):
|
||||
"""商品 SKU 信息(getGoodsInfoV5 tag2.tag4.tag3 map value)。"""
|
||||
|
||||
def __init__(self):
|
||||
self.skuId: int = 0
|
||||
self.spuId: str = ""
|
||||
@@ -370,6 +382,7 @@ class GoodsSkuItem(TafStruct):
|
||||
|
||||
class GoodsPriceInfo(TafStruct):
|
||||
"""商品价格与 SKU 信息(getGoodsInfoV5 tag2.tag4)。"""
|
||||
|
||||
def __init__(self):
|
||||
self.spuId: str = ""
|
||||
self.minPrice: int = 0
|
||||
@@ -435,6 +448,7 @@ class GoodsPriceInfo(TafStruct):
|
||||
|
||||
class GoodsInfoDetail(TafStruct):
|
||||
"""getGoodsInfoV5 响应里的 goodsInfo 主体。"""
|
||||
|
||||
def __init__(self):
|
||||
self.baseInfo = GoodsBaseInfo()
|
||||
self.priceInfo = GoodsPriceInfo()
|
||||
@@ -457,8 +471,10 @@ class GoodsInfoDetail(TafStruct):
|
||||
# 订单历史
|
||||
# ============================================================
|
||||
|
||||
|
||||
class OrderListShopInfo(TafStruct):
|
||||
"""订单明细里的店铺信息(只取展示需要的字段)"""
|
||||
|
||||
def __init__(self):
|
||||
self.shopName: str = "" # tag 0
|
||||
|
||||
@@ -477,14 +493,15 @@ class OrderListShopInfo(TafStruct):
|
||||
|
||||
class OrderListGoodsDetail(TafStruct):
|
||||
"""订单明细(queryUserOrderList 响应 tag16)"""
|
||||
|
||||
def __init__(self):
|
||||
self.spuId: str = "" # tag 4
|
||||
self.skuId: int = 0 # tag 16
|
||||
self.buyerUid: int = 0 # tag 18
|
||||
self.virtualType: int = 0 # tag 19
|
||||
self.quantity: int = 0 # tag 20
|
||||
self.spuId: str = "" # tag 4
|
||||
self.skuId: int = 0 # tag 16
|
||||
self.buyerUid: int = 0 # tag 18
|
||||
self.virtualType: int = 0 # tag 19
|
||||
self.quantity: int = 0 # tag 20
|
||||
self.shopInfo: Optional[OrderListShopInfo] = None # tag 21
|
||||
self.points: int = 0 # tag 23
|
||||
self.points: int = 0 # tag 23
|
||||
|
||||
def read_from(self, ins: TafInputStream):
|
||||
self.spuId = ins.read_string(4, default=self.spuId)
|
||||
@@ -513,19 +530,20 @@ class OrderListGoodsDetail(TafStruct):
|
||||
|
||||
class OrderListItem(TafStruct):
|
||||
"""订单列表项(queryUserOrderList 响应 tag3 的 list 元素)"""
|
||||
|
||||
def __init__(self):
|
||||
self.bizOrderId: str = "" # tag 0 shop10148750
|
||||
self.appId: str = "" # tag 1 shop
|
||||
self.orderId: str = "" # tag 2
|
||||
self.pid: int = 0 # tag 3
|
||||
self.shopName: str = "" # tag 4
|
||||
self.orderStatus: int = 0 # tag 5
|
||||
self.itemName: str = "" # tag 8
|
||||
self.unitPrice: int = 0 # tag 9 分
|
||||
self.quantity: int = 0 # tag 10
|
||||
self.totalPrice: int = 0 # tag 12 分
|
||||
self.createTime: int = 0 # tag 14 毫秒时间戳
|
||||
self.payTime: int = 0 # tag 15 毫秒时间戳
|
||||
self.bizOrderId: str = "" # tag 0 shop10148750
|
||||
self.appId: str = "" # tag 1 shop
|
||||
self.orderId: str = "" # tag 2
|
||||
self.pid: int = 0 # tag 3
|
||||
self.shopName: str = "" # tag 4
|
||||
self.orderStatus: int = 0 # tag 5
|
||||
self.itemName: str = "" # tag 8
|
||||
self.unitPrice: int = 0 # tag 9 分
|
||||
self.quantity: int = 0 # tag 10
|
||||
self.totalPrice: int = 0 # tag 12 分
|
||||
self.createTime: int = 0 # tag 14 毫秒时间戳
|
||||
self.payTime: int = 0 # tag 15 毫秒时间戳
|
||||
self.goodsDetail: Optional[OrderListGoodsDetail] = None # tag 16
|
||||
|
||||
def read_from(self, ins: TafInputStream):
|
||||
@@ -567,12 +585,13 @@ class OrderListItem(TafStruct):
|
||||
|
||||
class QueryUserOrderListReq(TafStruct):
|
||||
"""查询购买历史订单 (revenueWebUI.queryUserOrderList)"""
|
||||
|
||||
def __init__(self):
|
||||
self.userId = UserId() # tag 0
|
||||
self.offset: int = 0 # tag 1
|
||||
self.orderType: int = 1 # tag 2
|
||||
self.pageSize: int = 10 # tag 3
|
||||
self.status: int = 0 # tag 4
|
||||
self.userId = UserId() # tag 0
|
||||
self.offset: int = 0 # tag 1
|
||||
self.orderType: int = 1 # tag 2
|
||||
self.pageSize: int = 10 # tag 3
|
||||
self.status: int = 0 # tag 4
|
||||
|
||||
def write_to(self, os: TafOutputStream):
|
||||
os.write_struct(0, self.userId)
|
||||
@@ -587,6 +606,7 @@ class QueryUserOrderListReq(TafStruct):
|
||||
|
||||
class QueryUserOrderListRsp(TafStruct):
|
||||
"""购买历史订单响应"""
|
||||
|
||||
def __init__(self):
|
||||
self.code: int = 0
|
||||
self.message: str = ""
|
||||
@@ -624,17 +644,18 @@ class QueryUserOrderListRsp(TafStruct):
|
||||
# 下单
|
||||
# ============================================================
|
||||
|
||||
|
||||
class CreateOrderExtraParam(TafStruct):
|
||||
def __init__(self):
|
||||
self.freight: int = 0 # tag 0
|
||||
self.channelStockType: str = "" # tag 1
|
||||
self.channelStockCode: str = "" # tag 2
|
||||
self.relatedBizId: str = "" # tag 3
|
||||
self.bizParams: str = "" # tag 4
|
||||
self.popupTraceId: str = "" # tag 5
|
||||
self.supplierUid: int = 0 # tag 6
|
||||
self.categoryId: str = "" # tag 7
|
||||
self.ext: str = "" # tag 8
|
||||
self.freight: int = 0 # tag 0
|
||||
self.channelStockType: str = "" # tag 1
|
||||
self.channelStockCode: str = "" # tag 2
|
||||
self.relatedBizId: str = "" # tag 3
|
||||
self.bizParams: str = "" # tag 4
|
||||
self.popupTraceId: str = "" # tag 5
|
||||
self.supplierUid: int = 0 # tag 6
|
||||
self.categoryId: str = "" # tag 7
|
||||
self.ext: str = "" # tag 8
|
||||
|
||||
def write_to(self, os: TafOutputStream):
|
||||
# HAR 实证:下单 extraParam 会强制写默认 0/空串字段
|
||||
@@ -655,9 +676,9 @@ class CreateOrderExtraParam(TafStruct):
|
||||
|
||||
class CreateOrderPromotionParam(TafStruct):
|
||||
def __init__(self):
|
||||
self.yxjDeductPrice: int = 0 # tag 0
|
||||
self.userModifyPriceId: int = 0 # tag 1
|
||||
self.enablePromotion: int = 1 # tag 2
|
||||
self.yxjDeductPrice: int = 0 # tag 0
|
||||
self.userModifyPriceId: int = 0 # tag 1
|
||||
self.enablePromotion: int = 1 # tag 2
|
||||
|
||||
def write_to(self, os: TafOutputStream):
|
||||
# HAR 实证:tag0/tag1 为 0,tag2 为 1
|
||||
@@ -671,11 +692,11 @@ class CreateOrderPromotionParam(TafStruct):
|
||||
|
||||
class CreateOrderAccountParam(TafStruct):
|
||||
def __init__(self):
|
||||
self.payoutTypeList: List[int] = [] # tag 0 Vector<INT32>
|
||||
self.payoutChargeAmount: int = 0 # tag 1
|
||||
self.cancelPayoutTypeList: List[int] = [] # tag 2
|
||||
self.recycleSupplierId: int = 0 # tag 3
|
||||
self.claimPrice: int = 0 # tag 4
|
||||
self.payoutTypeList: List[int] = [] # tag 0 Vector<INT32>
|
||||
self.payoutChargeAmount: int = 0 # tag 1
|
||||
self.cancelPayoutTypeList: List[int] = [] # tag 2
|
||||
self.recycleSupplierId: int = 0 # tag 3
|
||||
self.claimPrice: int = 0 # tag 4
|
||||
|
||||
def write_to(self, os: TafOutputStream):
|
||||
# HAR 实证:空 list/0 值也会写出
|
||||
@@ -691,8 +712,8 @@ class CreateOrderAccountParam(TafStruct):
|
||||
|
||||
class PromotionItem(TafStruct):
|
||||
def __init__(self):
|
||||
self.promotionId: int = 0 # tag 0
|
||||
self.promotionType: int = 0 # tag 1
|
||||
self.promotionId: int = 0 # tag 0
|
||||
self.promotionType: int = 0 # tag 1
|
||||
|
||||
def write_to(self, os: TafOutputStream):
|
||||
_opt_int(os, 0, self.promotionId)
|
||||
@@ -705,40 +726,41 @@ class PromotionItem(TafStruct):
|
||||
|
||||
class CreateOrderReqV5(TafStruct):
|
||||
"""下单请求 (shopMiddleUI.createOrderV5)"""
|
||||
|
||||
def __init__(self):
|
||||
self.userId = UserId() # tag 0
|
||||
self.shopAppInfo = ShopAppInfo() # tag 1
|
||||
self.receiveId: int = 0 # tag 2
|
||||
self.pid: int = 0 # tag 3
|
||||
self.skuId: int = 0 # tag 4
|
||||
self.itemCount: int = 1 # tag 5
|
||||
self.remark: str = "" # tag 6
|
||||
self.spuId: str = "" # tag 7
|
||||
self.gameId: str = "" # tag 8
|
||||
self.orderId: int = 0 # tag 9
|
||||
self.src: int = 0 # tag 10
|
||||
self.couponUserIds: List[int] = [] # tag 11 Vector<INT64>
|
||||
self.orderType: int = 0 # tag 12
|
||||
self.userId = UserId() # tag 0
|
||||
self.shopAppInfo = ShopAppInfo() # tag 1
|
||||
self.receiveId: int = 0 # tag 2
|
||||
self.pid: int = 0 # tag 3
|
||||
self.skuId: int = 0 # tag 4
|
||||
self.itemCount: int = 1 # tag 5
|
||||
self.remark: str = "" # tag 6
|
||||
self.spuId: str = "" # tag 7
|
||||
self.gameId: str = "" # tag 8
|
||||
self.orderId: int = 0 # tag 9
|
||||
self.src: int = 0 # tag 10
|
||||
self.couponUserIds: List[int] = [] # tag 11 Vector<INT64>
|
||||
self.orderType: int = 0 # tag 12
|
||||
self.extraParam: Optional[CreateOrderExtraParam] = None # tag 13
|
||||
self.scene: int = 0 # tag 14
|
||||
self.promotionItems: List = [] # tag 15 Vector<PromotionItem>
|
||||
self.sourceId: str = "" # tag 16
|
||||
self.env: Dict[str, str] = {} # tag 17 Map<STRING,STRING>
|
||||
self.orderScene: int = 0 # tag 18
|
||||
self.watchWord: str = "" # tag 19
|
||||
self.marketingChannel: str = "" # tag 20
|
||||
self.scene: int = 0 # tag 14
|
||||
self.promotionItems: List = [] # tag 15 Vector<PromotionItem>
|
||||
self.sourceId: str = "" # tag 16
|
||||
self.env: Dict[str, str] = {} # tag 17 Map<STRING,STRING>
|
||||
self.orderScene: int = 0 # tag 18
|
||||
self.watchWord: str = "" # tag 19
|
||||
self.marketingChannel: str = "" # tag 20
|
||||
self.promotionParam: Optional[CreateOrderPromotionParam] = None # tag 21
|
||||
self.externalTraceKey: str = "" # tag 22
|
||||
self.kefuUid: int = 0 # tag 23
|
||||
self.accountParam: Optional[CreateOrderAccountParam] = None # tag 24
|
||||
self.parentOrderId: int = 0 # tag 25
|
||||
self.vendorAccountType: str = "" # tag 26
|
||||
self.vendorAccountVal: str = "" # tag 27
|
||||
self.vendorSubAccountVal: str = "" # tag 28
|
||||
self.vendorSubAccountType: str = "" # tag 29
|
||||
self.bizType: int = 0 # tag 30
|
||||
self.gameCategoryId: int = 0 # tag 31
|
||||
self.ext: str = "" # tag 32
|
||||
self.externalTraceKey: str = "" # tag 22
|
||||
self.kefuUid: int = 0 # tag 23
|
||||
self.accountParam: Optional[CreateOrderAccountParam] = None # tag 24
|
||||
self.parentOrderId: int = 0 # tag 25
|
||||
self.vendorAccountType: str = "" # tag 26
|
||||
self.vendorAccountVal: str = "" # tag 27
|
||||
self.vendorSubAccountVal: str = "" # tag 28
|
||||
self.vendorSubAccountType: str = "" # tag 29
|
||||
self.bizType: int = 0 # tag 30
|
||||
self.gameCategoryId: int = 0 # tag 31
|
||||
self.ext: str = "" # tag 32
|
||||
|
||||
def write_to(self, os: TafOutputStream):
|
||||
# HAR 实证:createOrderV5 会写出完整字段,即使值为 0/空串/空 list
|
||||
@@ -782,13 +804,14 @@ class CreateOrderReqV5(TafStruct):
|
||||
|
||||
class CreateOrderRsp(TafStruct):
|
||||
"""下单响应 (shopMiddleUI.createOrderV5)"""
|
||||
|
||||
def __init__(self):
|
||||
self.code: int = 0 # tag 0
|
||||
self.message: str = "" # tag 1
|
||||
self.orderId: int = 0 # tag 2 虎牙订单号
|
||||
self.subOrderId: int = 0 # tag 4
|
||||
self.orderStatus: int = 0 # tag 5
|
||||
self.riskUrl: str = "" # tag 8 风控跳转URL(code!=200时可能有)
|
||||
self.code: int = 0 # tag 0
|
||||
self.message: str = "" # tag 1
|
||||
self.orderId: int = 0 # tag 2 虎牙订单号
|
||||
self.subOrderId: int = 0 # tag 4
|
||||
self.orderStatus: int = 0 # tag 5
|
||||
self.riskUrl: str = "" # tag 8 风控跳转URL(code!=200时可能有)
|
||||
|
||||
def read_from(self, ins: TafInputStream):
|
||||
self.code = ins.read_int32(0, default=self.code)
|
||||
@@ -806,19 +829,21 @@ class CreateOrderRsp(TafStruct):
|
||||
# 支付(payOrderSubmitV5)
|
||||
# ============================================================
|
||||
|
||||
|
||||
class PayOrderRes(TafStruct):
|
||||
"""
|
||||
发起支付响应 (shopMiddleUI.payOrderSubmitV5)
|
||||
结构从 state_shop_ts.js 的 payOrderRes 推断,tag 顺序按出现顺序
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.code: int = 0 # tag 0
|
||||
self.message: str = "" # tag 1
|
||||
self.orderId: int = 0 # tag 2 虎牙订单号
|
||||
self.appOrderId: str = "" # tag 3
|
||||
self.payOrderId: str = "" # tag 4 支付宝 payOrderId
|
||||
self.payUrl: str = "" # tag 5 支付宝下单URL(含sign)
|
||||
self.amount: int = 0 # tag 6
|
||||
self.code: int = 0 # tag 0
|
||||
self.message: str = "" # tag 1
|
||||
self.orderId: int = 0 # tag 2 虎牙订单号
|
||||
self.appOrderId: str = "" # tag 3
|
||||
self.payOrderId: str = "" # tag 4 支付宝 payOrderId
|
||||
self.payUrl: str = "" # tag 5 支付宝下单URL(含sign)
|
||||
self.amount: int = 0 # tag 6
|
||||
|
||||
def read_from(self, ins: TafInputStream):
|
||||
self.code = ins.read_int32(0, default=self.code)
|
||||
|
||||
Reference in New Issue
Block a user