修复泥点余额明细刷新
钱包明细每次展开并在实时余额变化时读取最新拆分。 图片画板生成扣费或退款后同步刷新总额与充值中心。 充值中心读取增加 latest-wins 门禁并阻止旧响应覆盖权威结果。 补充钱包刷新、画板入口和充值乱序回归测试。 同步更新泥点统一资产入口决策记录。
This commit is contained in:
@@ -385,6 +385,7 @@ export function usePlatformProfileCenterController({
|
||||
useCopyFeedback();
|
||||
const pendingWechatRechargeOrderIdRef = useRef<string | null>(null);
|
||||
const confirmingWechatRechargeOrderIdRef = useRef<string | null>(null);
|
||||
const rechargeCenterReadRevisionRef = useRef(0);
|
||||
|
||||
// 中文注释:支持带邀请码 query 的直达场景,登录成功后自动打开兑换面板并复用同一套输入状态。
|
||||
useEffect(() => {
|
||||
@@ -426,18 +427,40 @@ export function usePlatformProfileCenterController({
|
||||
loadWalletLedger();
|
||||
}, [loadWalletLedger]);
|
||||
|
||||
const applyRechargeCenter = useCallback(
|
||||
(center: ProfileRechargeCenterResponse) => {
|
||||
rechargeCenterReadRevisionRef.current += 1;
|
||||
setIsLoadingRechargeCenter(false);
|
||||
setRechargeError(null);
|
||||
setRechargeCenter(center);
|
||||
},
|
||||
[],
|
||||
);
|
||||
|
||||
const loadRechargeCenter = useCallback(() => {
|
||||
const revision = ++rechargeCenterReadRevisionRef.current;
|
||||
setRechargeError(null);
|
||||
setIsLoadingRechargeCenter(true);
|
||||
void getRpgProfileRechargeCenter()
|
||||
.then(setRechargeCenter)
|
||||
.then((center) => {
|
||||
if (revision === rechargeCenterReadRevisionRef.current) {
|
||||
setRechargeCenter(center);
|
||||
}
|
||||
})
|
||||
.catch((error: unknown) => {
|
||||
if (revision !== rechargeCenterReadRevisionRef.current) {
|
||||
return;
|
||||
}
|
||||
setRechargeCenter(null);
|
||||
setRechargeError(
|
||||
error instanceof Error ? error.message : '读取泥点购买信息失败',
|
||||
);
|
||||
})
|
||||
.finally(() => setIsLoadingRechargeCenter(false));
|
||||
.finally(() => {
|
||||
if (revision === rechargeCenterReadRevisionRef.current) {
|
||||
setIsLoadingRechargeCenter(false);
|
||||
}
|
||||
});
|
||||
}, []);
|
||||
|
||||
const refreshRechargeState = useCallback(() => {
|
||||
@@ -482,7 +505,7 @@ export function usePlatformProfileCenterController({
|
||||
.then((response) => {
|
||||
const result = buildRechargePaymentResultForOrder(response.order);
|
||||
const isPaid = result.kind === 'success';
|
||||
setRechargeCenter(response.center);
|
||||
applyRechargeCenter(response.center);
|
||||
pendingWechatRechargeOrderIdRef.current = null;
|
||||
confirmingWechatRechargeOrderIdRef.current = null;
|
||||
setWechatRechargeOrderConfirmationState(null);
|
||||
@@ -525,7 +548,7 @@ export function usePlatformProfileCenterController({
|
||||
|
||||
clearWechatPayResultHash();
|
||||
return true;
|
||||
}, [onRechargeSuccess, refreshRechargeState]);
|
||||
}, [applyRechargeCenter, onRechargeSuccess, refreshRechargeState]);
|
||||
|
||||
const pollWechatPayResultFromHash = useCallback(
|
||||
() => handleWechatPayResult(),
|
||||
@@ -549,7 +572,7 @@ export function usePlatformProfileCenterController({
|
||||
.then((response) => {
|
||||
const result = buildRechargePaymentResultForOrder(response.order);
|
||||
const isPaid = result.kind === 'success';
|
||||
setRechargeCenter(response.center);
|
||||
applyRechargeCenter(response.center);
|
||||
pendingWechatRechargeOrderIdRef.current = null;
|
||||
confirmingWechatRechargeOrderIdRef.current = null;
|
||||
setWechatRechargeOrderConfirmationState(null);
|
||||
@@ -569,7 +592,7 @@ export function usePlatformProfileCenterController({
|
||||
});
|
||||
});
|
||||
return true;
|
||||
}, [nativeWechatPayment, onRechargeSuccess]);
|
||||
}, [applyRechargeCenter, nativeWechatPayment, onRechargeSuccess]);
|
||||
|
||||
const openRechargeModal = useCallback(() => {
|
||||
if (!currentUser) {
|
||||
@@ -625,7 +648,7 @@ export function usePlatformProfileCenterController({
|
||||
.then(async (response) => {
|
||||
if (paymentChannel === WECHAT_MINI_PROGRAM_VIRTUAL_PAYMENT_CHANNEL) {
|
||||
pendingWechatRechargeOrderIdRef.current = response.order.orderId;
|
||||
setRechargeCenter(response.center);
|
||||
applyRechargeCenter(response.center);
|
||||
const paymentHandled = await requestHostPayment({
|
||||
payload: response.wechatMiniProgramPayParams,
|
||||
orderId: response.order.orderId,
|
||||
@@ -637,7 +660,7 @@ export function usePlatformProfileCenterController({
|
||||
}
|
||||
if (paymentChannel === WECHAT_JSAPI_PAYMENT_CHANNEL) {
|
||||
pendingWechatRechargeOrderIdRef.current = response.order.orderId;
|
||||
setRechargeCenter(response.center);
|
||||
applyRechargeCenter(response.center);
|
||||
setRechargePaymentResult({
|
||||
kind: 'pending',
|
||||
title: '正在打开微信支付',
|
||||
@@ -657,7 +680,7 @@ export function usePlatformProfileCenterController({
|
||||
confirmResponse.order,
|
||||
);
|
||||
const isPaid = result.kind === 'success';
|
||||
setRechargeCenter(confirmResponse.center);
|
||||
applyRechargeCenter(confirmResponse.center);
|
||||
setRechargePaymentResult(result);
|
||||
if (result.kind !== 'pending') {
|
||||
pendingWechatRechargeOrderIdRef.current = null;
|
||||
@@ -681,7 +704,7 @@ export function usePlatformProfileCenterController({
|
||||
throw new Error('微信 H5 支付链接生成失败');
|
||||
}
|
||||
pendingWechatRechargeOrderIdRef.current = response.order.orderId;
|
||||
setRechargeCenter(response.center);
|
||||
applyRechargeCenter(response.center);
|
||||
setRechargePaymentResult({
|
||||
kind: 'pending',
|
||||
title: '正在打开微信支付',
|
||||
@@ -698,7 +721,7 @@ export function usePlatformProfileCenterController({
|
||||
throw new Error('微信 Native 支付链接生成失败');
|
||||
}
|
||||
pendingWechatRechargeOrderIdRef.current = response.order.orderId;
|
||||
setRechargeCenter(response.center);
|
||||
applyRechargeCenter(response.center);
|
||||
setNativeWechatPayment({
|
||||
...wechatNativePayment,
|
||||
codeUrl,
|
||||
@@ -764,7 +787,7 @@ export function usePlatformProfileCenterController({
|
||||
setSubmittingRechargeProductId(null);
|
||||
});
|
||||
},
|
||||
[onRechargeSuccess, submittingRechargeProductId],
|
||||
[applyRechargeCenter, onRechargeSuccess, submittingRechargeProductId],
|
||||
);
|
||||
|
||||
const confirmNativeWechatPayment = useCallback(() => {
|
||||
@@ -787,7 +810,7 @@ export function usePlatformProfileCenterController({
|
||||
}
|
||||
const result = buildRechargePaymentResultForOrder(response.order);
|
||||
const isPaid = result.kind === 'success';
|
||||
setRechargeCenter(response.center);
|
||||
applyRechargeCenter(response.center);
|
||||
if (result.kind !== 'pending') {
|
||||
setNativeWechatPayment(null);
|
||||
pendingWechatRechargeOrderIdRef.current = null;
|
||||
@@ -819,7 +842,7 @@ export function usePlatformProfileCenterController({
|
||||
);
|
||||
})
|
||||
.finally(() => setSubmittingRechargeProductId(null));
|
||||
}, [nativeWechatPayment, onRechargeSuccess]);
|
||||
}, [applyRechargeCenter, nativeWechatPayment, onRechargeSuccess]);
|
||||
|
||||
useEffect(() => {
|
||||
const orderId = nativeWechatPayment?.orderId;
|
||||
@@ -845,7 +868,7 @@ export function usePlatformProfileCenterController({
|
||||
}
|
||||
|
||||
const result = buildRechargePaymentResultForOrder(response.order);
|
||||
setRechargeCenter(response.center);
|
||||
applyRechargeCenter(response.center);
|
||||
if (result.kind === 'pending') {
|
||||
await waitWechatPayConfirmDelay(WECHAT_NATIVE_WATCH_RETRY_DELAY_MS);
|
||||
continue;
|
||||
@@ -882,6 +905,7 @@ export function usePlatformProfileCenterController({
|
||||
}, [
|
||||
nativeWechatPayment?.expiresAt,
|
||||
nativeWechatPayment?.orderId,
|
||||
applyRechargeCenter,
|
||||
onRechargeSuccess,
|
||||
]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user