import { goLogin } from './auth-nav'; import { isLoggedIn } from './api'; import { ensureWechatAuthForPay } from './wechat-auth'; import { fetchClientConfig, fetchUserProfile, needsWechatAuthForPay } from './pay-wechat'; /** * 支付前门禁: * - 未登录 → 跳转登录页(微信授权即可,不强制手机号) * - H5 微信内缺 openId → 尝试 OAuth(可能跳转微信授权页) * - 小程序缺绑定 → 跳转登录页 needWechat */ export async function ensurePayReady(returnPath: string): Promise { if (!isLoggedIn()) { goLogin(returnPath); return false; } try { const [config, profile] = await Promise.all([fetchClientConfig(), fetchUserProfile()]); if (!needsWechatAuthForPay(config, profile)) { return true; } if (process.env.TARO_ENV === 'h5') { const auth = await ensureWechatAuthForPay(); if (auth.ok) return true; // 旧版 needBindPhone 已不再返回;缺 openId 时走登录补微信绑定 if ('needBindPhone' in auth && auth.needBindPhone) { goLogin(returnPath, { needWechat: '1' }); return false; } // redirecting:正在跳转微信 OAuth return false; } goLogin(returnPath, { needWechat: '1' }); return false; } catch { goLogin(returnPath); return false; } }