|
@@ -104,46 +104,28 @@ export function getTicketFromUrl() {
|
|
|
console.log('✅ 修正后的查询字符串:', search.substring(0, 100))
|
|
console.log('✅ 修正后的查询字符串:', search.substring(0, 100))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 尝试多种方式解析票据
|
|
|
|
|
|
|
+ // 直接手动解析获取原始票据,不做任何解码处理
|
|
|
let ticket = null
|
|
let ticket = null
|
|
|
|
|
+ let cleanSearch = search
|
|
|
|
|
+ if (cleanSearch.startsWith('?')) {
|
|
|
|
|
+ cleanSearch = cleanSearch.substring(1)
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- // 方式1: 使用 URLSearchParams
|
|
|
|
|
- const urlParams = new URLSearchParams(search)
|
|
|
|
|
- ticket = urlParams.get('iamcaspticket')
|
|
|
|
|
- console.log('📋 方式1 (URLSearchParams) 结果:', ticket ? ticket.substring(0, 50) + '...' : 'null')
|
|
|
|
|
-
|
|
|
|
|
- // 方式2: 如果方式1失败,尝试手动解析(处理特殊情况)
|
|
|
|
|
- if (!ticket && search) {
|
|
|
|
|
- console.log('⚠️ URLSearchParams 解析失败,尝试手动解析...')
|
|
|
|
|
-
|
|
|
|
|
- // 移除开头的 ? 或 ?&
|
|
|
|
|
- let cleanSearch = search
|
|
|
|
|
- if (cleanSearch.startsWith('?&')) {
|
|
|
|
|
- cleanSearch = cleanSearch.substring(2)
|
|
|
|
|
- } else if (cleanSearch.startsWith('?')) {
|
|
|
|
|
- cleanSearch = cleanSearch.substring(1)
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- console.log('📋 清理后的字符串:', cleanSearch.substring(0, 50) + '...')
|
|
|
|
|
-
|
|
|
|
|
- // 按 & 分割参数
|
|
|
|
|
- const params = cleanSearch.split('&')
|
|
|
|
|
- console.log('📋 分割后的参数数量:', params.length)
|
|
|
|
|
-
|
|
|
|
|
- for (const param of params) {
|
|
|
|
|
- // 只分割第一个 = 号,避免票据内容中的 = 被分割
|
|
|
|
|
- const equalIndex = param.indexOf('=')
|
|
|
|
|
- if (equalIndex === -1) continue
|
|
|
|
|
-
|
|
|
|
|
- const key = param.substring(0, equalIndex)
|
|
|
|
|
- const value = param.substring(equalIndex + 1)
|
|
|
|
|
-
|
|
|
|
|
- console.log('📋 检查参数:', key)
|
|
|
|
|
- if (key === 'iamcaspticket' && value) {
|
|
|
|
|
- ticket = decodeURIComponent(value)
|
|
|
|
|
- console.log('✅ 方式2 (手动解析) 找到票据:', ticket.substring(0, 50) + '...')
|
|
|
|
|
- break
|
|
|
|
|
|
|
+ const params = cleanSearch.split('&')
|
|
|
|
|
+ for (const param of params) {
|
|
|
|
|
+ const equalIndex = param.indexOf('=')
|
|
|
|
|
+ if (equalIndex === -1) continue
|
|
|
|
|
+ const key = param.substring(0, equalIndex)
|
|
|
|
|
+ if (key === 'iamcaspticket') {
|
|
|
|
|
+ // 获取原始值,只做一次URL解码
|
|
|
|
|
+ const rawValue = param.substring(equalIndex + 1)
|
|
|
|
|
+ try {
|
|
|
|
|
+ ticket = decodeURIComponent(rawValue)
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ ticket = rawValue
|
|
|
}
|
|
}
|
|
|
|
|
+ console.log('📋 获取到票据,长度:', ticket.length)
|
|
|
|
|
+ break
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -151,19 +133,6 @@ export function getTicketFromUrl() {
|
|
|
console.log('🎫 成功获取到票据!')
|
|
console.log('🎫 成功获取到票据!')
|
|
|
console.log('🎫 票据长度:', ticket.length)
|
|
console.log('🎫 票据长度:', ticket.length)
|
|
|
console.log('🎫 票据前50个字符:', ticket.substring(0, 50) + '...')
|
|
console.log('🎫 票据前50个字符:', ticket.substring(0, 50) + '...')
|
|
|
-
|
|
|
|
|
- // 票据可能已经解码,检查是否需要再次解码
|
|
|
|
|
- try {
|
|
|
|
|
- // 如果票据中包含 %,说明可能是 URL 编码的
|
|
|
|
|
- if (ticket.includes('%')) {
|
|
|
|
|
- const decoded = decodeURIComponent(ticket)
|
|
|
|
|
- console.log('🔄 票据已解码')
|
|
|
|
|
- ticket = decoded
|
|
|
|
|
- }
|
|
|
|
|
- } catch (e) {
|
|
|
|
|
- console.log('⚠️ 票据解码失败,使用原始值:', e.message)
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
console.log('🔍 === 票据获取成功 ===')
|
|
console.log('🔍 === 票据获取成功 ===')
|
|
|
return ticket
|
|
return ticket
|
|
|
}
|
|
}
|
|
@@ -309,27 +278,12 @@ export async function processTicket(ticketData) {
|
|
|
try {
|
|
try {
|
|
|
console.log('🔍 正在处理票据...')
|
|
console.log('🔍 正在处理票据...')
|
|
|
console.log('📡 请求接口:', TICKET_PROCESS_API)
|
|
console.log('📡 请求接口:', TICKET_PROCESS_API)
|
|
|
- console.log('📦 原始票据数据长度:', ticketData.length)
|
|
|
|
|
-
|
|
|
|
|
- // 清理票据中的各种特殊字符
|
|
|
|
|
- let cleanTicket = ticketData
|
|
|
|
|
- .replace(/\r\n/g, '') // 移除 Windows 换行符
|
|
|
|
|
- .replace(/\n/g, '') // 移除 Unix 换行符
|
|
|
|
|
- .replace(/\r/g, '') // 移除回车符
|
|
|
|
|
- .replace(/\s/g, '') // 移除所有空白字符(空格、制表符等)
|
|
|
|
|
- .replace(/\u0000/g, '') // 移除 NULL 字符
|
|
|
|
|
- .trim() // 移除首尾空白
|
|
|
|
|
-
|
|
|
|
|
- // 打印清理前后的对比,帮助调试
|
|
|
|
|
- console.log('📦 清理前票据(前100字符):', ticketData.substring(0, 100))
|
|
|
|
|
- console.log('📦 清理前票据包含换行符数量:', (ticketData.match(/\n/g) || []).length)
|
|
|
|
|
- console.log('📦 清理前票据包含空格数量:', (ticketData.match(/ /g) || []).length)
|
|
|
|
|
-
|
|
|
|
|
- console.log('📦 清理后票据数据长度:', cleanTicket.length)
|
|
|
|
|
- console.log('📦 票据前100字符:', cleanTicket.substring(0, 100))
|
|
|
|
|
|
|
+ console.log('📦 票据长度:', ticketData.length)
|
|
|
|
|
+ console.log('📦 票据前100字符:', ticketData.substring(0, 100))
|
|
|
|
|
|
|
|
|
|
+ // 直接使用原始票据,不做任何清洗
|
|
|
const requestBody = {
|
|
const requestBody = {
|
|
|
- ticket_data: cleanTicket
|
|
|
|
|
|
|
+ ticket_data: ticketData
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
console.log('📤 发送请求...')
|
|
console.log('📤 发送请求...')
|