qq 登录修复

This commit is contained in:
yml2213
2026-08-12 19:45:15 +08:00
parent 5074faf9f6
commit 4c978b923b
7 changed files with 88 additions and 19 deletions
+26 -5
View File
@@ -480,6 +480,8 @@ def main() -> int:
p.add_argument("--role-name", default=None, help="游戏角色名称;默认使用模板当前角色")
p.add_argument("--zone-id", default=None, help="游戏区服 ID;默认使用模板当前区服")
p.add_argument("--zone-name", default=None, help="游戏区服名称")
p.add_argument("--area", default=None, help="游戏大区 ID(QQ 平台与 zoneid 不同,来自角色查询的 partition_info")
p.add_argument("--partition", default=None, help="游戏分区 IDQQ 平台可为空)")
p.add_argument("--pf", default=None, help="支付平台标识;由角色选择器按 Android/iOS 写入")
p.add_argument("--output", default=None)
p = msub.add_parser("pay", help="mall 下单 -> goods web_save -> 微信支付二维码(纯 Python)")
@@ -624,8 +626,17 @@ def _apply_card_selection(payload: dict, args) -> None:
zone_id = getattr(args, "zone_id", None)
if zone_id:
product["zoneid"] = zone_id
product["area"] = zone_id
payload["zoneid"] = zone_id
# QQ 平台的大区(area)与 zoneid 不同,来自角色查询的 partition_info
# 必须用真实 area,否则 PlaceOrder 校验角色失败(gamerole err)。
area = getattr(args, "area", None)
if area:
product["area"] = area
elif zone_id:
product["area"] = zone_id
partition = getattr(args, "partition", None)
if partition is not None:
product["partition"] = partition
zone_name = getattr(args, "zone_name", None)
if zone_name:
product["zonename"] = zone_name
@@ -696,12 +707,22 @@ def cmd_mall_auto(args) -> int:
out.write_text(raw, encoding="utf-8")
js = json.loads(raw)
ret = js.get("result_code")
if ret == "0":
cr = json.loads(js["data"]["call_reply"])
print(f"✅ 仅CK全自动下单成功! token={cr['data']['token'][:24]}...")
try:
call_reply = json.loads(js["data"]["call_reply"])
except (KeyError, TypeError, json.JSONDecodeError):
call_reply = {}
# PlaceOrder 业务失败(如 10014 gamerole err)时外层 result_code 仍可能为 0
# 必须检查 call_reply 的 result_code,避免把失败当成功后再崩溃。
inner_ret = call_reply.get("result_code")
if ret == "0" and str(inner_ret) in ("0", "None", ""):
data = call_reply.get("data") or {}
token = str(data.get("token") or "")[:24]
print(f"✅ 仅CK全自动下单成功! token={token or '(无 token)'}...")
print(f" 响应已保存 → {out}")
return 0
print(f"❌ 下单失败 ret={ret} ({js.get('result_info', '')})")
detail = js.get("result_info", "") or call_reply.get("result_info", "") or ""
print(f"❌ 下单失败 ret={ret} inner={inner_ret} ({detail})")
print(f" 响应已保存 → {out}")
return 1