This commit is contained in:
ddrwode
2026-02-27 15:42:24 +08:00
parent f418f52117
commit dbf8562a00

View File

@@ -348,12 +348,59 @@ def _code_indicates_success(value: Any) -> Optional[bool]:
return False
def _to_int_or_none(value: Any) -> Optional[int]:
try:
if value is None:
return None
if isinstance(value, bool):
return int(value)
if isinstance(value, (int, float)):
return int(value)
text = str(value).strip()
if not text:
return None
if text.lstrip("-").isdigit():
return int(text)
return None
except Exception:
return None
def _extract_interface_message(data: dict) -> str:
for key in ("msg", "message", "error", "errorMsg", "detail", "retMsg"):
value = data.get(key)
if isinstance(value, str) and value.strip():
return value.strip()
return ""
def _is_sms_already_sent_response(data: dict, message: str) -> bool:
code_keys = ("code", "retCode", "resultCode", "statusCode", "errno")
code_val = None
for key in code_keys:
if key in data:
code_val = _to_int_or_none(data.get(key))
if code_val is not None:
break
if code_val != 1001:
return False
text = (message or "").strip()
if not text:
return False
# 这类文案通常表示验证码已下发或短信频控,不应判定为滑块失败。
hints = ("验证码已发送", "短信验证码已发送", "请稍后重试", "请稍等")
return any(h in text for h in hints)
def _assert_interface_success(body: Any) -> None:
data = _coerce_json_body(body)
if not isinstance(data, dict):
return
fail_reasons: list[str] = []
message = _extract_interface_message(data)
is_soft_success = _is_sms_already_sent_response(data, message)
for key in ("success", "ok"):
if key in data and not bool(data[key]):
@@ -364,19 +411,16 @@ def _assert_interface_success(body: Any) -> None:
continue
code_ok = _code_indicates_success(data[key])
if code_ok is False:
if is_soft_success:
continue
fail_reasons.append(f"{key}={data[key]}")
message = ""
for key in ("msg", "message", "error", "errorMsg", "detail", "retMsg"):
value = data.get(key)
if isinstance(value, str) and value.strip():
message = value.strip()
break
if message:
lowered = message.lower()
fail_words = ("失败", "错误", "无效", "fail", "error", "invalid", "请重新", "未通过")
if any(word in lowered for word in fail_words):
if is_soft_success:
return
fail_reasons.append(f"msg={message}")
if fail_reasons: