初步实现下发需要验证码结构给后端
This commit is contained in:
@@ -342,29 +342,72 @@ class WebSocketManager:
|
||||
def _start_pdd_listener(self, store_id: str, data: str):
|
||||
"""启动拼多多平台监听"""
|
||||
try:
|
||||
# ✨ 硬编码的Cookie,用于测试(当被风控时使用)
|
||||
HARDCODED_PDD_COOKIES = "api_uid=CiDokWi36GiOnwCiu5avAg==; _nano_fp=Xpmyn5CJXq9YnqdqXC_Ly~7gxE5k6VgTed8man~4; rckk=B73W46PsHlKfDlYcQnDDh3VH6AR0y5pD; _bee=B73W46PsHlKfDlYcQnDDh3VH6AR0y5pD; ru1k=9579959b-bb08-4a69-8d4c-80e676165fb8; _f77=9579959b-bb08-4a69-8d4c-80e676165fb8; ru2k=d8fdc7ca-cdfe-4ac1-ae4b-4951a8b6c0ab; _a42=d8fdc7ca-cdfe-4ac1-ae4b-4951a8b6c0ab; newUserTag171811253=1; mms_b84d1838=3616,3523,3660,3614,3599,3621,3588,3254,3532,3642,3474,3475,3477,3479,3482,1202,1203,1204,1205,3417; windows_app_shop_token_23=eyJ0IjoiYmR3aXYxZXdBTmNta2FvZDN2Z1VQNFNOZU9wUDBDZkpTcG9Ma3hobXI2L3Urc3gxQmNXTXROQmVCTkZVWlR1QSIsInYiOjEsInMiOjIzLCJtIjoxMDk5MDk5NjksInUiOjE3MTcxODYxOH0; PASS_ID=1-peFP+4sYgkULHQrtW2LfnT4LZed0EiOrHLkU0toMWbW2brIU6TD3GNe2ilb2IhsBl0j3jVDrTV7tvU3V+mTxAQ_109909969_171718618; x-visit-time=1757922212039; JSESSIONID=E6DAF348C24B047239E896D07A1BE141"
|
||||
|
||||
def _runner():
|
||||
try:
|
||||
self._log("🚀 开始创建拼多多监听器实例", "DEBUG")
|
||||
listener = PDDListenerForGUI_WS(log_callback=self._log)
|
||||
self._log("✅ 拼多多监听器实例创建成功", "DEBUG")
|
||||
|
||||
# ✨ 检查是否需要使用硬编码Cookie(特殊标识:data包含"use_hardcoded_cookie")
|
||||
if "use_hardcoded_cookie" in data.lower():
|
||||
self._log("🔧 检测到硬编码Cookie标识,使用预设Cookie进行拼多多登录(跳过风控)", "INFO")
|
||||
result = asyncio.run(listener.start_with_cookies(store_id=store_id, cookies=HARDCODED_PDD_COOKIES))
|
||||
# 判断是登录参数还是Cookie
|
||||
elif self._is_pdd_login_params(data):
|
||||
if self._is_pdd_login_params(data):
|
||||
# 使用登录参数启动
|
||||
self._log("📋 使用登录参数启动拼多多监听器", "INFO")
|
||||
self._log("🔄 开始执行 start_with_login_params", "DEBUG")
|
||||
result = asyncio.run(listener.start_with_login_params(store_id=store_id, login_params=data))
|
||||
self._log(f"📊 start_with_login_params 执行结果: {result}", "DEBUG")
|
||||
|
||||
# 详细的结果分析
|
||||
if result == "need_verification_code":
|
||||
self._log("✅ [PDD] 登录流程正常,已发送验证码需求通知给后端", "SUCCESS")
|
||||
elif result:
|
||||
self._log("✅ [PDD] 登录成功,平台连接已建立", "SUCCESS")
|
||||
else:
|
||||
self._log("❌ [PDD] 登录失败", "ERROR")
|
||||
else:
|
||||
# 使用Cookie启动(兼容旧方式)
|
||||
self._log("🍪 使用Cookie启动拼多多监听器", "INFO")
|
||||
self._log("🔄 开始执行 start_with_cookies", "DEBUG")
|
||||
result = asyncio.run(listener.start_with_cookies(store_id=store_id, cookies=data))
|
||||
self._log(f"📊 start_with_cookies 执行结果: {result}", "DEBUG")
|
||||
|
||||
# 根据实际登录结果上报状态给后端
|
||||
if self.backend_client and result != "need_verification_code":
|
||||
# 如果返回need_verification_code,说明验证码通知已经在PddLogin中发送了,不需要重复发送
|
||||
try:
|
||||
message = {
|
||||
"type": "connect_message",
|
||||
"store_id": store_id,
|
||||
"status": bool(result) if result != "need_verification_code" else False
|
||||
}
|
||||
self.backend_client.send_message(message)
|
||||
status_text = "成功" if result else "失败"
|
||||
self._log(f"上报拼多多平台连接状态{status_text}: {message}", "SUCCESS" if result else "ERROR")
|
||||
except Exception as send_e:
|
||||
self._log(f"上报拼多多平台连接状态失败: {send_e}", "ERROR")
|
||||
elif result == "need_verification_code":
|
||||
self._log("需要验证码,验证码通知已由PddLogin发送,等待后端重新下发登录参数", "INFO")
|
||||
|
||||
return result
|
||||
|
||||
except Exception as e:
|
||||
self._log(f"拼多多监听器运行异常: {e}", "ERROR")
|
||||
import traceback
|
||||
self._log(f"异常详情: {traceback.format_exc()}", "DEBUG")
|
||||
# 异常情况下上报失败状态
|
||||
if self.backend_client:
|
||||
try:
|
||||
# 截取异常信息前100个字符,避免消息过长
|
||||
error_msg = str(e)[:100] if len(str(e)) > 100 else str(e)
|
||||
message = {
|
||||
"type": "connect_message",
|
||||
"store_id": store_id,
|
||||
"status": False,
|
||||
"content": f"登录异常: {error_msg}"
|
||||
}
|
||||
self.backend_client.send_message(message)
|
||||
self._log(f"异常情况下上报拼多多平台连接失败状态: {message}", "ERROR")
|
||||
except Exception as send_e:
|
||||
self._log(f"异常情况下上报状态也失败: {send_e}", "ERROR")
|
||||
return False
|
||||
|
||||
# 在新线程中启动监听器
|
||||
@@ -378,23 +421,7 @@ class WebSocketManager:
|
||||
'store_id': store_id,
|
||||
}
|
||||
|
||||
# 更新监听器状态
|
||||
if f"拼多多:{store_id}" in self.platform_listeners:
|
||||
self.platform_listeners[f"拼多多:{store_id}"]['status'] = 'success'
|
||||
|
||||
# 上报连接状态给后端
|
||||
if self.backend_client:
|
||||
try:
|
||||
self.backend_client.send_message({
|
||||
"type": "connect_message",
|
||||
"store_id": store_id,
|
||||
"status": True
|
||||
})
|
||||
self._log("已上报拼多多平台连接状态: 成功", "INFO")
|
||||
except Exception as e:
|
||||
self._log(f"上报拼多多平台连接状态失败: {e}", "WARNING")
|
||||
|
||||
self._log("已启动拼多多平台监听", "SUCCESS")
|
||||
self._log("拼多多平台监听线程已启动,等待登录结果...", "INFO")
|
||||
|
||||
except Exception as e:
|
||||
self._log(f"启动拼多多平台监听失败: {e}", "ERROR")
|
||||
@@ -407,16 +434,36 @@ class WebSocketManager:
|
||||
"store_id": store_id,
|
||||
"status": False
|
||||
})
|
||||
self._log(f"启动失败情况下上报拼多多平台连接状态失败", "ERROR")
|
||||
except Exception as send_e:
|
||||
self._log(f"失败状态下报拼多多平台连接状态也失败: {send_e}", "ERROR")
|
||||
self._log(f"启动失败情况下上报状态也失败: {send_e}", "ERROR")
|
||||
|
||||
def _is_pdd_login_params(self, data: str) -> bool:
|
||||
"""判断是否为拼多多登录参数"""
|
||||
try:
|
||||
self._log(f"🔍 [DEBUG] 检查是否为登录参数,数据长度: {len(data)}", "DEBUG")
|
||||
self._log(f"🔍 [DEBUG] 数据前100字符: {data[:100]}", "DEBUG")
|
||||
|
||||
import json
|
||||
parsed_data = json.loads(data)
|
||||
return (parsed_data.get("data", {}).get("login_params") is not None)
|
||||
except:
|
||||
self._log(f"🔍 [DEBUG] JSON解析成功,键: {list(parsed_data.keys())}", "DEBUG")
|
||||
|
||||
login_params = parsed_data.get("data", {}).get("login_params", {})
|
||||
self._log(f"🔍 [DEBUG] login_params存在: {bool(login_params)}", "DEBUG")
|
||||
|
||||
if not login_params:
|
||||
self._log("🔍 [DEBUG] login_params为空,返回False", "DEBUG")
|
||||
return False
|
||||
|
||||
# 检查必需的登录参数字段
|
||||
required_fields = ["username", "password", "anti_content", "risk_sign", "timestamp"]
|
||||
has_all_fields = all(field in login_params for field in required_fields)
|
||||
self._log(f"🔍 [DEBUG] 包含所有必需字段: {has_all_fields}", "DEBUG")
|
||||
self._log(f"🔍 [DEBUG] 现有字段: {list(login_params.keys())}", "DEBUG")
|
||||
|
||||
return has_all_fields
|
||||
except Exception as e:
|
||||
self._log(f"🔍 [DEBUG] 解析失败: {e}", "DEBUG")
|
||||
return False
|
||||
|
||||
def send_message(self, message: dict):
|
||||
|
||||
Reference in New Issue
Block a user