fix payment visible methods and resume recovery

This commit is contained in:
IanShaw027
2026-04-21 00:14:05 +08:00
parent 5d58c7c6fb
commit 16be82b959
6 changed files with 201 additions and 19 deletions

View File

@@ -142,10 +142,11 @@ onMounted(async () => {
const resumeToken = typeof route.query.resume_token === 'string'
? route.query.resume_token
: ''
let orderId = Number(route.query.order_id) || 0
const routeOrderId = Number(route.query.order_id) || 0
const outTradeNo = String(route.query.out_trade_no || '')
let orderId = 0
if (!orderId && resumeToken && typeof window !== 'undefined') {
if (resumeToken && typeof window !== 'undefined') {
const restored = readPaymentRecoverySnapshot(
window.localStorage.getItem(PAYMENT_RECOVERY_STORAGE_KEY),
{ resumeToken },
@@ -155,17 +156,31 @@ onMounted(async () => {
}
}
if (!order.value && !orderId && resumeToken) {
if (!order.value && resumeToken && orderId) {
try {
const result = await paymentAPI.resolveOrderPublicByResumeToken(resumeToken)
order.value = result.data
orderId = result.data.id
order.value = await paymentStore.pollOrderStatus(orderId)
} catch (_err: unknown) {
// Resume token recovery failed, continue to legacy fallback paths.
// Fall through to signed resume-token recovery below.
}
}
if (!order.value && orderId) {
if (!order.value && resumeToken) {
try {
const result = await paymentAPI.resolveOrderPublicByResumeToken(resumeToken)
order.value = result.data
if (!orderId) {
orderId = result.data.id
}
} catch (_err: unknown) {
// Resume token recovery failed; do not trust legacy public out_trade_no fallback.
}
}
if (!resumeToken) {
orderId = routeOrderId
}
if (!order.value && !resumeToken && orderId) {
try {
order.value = await paymentStore.pollOrderStatus(orderId)
} catch (_err: unknown) {
@@ -173,7 +188,8 @@ onMounted(async () => {
}
}
if (!order.value && outTradeNo) {
const hasLegacyFallbackContext = Boolean(route.query.trade_status || route.query.money || route.query.type)
if (!order.value && !resumeToken && !orderId && outTradeNo && hasLegacyFallbackContext) {
returnInfo.value = {
outTradeNo,
money: String(route.query.money || ''),
@@ -191,14 +207,6 @@ onMounted(async () => {
} catch (_e: unknown) { /* fall through */ }
}
}
if (!order.value && orderId) {
try {
order.value = await paymentStore.pollOrderStatus(orderId)
} catch (_err: unknown) {
// Order lookup failed, will show returnInfo fallback.
}
}
loading.value = false
})
</script>