This commit is contained in:
eric
2026-03-31 14:00:06 -05:00
parent fbde8dbcea
commit f25d9141b3

View File

@@ -57,6 +57,13 @@ function clearAnonymousUserCookie(): void {
clearCookie(ANONYMOUS_USER_COOKIE); clearCookie(ANONYMOUS_USER_COOKIE);
} }
function getWechatUserIdFromStorage(): string {
return (
(getStorage("wechatUserId") || "").trim() ||
(getStorage("userid") || "").trim()
);
}
function setPayOrderCookie(orderId: string): void { function setPayOrderCookie(orderId: string): void {
if (typeof document === "undefined") return; if (typeof document === "undefined") return;
const normalizedOrderId = orderId.trim(); const normalizedOrderId = orderId.trim();
@@ -194,6 +201,14 @@ export default function HomeClient() {
setUserName(name); setUserName(name);
}, []); }, []);
const resolveVipLookupUserId = useCallback((fallback?: string | null): string => {
// 业务优先级:email > 真实userid > user_id
// check-by-user 仅接收 user_id 字段,因此这里至少保证 userid > user_id
const wechatUserId = getWechatUserIdFromStorage();
if (wechatUserId) return wechatUserId;
return (fallback || "").trim();
}, []);
const recoverAnonymousUserId = useCallback( const recoverAnonymousUserId = useCallback(
async (params: { userId?: string; email?: string; wechatUserId?: string }) => { async (params: { userId?: string; email?: string; wechatUserId?: string }) => {
const payload: Record<string, string> = {}; const payload: Record<string, string> = {};
@@ -745,8 +760,7 @@ export default function HomeClient() {
// 校验逻辑:有本地存储(登录资料+VIP)时优先使用并校验;无身份/VIP 时点击按钮直接进入支付,不校验 // 校验逻辑:有本地存储(登录资料+VIP)时优先使用并校验;无身份/VIP 时点击按钮直接进入支付,不校验
const wechatUserId = const wechatUserId =
(getStorage("wechatUserId") || "").trim() || getWechatUserIdFromStorage();
(getStorage("userid") || "").trim();
let anonymousCandidate = getStoredAnonymousUserId(); let anonymousCandidate = getStoredAnonymousUserId();
// 参数 userid 是真实微信用户标识时,应优先用它校验 VIP,避免被历史/新生成 userId 干扰 // 参数 userid 是真实微信用户标识时,应优先用它校验 VIP,避免被历史/新生成 userId 干扰
if (wechatUserId) { if (wechatUserId) {
@@ -886,7 +900,9 @@ export default function HomeClient() {
// 仅当有本地存储的 userId 时才校验(无身份/VIP 时跳过,点击按钮直接进入支付流程) // 仅当有本地存储的 userId 时才校验(无身份/VIP 时跳过,点击按钮直接进入支付流程)
if (hadStoredUserId) { if (hadStoredUserId) {
const userIdForCheck = getStoredAnonymousUserId() || getStorage("userId"); const userIdForCheck = resolveVipLookupUserId(
getStoredAnonymousUserId() || getStorage("userId")
);
if (userIdForCheck) { if (userIdForCheck) {
const found = await checkPaymentFromPB(userIdForCheck); const found = await checkPaymentFromPB(userIdForCheck);
if (found) { if (found) {
@@ -903,6 +919,7 @@ export default function HomeClient() {
getOrCreateUserId, getOrCreateUserId,
getStoredAnonymousUserId, getStoredAnonymousUserId,
checkPaymentFromPB, checkPaymentFromPB,
resolveVipLookupUserId,
recoverAnonymousUserId, recoverAnonymousUserId,
savePaidType, savePaidType,
saveUserName, saveUserName,