diff --git a/Cunkebao/src/utils/common.ts b/Cunkebao/src/utils/common.ts index 68c394c6..5c195d3b 100644 --- a/Cunkebao/src/utils/common.ts +++ b/Cunkebao/src/utils/common.ts @@ -165,74 +165,86 @@ export function parseWeappMsgStr(inputStr: string): any { try { // 1. 解析外层JSON const outerJson = JSON.parse(inputStr); - + // 2. 检查必要字段 if (!outerJson.contentXml || outerJson.type !== "miniprogram") { throw new Error("Invalid miniprogram message format"); } - + // 3. 解析内层XML为JSON const xmlContent = outerJson.contentXml; const parser = new DOMParser(); const xmlDoc = parser.parseFromString(xmlContent, "text/xml"); - + // 检查XML解析是否成功 if (xmlDoc.getElementsByTagName("parsererror").length > 0) { throw new Error("XML parsing failed"); } - + // 4. 提取XML中的关键信息 const msgElement = xmlDoc.getElementsByTagName("msg")[0]; const appmsgElement = xmlDoc.getElementsByTagName("appmsg")[0]; const weappinfoElement = xmlDoc.getElementsByTagName("weappinfo")[0]; - + if (!msgElement || !appmsgElement) { throw new Error("Invalid XML structure"); } - + // 5. 构建appmsg对象 const appmsg: any = { title: appmsgElement.getElementsByTagName("title")[0]?.textContent || "", des: appmsgElement.getElementsByTagName("des")[0]?.textContent || "", type: appmsgElement.getElementsByTagName("type")[0]?.textContent || "", - sourcedisplayname: appmsgElement.getElementsByTagName("sourcedisplayname")[0]?.textContent || "", - appname: appmsgElement.getElementsByTagName("appname")[0]?.textContent || "" + sourcedisplayname: + appmsgElement.getElementsByTagName("sourcedisplayname")[0] + ?.textContent || "", + appname: + appmsgElement.getElementsByTagName("appname")[0]?.textContent || "", }; - + // 6. 处理weappinfo信息 if (weappinfoElement) { appmsg.weappinfo = { - username: weappinfoElement.getElementsByTagName("username")[0]?.textContent || "", - appid: weappinfoElement.getElementsByTagName("appid")[0]?.textContent || "", - type: weappinfoElement.getElementsByTagName("type")[0]?.textContent || "", - version: weappinfoElement.getElementsByTagName("version")[0]?.textContent || "", - weappiconurl: weappinfoElement.getElementsByTagName("weappiconurl")[0]?.textContent || "", - pagepath: weappinfoElement.getElementsByTagName("pagepath")[0]?.textContent || "" + username: + weappinfoElement.getElementsByTagName("username")[0]?.textContent || + "", + appid: + weappinfoElement.getElementsByTagName("appid")[0]?.textContent || "", + type: + weappinfoElement.getElementsByTagName("type")[0]?.textContent || "", + version: + weappinfoElement.getElementsByTagName("version")[0]?.textContent || + "", + weappiconurl: + weappinfoElement.getElementsByTagName("weappiconurl")[0] + ?.textContent || "", + pagepath: + weappinfoElement.getElementsByTagName("pagepath")[0]?.textContent || + "", }; - + // 处理thumburl - 从weappiconurl中提取 const weappiconurl = appmsg.weappinfo.weappiconurl; - if (weappiconurl && weappiconurl.includes('http')) { + if (weappiconurl && weappiconurl.includes("http")) { // 清理URL中的特殊字符和CDATA标记 appmsg.weappinfo.thumburl = weappiconurl - .replace(//g, '') - .replace(/[`"']/g, '') - .replace(/&/g, '&') + .replace(//g, "") + .replace(/[`"']/g, "") + .replace(/&/g, "&") .trim(); } else { appmsg.weappinfo.thumburl = ""; } } - + // 7. 合并结果 const result = { ...outerJson, type: "miniprogram", - appmsg + appmsg, }; - + return result; - } catch (error) { console.error("parseWeappMsgStr error:", error); throw new Error(`Failed to parse miniprogram message: ${error.message}`);