diff --git a/assets/js/routes/user-center-auth.js b/assets/js/routes/user-center-auth.js index b852b939..4c343354 100644 --- a/assets/js/routes/user-center-auth.js +++ b/assets/js/routes/user-center-auth.js @@ -27,6 +27,33 @@ }); } + function loadScript(src) { + return new Promise(function (resolve, reject) { + var existing = document.querySelector('script[src="' + src + '"]'); + if (existing) { + if (existing.dataset.loaded === '1') return resolve(); + existing.addEventListener('load', resolve, { once: true }); + existing.addEventListener('error', reject, { once: true }); + return; + } + var script = document.createElement('script'); + script.src = src; + script.async = true; + script.onload = function () { script.dataset.loaded = '1'; resolve(); }; + script.onerror = reject; + document.head.appendChild(script); + }); + } + + function aliyunMetaInfo(config) { + if (config.provider !== 'aliyun') return Promise.resolve(''); + return loadScript('https://o.alicdn.com/yd-cloudauth/cloudauth-cdn/jsvm_all.js').then(function () { + if (typeof window.getMetaInfo !== 'function') throw new Error('阿里云 MetaInfo 组件未加载成功'); + var meta = window.getMetaInfo(); + return typeof meta === 'string' ? meta : JSON.stringify(meta || {}); + }); + } + function init(root) { if (!root || root.dataset.identityBound === '1') return; root.dataset.identityBound = '1'; @@ -107,10 +134,13 @@ payload.client_request_id = uuid(); var button = createForm.querySelector('[type="submit"]'); if (button) button.disabled = true; - request(config.restBase, config, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(payload) + aliyunMetaInfo(config).then(function (metaInfo) { + if (metaInfo) payload.meta_info = metaInfo; + return request(config.restBase, config, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(payload) + }); }).then(render).catch(function (error) { var node = createForm.querySelector('[data-auth-message]'); if (node) node.textContent = error.message; diff --git a/inc/helpers/user-center-renderers/profile-auth.php b/inc/helpers/user-center-renderers/profile-auth.php index 3b01d65c..6bc7cdf7 100644 --- a/inc/helpers/user-center-renderers/profile-auth.php +++ b/inc/helpers/user-center-renderers/profile-auth.php @@ -25,6 +25,7 @@ $config = [ 'nonce' => wp_create_nonce('wp_rest'), 'currentUuid' => $locks_application ? (string) ($record['application_uuid'] ?? '') : '', 'currentStage' => $locks_application ? $stage : '', + 'provider' => sanitize_key((string) ($settings['provider'] ?? 'aliyun')), 'allowManual' => !empty($settings['allow_manual_fallback']), ]; ?> diff --git a/src/AKSRT/Identity/Provider/AliyunProvider.php b/src/AKSRT/Identity/Provider/AliyunProvider.php index b8b17ec9..c74c0aa2 100644 --- a/src/AKSRT/Identity/Provider/AliyunProvider.php +++ b/src/AKSRT/Identity/Provider/AliyunProvider.php @@ -138,6 +138,10 @@ final class AliyunProvider implements ProviderInterface { 'CertName' => (string) ($request['person_name'] ?? ''), 'CertNo' => preg_replace('/\s+/', '', (string) ($request['id_number'] ?? '')), ]; + $meta_info = trim((string) ($request['meta_info'] ?? '')); + if ($meta_info !== '') { + $params['MetaInfo'] = $meta_info; + } $return_url = esc_url_raw((string) ($request['return_url'] ?? '')); if ($this->is_public_https_url($return_url)) { $params['ReturnUrl'] = $return_url;