fix(frontend): preserve callback recovery state
This commit is contained in:
@@ -85,6 +85,12 @@ function normalizeRedirectPath(path: string | null | undefined): string {
|
||||
return value
|
||||
}
|
||||
|
||||
function appendQueryParam(query: Record<string, string>, key: string, value: string) {
|
||||
if (value) {
|
||||
query[key] = value
|
||||
}
|
||||
}
|
||||
|
||||
function goBackToPayment() {
|
||||
void router.replace('/purchase')
|
||||
}
|
||||
@@ -102,12 +108,19 @@ onMounted(async () => {
|
||||
}
|
||||
|
||||
const resumeToken = readParam('wechat_resume_token')
|
||||
const openid = readParam('openid')
|
||||
const state = readParam('state')
|
||||
const scope = readParam('scope')
|
||||
const paymentType = readParam('payment_type')
|
||||
const amount = readParam('amount')
|
||||
const orderType = readParam('order_type')
|
||||
const planId = readParam('plan_id')
|
||||
const redirectURL = new URL(
|
||||
normalizeRedirectPath(readParam('redirect')),
|
||||
window.location.origin,
|
||||
)
|
||||
|
||||
if (!resumeToken) {
|
||||
if (!resumeToken && !openid) {
|
||||
errorMessage.value = t('auth.wechatPayment.callbackMissingResumeToken')
|
||||
return
|
||||
}
|
||||
@@ -115,7 +128,18 @@ onMounted(async () => {
|
||||
const query: Record<string, string> = {
|
||||
...Object.fromEntries(redirectURL.searchParams.entries()),
|
||||
wechat_resume: '1',
|
||||
wechat_resume_token: resumeToken,
|
||||
}
|
||||
|
||||
if (resumeToken) {
|
||||
query.wechat_resume_token = resumeToken
|
||||
} else {
|
||||
query.openid = openid
|
||||
appendQueryParam(query, 'state', state)
|
||||
appendQueryParam(query, 'scope', scope)
|
||||
appendQueryParam(query, 'payment_type', paymentType)
|
||||
appendQueryParam(query, 'amount', amount)
|
||||
appendQueryParam(query, 'order_type', orderType)
|
||||
appendQueryParam(query, 'plan_id', planId)
|
||||
}
|
||||
|
||||
await router.replace({
|
||||
|
||||
Reference in New Issue
Block a user