feat(auth): WeixinGzh QR/code login REST + server push endpoint

Add subscribe-mode static QR + keyword code login, service-mode scene QR
polling, server URL verification, and modal-auth form/poll wiring.
This commit is contained in:
kate522 committed 2026-07-18 23:54:04 +08:00
1 parent 72c0d10172
commit ac3b765a83
3 files changed
+591 -6

No files matched your search

+48 -6
View File
@@ -419,6 +419,37 @@
// ── QR Code Login (§10.7) ──
function bindWeixingzhCodeForm(container) {
if (!container) return;
var form = container.querySelector('[data-aksrt-weixingzh-code]');
if (!form || form._bound) return;
form._bound = true;
form.addEventListener('submit', function (e) {
e.preventDefault();
var input = form.querySelector('[name="code"]');
var code = input ? String(input.value || '').trim() : '';
if (!code) return;
var btn = form.querySelector('button[type="submit"]');
if (btn) btn.disabled = true;
request('/auth/weixingzh-code', { code: code })
.then(function (result) {
var data = (result && result.data) || result || {};
if ((result && result.ok) || (result && result.success) || data.logged_in) {
onAuthSuccess(data.data || data);
return;
}
throw new Error((result && (result.message || result.msg)) || '验证码错误');
})
.catch(function (err) {
alert(err.message || '登录失败');
})
.finally(function () {
if (btn) btn.disabled = false;
});
});
}
function initQrLogin() {
var qrPanel = modal.querySelector('[data-panel="qrcode"]');
if (!qrPanel) return;
@@ -442,9 +473,16 @@
request('/auth/qrcode-login', {})
.then(function (result) {
if (result.ok && result.data && result.data.qr_html) {
container.innerHTML = result.data.qr_html;
startQrPolling(result.data.check_url || '/auth/check-qrcode-login', result.data.token || '');
var payload = (result && result.data) || result || {};
var qrHtml = payload.qr_html || (payload.data && payload.data.qr_html) || '';
var checkUrl = payload.check_url || (payload.data && payload.data.check_url) || '/auth/check-qrcode-login';
var token = payload.token || (payload.data && payload.data.token) || '';
if (qrHtml) {
container.innerHTML = qrHtml;
bindWeixingzhCodeForm(container);
if (checkUrl && token) {
startQrPolling(checkUrl, token);
}
} else {
container.innerHTML = '<p class="aksrt-modal-auth__qr-error">扫码登录暂不可用</p>';
}
@@ -459,9 +497,13 @@
qrLoginTimer = setInterval(function () {
request(checkUrl, { token: token })
.then(function (result) {
if (result.ok && result.data && result.data.logged_in) {
stopQrPolling();
onAuthSuccess(result.data);
var data = (result && result.data) || result || {};
var body = data.data || data;
if ((result && result.ok) || data.success || body.logged_in) {
if (body.logged_in || (data.data && data.data.logged_in)) {
stopQrPolling();
onAuthSuccess(body.data || body);
}
}
})
.catch(function () { /* keep polling */ });