fix(weixin): 扫码登录二维码真实可扫——前端生成QR(修坏图) + DecodeConfig容忍空config
CI / Backend (build / vet / test / cross-compile) (push) Has been cancelled
CI / Frontend (tsc + vite build) (push) Has been cancelled

weixin qrcode_img_content 是微信liteapp HTML页(非图片),后端fetch转base64只得<!doctype>→前端img坏图。
- 后端 login-qr 改返回 qrUrl(qrcode_img_content URL)+qrCode(原始qrcode),去掉坏 qrImage
- 前端用 qrcode 库从 qrUrl 生成真实二维码图片(微信扫https链接即开连接页), 新增 qrcode+@types/qrcode(纯UI依赖)
- DecodeConfig: nil config map 当空map解码(不报错), 否则 pending账号(空config)构建被跳过→未注册→登录端点404
- 测试更新(DecodeConfigNil/admin QR端点断言 qrUrl+qrCode)
- 另有 weixinAccountFor 裸weixin兜底(此前提交 d3b0921) 保证 accountId 命中
- 实测: login-qr 200{waiting, qrUrl=89}, 前端能看到可扫二维码
build/vet/test 全绿, 已部署.
This commit is contained in:
Aska committed 2026-09-07 21:32:19 +08:00
1 parent d3b0921491
commit 36bd19e997
8 files changed
+394 -29

No files matched your search

@@ -38,9 +38,12 @@ type weixinLoginAdmin interface {
}
// weixinLoginQRResponse is the wire shape of GET /admin/channels/{platform}/login-qr.
// qrUrl is the WeChat QR image URL (qrcode_img_content) and qrCode is the raw scan
// identifier (qrcode); the frontend renders a scannable QR from qrUrl, since the
// liteapp URL is an HTML page that cannot be fetched as an image.
type weixinLoginQRResponse struct {
QrUrl string `json:"qrUrl,omitempty"`
QrImage string `json:"qrImage,omitempty"`
QrCode string `json:"qrCode,omitempty"`
Status string `json:"status"`
}
@@ -77,9 +80,9 @@ func (s *Server) adminWeixinLoginQR(w http.ResponseWriter, r *http.Request) {
status, _ := wx.LoginStatus(r.Context())
s.auditClaims(r, "channel.weixin.login.qr", "ok")
writeJSON(w, http.StatusOK, weixinLoginQRResponse{
QrUrl: qr.Image,
QrImage: qrImageDataURL(r.Context(), qr.Image),
Status: status,
QrUrl: qr.Image,
QrCode: qr.Qrcode,
Status: status,
})
}