fix:优化安装源

This commit is contained in:
丹尼尔
2026-03-11 11:04:16 +08:00
parent 846c65b155
commit 4a658a7331
3 changed files with 201 additions and 7 deletions

View File

@@ -301,14 +301,16 @@ async def get_login_qrcode(body: QrCodeRequest):
body_text,
)
data = resp.json()
# 第一步:记录完整返回并保存 Data62供第二步滑块自动填充参数
# 保存 Data62顶层 "Data62"),以 d000 标识移除尾部乱码
try:
data62 = data.get("Data62") or (data.get("Data") or {}).get("data62") or ""
data62 = (data.get("Data62") or "").strip()
if not data62 and isinstance(data.get("Data"), dict):
data62 = (data.get("Data").get("Data62") or data.get("Data").get("data62") or "").strip()
data62 = _clean_data62(data62)
qrcode_store[key] = {"data62": data62, "response": data}
# 在返回中拼接已存储标记,便于后续步骤使用同一 key 取 data62
data["_data62_stored"] = True
data["_data62_length"] = len(data62)
logger.info("Stored Data62 for key=%s (len=%s)", key, len(data62))
logger.info("Stored Data62 for key=%s (len=%s) from GetLoginQrCodeNewDirect top-level", key, len(data62))
except Exception as e:
logger.warning("Store qrcode data for key=%s failed: %s", key, e)
return data
@@ -364,6 +366,23 @@ def _extract_clean_ticket(obj: dict) -> Optional[str]:
return "".join(clean) if clean else None
def _clean_data62(s: str) -> str:
"""去掉 Data62 尾部乱码:以 d000 标识乱码起始,截断保留此前有效内容。"""
if not s or not isinstance(s, str):
return ""
s = s.strip()
idx = s.find("d0000000000000101000000000000000d0000000000000000000000000000007f")
if idx != -1:
return s[:idx].strip()
idx = s.find("d0000000000000101")
if idx != -1:
return s[:idx].strip()
idx = s.find("d00000000")
if idx != -1:
return s[:idx].strip()
return s
@app.get("/auth/scan-status")
async def check_scan_status(
key: str = Query(..., description="账号唯一标识"),
@@ -389,9 +408,11 @@ async def check_scan_status(
data = resp.json()
ticket = _extract_clean_ticket(data)
if ticket:
# 不调用滑块服务;返回自带预填表单的页面 pathiframe 加载后自动填充 Key/Data62/Original Ticket用户点「开始验证」提交到第三方 7765
# data62 必须来自 GetLoginQrCodeNewDirect 返回的顶层 "Data62",不能使用 CheckLoginStatus 里的 data62常为空并去掉尾部乱码
stored = qrcode_store.get(key) or {}
data62 = stored.get("data62") or ""
data62 = _clean_data62(stored.get("data62") or "")
if not data62:
data62 = _clean_data62(data.get("Data62") or (data.get("Data") or {}).get("Data62") or (data.get("Data") or {}).get("data62") or "")
params = {"key": SLIDER_VERIFY_KEY, "ticket": ticket}
if data62:
params["data62"] = data62
@@ -453,9 +474,65 @@ async def slider_form(
ticket: str = Query(..., description="Original Ticket"),
):
"""返回带 Key/Data62/Original Ticket 预填的表单页,提交到第三方 7765供 iframe 加载并自动填充。"""
data62 = _clean_data62(data62)
return HTMLResponse(content=_slider_form_html(key, data62, ticket))
# ---------- 滑块验证提交接口(代理 7765 ----------
# 7765 页面提交为 GETaction=SLIDER_VERIFY_BASE_URL参数 key、data62、original_ticket
@app.get("/api/slider-verify")
async def api_slider_verify_get(
key: str = Query(..., description="Key"),
data62: str = Query("", description="Data62"),
original_ticket: str = Query(..., description="Original Ticket与 ticket 二选一)"),
ticket: str = Query("", description="Original Ticket与 original_ticket 二选一)"),
):
"""代理 7765 滑块提交GET 转发到 http://113.44.162.180:7765/?key=&data62=&original_ticket=,返回上游响应。"""
ticket_val = original_ticket or ticket
if not ticket_val:
raise HTTPException(status_code=400, detail="original_ticket or ticket required")
url = SLIDER_VERIFY_BASE_URL.rstrip("/") + "/"
params = {"key": key, "data62": _clean_data62(data62), "original_ticket": ticket_val}
try:
async with httpx.AsyncClient(timeout=30.0) as client:
resp = await client.get(url, params=params)
# 返回上游的 body若为 JSON 则解析后返回
try:
return resp.json()
except Exception:
return {"ok": resp.status_code == 200, "status_code": resp.status_code, "text": resp.text[:500]}
except Exception as e:
logger.warning("Slider verify upstream error: %s", e)
raise HTTPException(status_code=502, detail=f"slider_upstream_error: {e}") from e
class SliderVerifyBody(BaseModel):
key: str
data62: Optional[str] = ""
original_ticket: Optional[str] = None
ticket: Optional[str] = None
@app.post("/api/slider-verify")
async def api_slider_verify_post(body: SliderVerifyBody):
"""代理 7765 滑块提交POST body 转成 GET 请求转发到 7765返回上游响应。"""
ticket_val = body.original_ticket or body.ticket
if not ticket_val:
raise HTTPException(status_code=400, detail="original_ticket or ticket required")
url = SLIDER_VERIFY_BASE_URL.rstrip("/") + "/"
params = {"key": body.key, "data62": _clean_data62(body.data62 or ""), "original_ticket": ticket_val}
try:
async with httpx.AsyncClient(timeout=30.0) as client:
resp = await client.get(url, params=params)
try:
return resp.json()
except Exception:
return {"ok": resp.status_code == 200, "status_code": resp.status_code, "text": resp.text[:500]}
except Exception as e:
logger.warning("Slider verify upstream error: %s", e)
raise HTTPException(status_code=502, detail=f"slider_upstream_error: {e}") from e
# ---------- R1-2 客户画像 / R1-3 定时问候 / R1-4 分群推送 / 消息与发送 ----------
class CustomerCreate(BaseModel):