From 8e3dc65cc6bacde8d64992d15fb552b3271ce806 Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 5 Nov 2026 23:06:57 +0800 Subject: [PATCH] =?UTF-8?q?fix(integrations):=20=E4=B8=8A=E6=B8=B8?= =?UTF-8?q?=E6=89=AB=E7=A0=81=E7=8A=B6=E6=80=81=E5=8F=AB=20wait=EF=BC=8C?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E8=AE=A4=E7=9A=84=E6=98=AF=20waiting?= =?UTF-8?q?=EF=BC=8C=E5=85=88=E5=AF=B9=E9=BD=90=E5=86=8D=E7=BF=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/services/wechat_ilink.py | 10 ++++++++++ backend/tests/test_wechat_bot.py | 11 +++++++++++ web/src/pages/Integrations.tsx | 1 + 3 files changed, 22 insertions(+) diff --git a/backend/app/services/wechat_ilink.py b/backend/app/services/wechat_ilink.py index a88ce25..fd19675 100644 --- a/backend/app/services/wechat_ilink.py +++ b/backend/app/services/wechat_ilink.py @@ -174,6 +174,16 @@ async def qrcode_status(qrcode_id: str) -> QrStatus: tolerate_ret1=True, ) status = str(data.get("status") or "waiting") + # 上游用的是 "wait"(不是 "waiting"),扫过之后还有 "scaned"/"confirmed"/"expired"; + # 这里统一成一套说法,页面只认 waiting/scaned/confirmed/expired。 + status = { + "wait": "waiting", + "waiting": "waiting", + "scaned": "scaned", + "scanned": "scaned", + "confirmed": "confirmed", + "expired": "expired", + }.get(status, status) if status != "confirmed": return QrStatus(status=status) token = _text(data, "bot_token") diff --git a/backend/tests/test_wechat_bot.py b/backend/tests/test_wechat_bot.py index b2cb93a..84abb7d 100644 --- a/backend/tests/test_wechat_bot.py +++ b/backend/tests/test_wechat_bot.py @@ -324,3 +324,14 @@ async def test_stale_token_marks_channel_expired( assert channels["items"][0]["status"] == "expired" assert channels["items"][0]["connected"] is False assert "重新扫码" in channels["items"][0]["last_error"] + + +async def test_upstream_wait_status_is_normalized(monkeypatch: pytest.MonkeyPatch) -> None: + """上游说 "wait",页面只认 waiting——这一层要对齐,否则界面停在"等扫码结果…"。""" + + async def fake_post(path: str, body: dict, **kwargs: Any) -> dict: # noqa: ARG001 + return {"status": "wait"} + + monkeypatch.setattr(wechat_ilink, "_post", fake_post) + result = await wechat_ilink.qrcode_status("qr-x") + assert result.status == "waiting" diff --git a/web/src/pages/Integrations.tsx b/web/src/pages/Integrations.tsx index 3aff36b..4f70fc6 100644 --- a/web/src/pages/Integrations.tsx +++ b/web/src/pages/Integrations.tsx @@ -30,6 +30,7 @@ const ACTION_TEXT: Record = { /** 扫码的几种回话,说给用户听的话。 */ const QR_TEXT: Record = { waiting: "用微信扫这张码,扫完在手机上点确认。", + wait: "用微信扫这张码,扫完在手机上点确认。", scaned: "已经扫到了,在手机上点一下「确认登录」。", confirmed: "配好了,现在可以直接在微信里发消息。", expired: "二维码过期了,重新拿一张。",