Compare commits
	
		
			2 Commits
		
	
	
		
			6315aadc47
			...
			66cf9d1b5f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 66cf9d1b5f | |||
| 3d45c281c9 | 
| @ -1,130 +1,23 @@ | ||||
| import http from '@ohos.net.http'; | ||||
| import http from "@ohos.net.http" | ||||
| import convertxml from '@ohos.convertxml'; | ||||
| import prompt from '@ohos.prompt'; | ||||
| import Prompt from '@system.prompt'; | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @author: Renjun Su | ||||
|  * @date: 2023/2/20 | ||||
|  * @desc 接口请求封装 | ||||
|  * @param {method} | ||||
|  * @param {xml} xml请求的数据 xml是字符串 | ||||
|  * @param {data} post请求的数据 | ||||
|  * @param {params} get请求的数据 | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| export default async function tempRequest<T>(req: any): Promise<T> { | ||||
|   return new Promise((resolve, reject) => { | ||||
|     let httpRequest = http.createHttp(); | ||||
|     const { url, params = {}, data = {}, xml, method = 'get', host, isNewCenter = false } = req; | ||||
|     try { | ||||
|       const options = { | ||||
|         method: http.RequestMethod[method.toUpperCase()], | ||||
|         header: { | ||||
|           'Content-Type': xml ? 'text/xml' : 'application/json' | ||||
|         }, | ||||
|         extraData: xml ? data : JSON.stringify(data), | ||||
|         connectTimeout: 15 * 1000 | ||||
|       } | ||||
|       let paramsStr = Reflect.ownKeys(params).reduce((p: string, n: string) => (`${p}${n}=${params[n]}&`), '?') || ''; | ||||
|       paramsStr = paramsStr.toString(); | ||||
|       paramsStr = paramsStr.substring(0, paramsStr.length - 1) | ||||
|       let baseUrl = host ? host : globalThis.host | ||||
|       // let baseUrl=host?config.csptHost:config.host' | ||||
|       console.log('响应头地址1' + baseUrl, url, options.extraData.length) | ||||
|       // const {result,responseCode} = await | ||||
|       httpRequest.request(`${baseUrl}${url}${paramsStr}`, { | ||||
|         ...options | ||||
|       }) | ||||
|         .then(async (data) => { | ||||
|           const result = data.result | ||||
|           console.log('响应头地址' + JSON.stringify(result)) | ||||
|           let res: any = xml ? xmlToJson(result, url) : result; | ||||
|           console.log('响应头地址' + JSON.stringify(res)) | ||||
| 
 | ||||
|           let resObj = null; | ||||
|           if (typeof res === "string") { | ||||
|             res = JSON.parse(res) | ||||
|           } | ||||
|           //处理中心服务code | ||||
|           if (res.Envelope) { | ||||
|             const msgXml = res.Envelope.Body.writeObjectOutResponse.return; | ||||
|             const dd = handleCenterCode(msgXml, isNewCenter); | ||||
|             httpRequest.destroy(); | ||||
|             // @ts-ignore | ||||
|             resolve(dd) | ||||
|             return | ||||
|           } | ||||
| 
 | ||||
|           if (!xml) { | ||||
|             if (res.head.resultCode === '0') { | ||||
|               httpRequest.destroy(); | ||||
|               resolve(res) | ||||
|               return | ||||
|             } else { | ||||
|               const resultMessage = res?.body?.resultMessage || res?.head?.resultMessage | ||||
|               Prompt.showToast({ | ||||
|                 message: decodeURIComponent(resultMessage), | ||||
|                 duration: 3000 | ||||
|               }); | ||||
|               httpRequest.destroy(); | ||||
|               reject(false) | ||||
|             } | ||||
|           } | ||||
|           for (let i in res) { | ||||
|             resObj = res[i].head | ||||
|           } | ||||
|           console.info('jiangsong:res in request' + url + JSON.stringify(resObj)) | ||||
|           if (resObj.resultCode === '0') { | ||||
|             httpRequest.destroy(); | ||||
|             resolve(res) | ||||
|             return | ||||
|           } else { | ||||
|             Prompt.showToast({ | ||||
|               message: decodeURIComponent(resObj.resultMessage), | ||||
|               duration: 3000 | ||||
|             }); | ||||
|             httpRequest.destroy(); | ||||
|             reject(res) | ||||
|           } | ||||
|         }).catch(Error => { | ||||
|         console.info('test-error0' + url + ' error:resp: ' + JSON.stringify(Error.message)) | ||||
|         Prompt.showToast({ | ||||
|           message: Error?.message, | ||||
|           duration: 5000 | ||||
|         }); | ||||
|         reject(Error) | ||||
|       }) | ||||
| 
 | ||||
|     } catch (e) { | ||||
|       console.info('test-error' + url + ' error:resp: ' + JSON.stringify(e)) | ||||
|       if (!e || !(e?.message)) { | ||||
|         httpRequest.destroy(); | ||||
|         reject({ | ||||
|           code: -1 | ||||
|         }) | ||||
|       } | ||||
|       Prompt.showToast({ | ||||
|         message: e?.message, | ||||
|         duration: 5000 | ||||
|       }); | ||||
|       reject({ | ||||
|         code: e.code | ||||
|       }) | ||||
| 
 | ||||
|     } | ||||
|   }) | ||||
| 
 | ||||
| import { BusinessError } from "@ohos.base" | ||||
| import promptAction from "@ohos.promptAction"; | ||||
| 
 | ||||
| interface RequestOption { | ||||
|   url: string | ||||
|   params: object | ||||
|   data: object | string | ||||
|   xml: boolean | ||||
|   method: http.RequestMethod | ||||
|   host?: string | ||||
|   isNewCenter?: boolean | ||||
| } | ||||
| 
 | ||||
| const base: string = "" | ||||
| 
 | ||||
| //xml格式转JSON | ||||
| function xmlToJson(result, url) { | ||||
|   console.log("xmlToJson begin", url); | ||||
|   let xmlOptions = { | ||||
| function xmlToJSON(target: string): object { | ||||
|   let conv = new convertxml.ConvertXML() | ||||
|   const result: object = conv.convertToJSObject(target, { | ||||
|     trim: false, | ||||
|     declarationKey: "_declaration", | ||||
|     instructionKey: "_instruction", | ||||
| @ -137,115 +30,151 @@ function xmlToJson(result, url) { | ||||
|     typeKey: "_type", | ||||
|     nameKey: "_name", | ||||
|     elementsKey: "_elements", | ||||
|     "skipPreprocess": true | ||||
|   } | ||||
| 
 | ||||
|   let strXml = result.toString(); | ||||
|   let conv = new convertxml.ConvertXML(); | ||||
| 
 | ||||
|   console.log("xmlToJson result.length = " + result.length); | ||||
|   console.log("xmlToJson result content = " + result); | ||||
|   // @ts-ignore | ||||
|   let { _elements: xmlArr } = conv.convertToJSObject(strXml, xmlOptions); | ||||
|   console.log("xmlToJson deeml begin"); | ||||
|   let res = deeml(xmlArr); | ||||
|   console.log("xmlToJson end", url); | ||||
|   return res | ||||
|   }) | ||||
|   return transfer(result['_elements']) | ||||
| } | ||||
| 
 | ||||
| //处理中心服务code | ||||
| function handleCenterCode(msgXml, isNewCenter) { | ||||
|   //新监管 | ||||
| function transfer(target: Array<object>, name?: string): object { | ||||
|   const result: object = new Object() | ||||
| 
 | ||||
|   target.forEach((el: object) => { | ||||
|     const _elements: Array<object> = el['_elements'] | ||||
|     if (el['_type'] === "element") { | ||||
|       if (_elements === undefined) { | ||||
|         return | ||||
|       } | ||||
|       const jsonObj: object = result[el['_name']] | ||||
|       const handleCommonArray = (obj: object) => { | ||||
|         if (Array.isArray(jsonObj)) { | ||||
|           result[el['_name']].push(obj) | ||||
|         } else { | ||||
|           result[el['_name']] = [result[el['_name']], obj] | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       if (_elements && _elements.length === 1 && _elements[0]['_type'] === 'text') { | ||||
|         if (jsonObj) { | ||||
|           handleCommonArray(_elements[0]['_text']) | ||||
|         } else { | ||||
|           jsonObj[el['_name']] = _elements[0]["_text"] | ||||
|         } | ||||
|       } else { | ||||
|         if (jsonObj) { | ||||
|           handleCommonArray(transfer(el['_elements'], el['_name'])) | ||||
|         } else { | ||||
|           jsonObj[el['_name']] = transfer(el['_elements'], el['_name']) | ||||
|         } | ||||
|       } | ||||
|     } else if (el['_attributes']) { | ||||
|       result[name] = { | ||||
|         value: el['_text'], | ||||
|         attributes: el['__attributes'] | ||||
|       } | ||||
|     } | ||||
|   }) | ||||
|   return result | ||||
| } | ||||
| 
 | ||||
| interface CenterCodeResult { | ||||
|   code: string | ||||
|   message?: string | ||||
|   keystr?: string | ||||
| } | ||||
| 
 | ||||
| function dealCenterCode(message: string, isNewCenter: boolean): CenterCodeResult { | ||||
|   if (isNewCenter) { | ||||
|     const msg = JSON.parse(msgXml); | ||||
|     const result = msg?.data[0]?.result; | ||||
|     const msg: object = JSON.parse(message); | ||||
|     const result: object = msg?.['data'][0]?.result; | ||||
|     if (result) { | ||||
|       const { code, message, retval } = result | ||||
|       if (code != '1') { | ||||
|       if (result['code'] != '1') { | ||||
|         const rMessage = decodeURIComponent(message as string) | ||||
|         Prompt.showToast({ | ||||
|         promptAction.showToast({ | ||||
|           message: rMessage, | ||||
|           duration: 3000 | ||||
|         }); | ||||
|         return { code, message } | ||||
|         let returnResult: CenterCodeResult = { | ||||
|           code: result['code'] as string, | ||||
|           message: result['message'] as string, | ||||
|         } | ||||
|         return returnResult | ||||
|       } else { | ||||
|         return { code, keystr: retval } | ||||
|         let returnResult: CenterCodeResult = { | ||||
|           code: result['code'] as string, | ||||
|           keystr: result['retval'] as string, | ||||
|         } | ||||
|         return returnResult | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   //正则匹配code message字段 | ||||
|   const [code, message, keystr] = | ||||
|     [/<code>(.*)<\/code>/i, /<message>(.*)<\/message>/i, /<keystr>(.*)<\/keystr>/i].map(pattern => { | ||||
|       const patternArr = pattern.exec(msgXml); | ||||
|       return patternArr && patternArr[1] | ||||
|     }); | ||||
| 
 | ||||
|   if (code != '1') { | ||||
|     prompt.showToast({ | ||||
|       message: decodeURIComponent(message as string), | ||||
|       duration: 3000 | ||||
|     }); | ||||
|     // globalThis.type='1' | ||||
|     // globalThis.title=decodeURIComponent(message as string) | ||||
|     // globalThis.errorDialog.open() | ||||
|     return { code, message: decodeURIComponent(message) } | ||||
|   } else { | ||||
|     return { code, keystr, message } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| //JSON转xml格式 | ||||
| const deeml = (elements, _name?) => { | ||||
|   const json = {} | ||||
| export default function Request<T>(options: RequestOption): Promise<T> { | ||||
|   return new Promise((resolve, reject) => { | ||||
|     const instance = http.createHttp() | ||||
|     const baseURL = options.host || base | ||||
| 
 | ||||
|   elements.map(ele => { | ||||
|     const _elements = ele._elements | ||||
|     if (ele._type === 'element') { | ||||
|       if (_elements == undefined) { | ||||
|     instance.request(baseURL + options.url, { | ||||
|       method: options.method, | ||||
|       header: { | ||||
|         "Content-Type": options.xml ? "text/xml" : 'application/json' | ||||
|       }, | ||||
|       extraData: options.xml ? options.data : JSON.stringify(options.data) | ||||
|     }).then(async data => { | ||||
|       let result = options.xml ? xmlToJSON(data.result as string) : data.result | ||||
|       let resObj: object | ||||
|       if (typeof result === 'string') { | ||||
|         result = JSON.parse(result) | ||||
|       } | ||||
|       if (result['Envelope']) { | ||||
|         const msgXml: string = result['Envelope']['Body']['writeObjectOutResponse']['return']; | ||||
|         resolve(dealCenterCode(msgXml, options.isNewCenter) as T) | ||||
|         return | ||||
|       } | ||||
|       const thisJson = json[ele._name] | ||||
|       if (_elements && _elements.length === 1 && _elements[0]._type === 'text') { | ||||
|         // 如果值存在了 | ||||
|         if (thisJson) { | ||||
|           handleCommonArr(_elements[0]._text) | ||||
|       if (!options.xml) { | ||||
|         if (result['head']['resultCode'] === '0') { | ||||
|           resolve(result as T) | ||||
|           return | ||||
|         } else { | ||||
|           json[ele._name] = _elements[0]._text | ||||
|           const resultMessage: string = result?.['body']?.['resultMessage'] || result?.['head']?.['resultMessage'] | ||||
|           promptAction.showToast({ | ||||
|             message: decodeURIComponent(resultMessage), | ||||
|             duration: 3000 | ||||
|           }); | ||||
|           reject(false) | ||||
|           return | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       Object.values(result).forEach((item: object) => { | ||||
|         resObj = item['head'] | ||||
|       }) | ||||
|       if (resObj['resultCode'] === '0') { | ||||
|         resolve(result as T) | ||||
|         return | ||||
|       } else { | ||||
|         if (thisJson) { | ||||
|           handleCommonArr(deeml(ele._elements, ele._name)) | ||||
|         } else { | ||||
|           json[ele._name] = deeml(ele._elements, ele._name) | ||||
|         } | ||||
|         promptAction.showToast({ | ||||
|           message: decodeURIComponent(resObj['resultMessage']), | ||||
|           duration: 3000 | ||||
|         }); | ||||
|         reject(result) | ||||
|       } | ||||
| 
 | ||||
|       //通用处理重复标签 | ||||
|       function handleCommonArr(obj) { | ||||
|         if (thisJson) { | ||||
|           if (Array.isArray(thisJson)) { | ||||
|             json[ele._name].push(obj) | ||||
|           } else { | ||||
|             json[ele._name] = [json[ele._name], obj] | ||||
|           } | ||||
|         } else { | ||||
|           json[ele._name] = obj | ||||
|         } | ||||
|     }).catch((err: BusinessError) => { | ||||
|       if (!err || !(err?.message)) { | ||||
|         reject({ | ||||
|           code: -1 | ||||
|         }) | ||||
|       } | ||||
| 
 | ||||
|       0 | ||||
|     } else { | ||||
|       //标签上有属性 | ||||
|       if (ele._attributes) { | ||||
|         json[_name] = { | ||||
|           value: ele._text, | ||||
|           attributes: ele.__attributes | ||||
|         } | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|   }); | ||||
|   return json | ||||
| }; | ||||
| 
 | ||||
|       promptAction.showToast({ | ||||
|         message: err?.message, | ||||
|         duration: 5000 | ||||
|       }); | ||||
|       reject({ | ||||
|         code: err.code | ||||
|       }) | ||||
|     }) | ||||
|       .finally(() => { | ||||
|         instance.destroy() | ||||
|       }) | ||||
|   }) | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user