fix(weixin): 二维码改用 qrcode 原始标识串生成——qrUrl(liteapp页面)编码不能被微信识别
CI / Backend (build / vet / test / cross-compile) (push) Has been cancelled
CI / Frontend (tsc + vite build) (push) Has been cancelled

把 qrUrl(liteapp HTML页面URL)编码成二维码,微信扫它当普通链接打开→页面不认→'过期'。
改用 qrcode 原始标识串生成二维码(get_qrcode_status 轮询的 key, 微信扫码后解析), 并保留
qrUrl 作为'在微信/浏览器打开扫码页'的备用链接。build/部署。
This commit is contained in:
Aska committed 2026-09-07 21:51:30 +08:00
1 parent a9dfae4d5f
commit b6b258498c
1 file changed
+16 -3
@@ -41,6 +41,7 @@ export function WeixinLogin({
}): React.ReactNode { }): React.ReactNode {
const log = useAuditStore((s) => s.log); const log = useAuditStore((s) => s.log);
const [status, setStatus] = useState<string>("idle"); const [status, setStatus] = useState<string>("idle");
const [qrCode, setQrCode] = useState<string>("");
const [qrUrl, setQrUrl] = useState<string>(""); const [qrUrl, setQrUrl] = useState<string>("");
const [botId, setBotId] = useState<string>(""); const [botId, setBotId] = useState<string>("");
const [busy, setBusy] = useState<string | null>(null); const [busy, setBusy] = useState<string | null>(null);
@@ -86,10 +87,12 @@ export function WeixinLogin({
const start = () => { const start = () => {
setBusy("__qr__"); setBusy("__qr__");
setNotice(null); setNotice(null);
setQrCode("");
setQrUrl(""); setQrUrl("");
adminWeixinLoginQR(platform, accountId) adminWeixinLoginQR(platform, accountId)
.then((r) => { .then((r) => {
log("channel.weixin.login.qr", "ok"); log("channel.weixin.login.qr", "ok");
setQrCode(r.qrCode ?? "");
setQrUrl(r.qrUrl ?? ""); setQrUrl(r.qrUrl ?? "");
if (r.status === "confirmed") { if (r.status === "confirmed") {
setStatus("confirmed"); setStatus("confirmed");
@@ -117,7 +120,7 @@ export function WeixinLogin({
.finally(() => setBusy(null)); .finally(() => setBusy(null));
}; };
const showQR = status === "waiting" || qrUrl !== ""; const showQR = status === "waiting" || qrCode !== "";
return ( return (
<Surface gap="sm" className="space-y-3"> <Surface gap="sm" className="space-y-3">
@@ -144,11 +147,21 @@ export function WeixinLogin({
{showQR ? ( {showQR ? (
<div className="space-y-2"> <div className="space-y-2">
{qrUrl ? ( {qrCode ? (
<QrImage value={qrUrl} /> <QrImage value={qrCode} />
) : ( ) : (
<Notice tone="warn">二维码暂不可用,请点击「刷新二维码」重试。</Notice> <Notice tone="warn">二维码暂不可用,请点击「刷新二维码」重试。</Notice>
)} )}
{qrUrl ? (
<a
href={qrUrl}
target="_blank"
rel="noreferrer"
className="text-xs text-[var(--mu-accent-hi)] underline"
>
若上方码不识别,点此在微信/浏览器打开扫码页
</a>
) : null}
<p className="text-xs text-[var(--mu-text-lo)]">请用微信扫描上方二维码,确认后自动连接(最多等待约 8 分钟)。</p> <p className="text-xs text-[var(--mu-text-lo)]">请用微信扫描上方二维码,确认后自动连接(最多等待约 8 分钟)。</p>
</div> </div>
) : null} ) : null}