微信后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
5.8 KiB

package com.ynxbd.wx.wxfactory.utils;
import com.alibaba.fastjson.JSON;
import com.ynxbd.wx.wxfactory.bean.MedicalNotify;
import lombok.extern.slf4j.Slf4j;
import org.dom4j.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
public class XmlHelper {
@FunctionalInterface
public interface Params {
void setMap(Map<String, Object> params);
}
/**
* 写入xml
*/
public static String mapToXml(Params params) {
Map<String, Object> map = new HashMap<>();
params.setMap(map);
return mapToXml(map);
}
/**
* 写入xml
*/
public static String mapToXml(Map<String, Object> params) {
//创建一个document
Document document = DocumentHelper.createDocument();
//增加根节点
Element root = document.addElement("xml");
Object value;
for (Map.Entry<String, Object> entry : params.entrySet()) {
value = entry.getValue();
if (value == null) {
continue;
}
root.addElement(entry.getKey()).setText(value.toString());
}
return document.asXML();
}
// public static void main(String[] args) {
// MchBaseResult mchBaseResult = new MchBaseResult();
// mchBaseResult.setReturn_code("SUCCESS");
// mchBaseResult.setReturn_msg("OK");
// Map<String, Object> map = new HashMap<>();
// map.put("return_code", "SUCCESS");
// String s1 = mapToXml(map);
// System.out.println(s1);
//// String s = XMLConverUtil.convertToXML(map);
//// System.out.println(s);
// }
/**
* xml转map(外层)
*
* @param xml xml
* @param isEmpty 是否转换空值
* @return map
*/
public static Map<String, Object> xmlOuterToMap(String xml, boolean isEmpty) {
Map<String, Object> result = new HashMap<>();
if (xml == null || "".equals(xml)) {
return result;
}
Document document;
try {
document = DocumentHelper.parseText(xml);
Element root = document.getRootElement(); // 获取根节点元素对象
List<Element> listElement = root.elements(); // 所有一级子节点的list
if (!listElement.isEmpty()) {
String name, content;
for (Element e : listElement) { // 遍历所有一级子节点
name = e.getName();
content = e.getTextTrim();
if (isEmpty) { //可为空
result.put(name, "".equals(content) ? null : content);
} else {
if (!"".equals(content)) {
result.put(name, content); // 沒有则将当前节点作为上级节点的属性对待
}
}
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
String xml = "<xml>\n" +
"<return_code><![CDATA[SUCCESS]]></return_code>\n" +
"<return_msg><![CDATA[SUCCESS]]></return_msg>\n" +
"<appid><![CDATA[wxd503671f502bd89d]]></appid>\n" +
"<mch_id><![CDATA[1288583001]]></mch_id>\n" +
"<openid><![CDATA[oeso-t5DIu2qpb0LJaKeJ06TRgzw]]></openid>\n" +
"<nonce_str><![CDATA[90690d6cf32c62ea]]></nonce_str>\n" +
"<med_trans_id><![CDATA[M22062955949633669]]></med_trans_id>\n" +
"<hosp_out_trade_no><![CDATA[WXa4820ed35506439d45d9d6d0635f]]></hosp_out_trade_no>\n" +
"<result_code><![CDATA[SUCCESS]]></result_code>\n" +
"<time_end><![CDATA[20220629142511]]></time_end>\n" +
"<pay_type>3</pay_type>\n" +
"<total_fee>597</total_fee>\n" +
"<cash_fee>297</cash_fee>\n" +
"<insurance_fee>300</insurance_fee>\n" +
"<response_content><![CDATA[{\"directUrl\":\"http://dzpz.ynylbz.cn/test/hicashier/#payResult?encData=c785ab466a6d13d2a3f3f84c47bcc80fef109d5bc5212327aeac8687555eef618b9b77d789eebfcfa5021cd36a43a3f17d71daabe194f29565d530567c756072091e895012e6c3dda1042eac5b08e5fb98801010896c6bc3891314aa46b230a30c59aa91f8dbaf2ae3a5d1ec700154db8f7e4381a9b72e3dee8747e6811bd8fd8c90ff1411c42fa49ff871c1370ad791dc030b4c2185a515b2902c293cd2fb4661acdbc8457f5a7cc7dd801885d1a94162b72ee49f305a260894e10c7488f3325b5fcd21afa639392afb322c68101df10489b710394321e549fde466c19d4f25d70440bd496c2ba695b798ae4e90642b\",\"feeSumamt\":5.97,\"fundPay\":0.00,\"medSetlFlag\":\"SUCC\",\"ownPayAmt\":2.97,\"psnAcctPay\":3.00,\"setlSn\":\"SET530100202206291425070000006\"}]]></response_content>\n" +
"<medical_card_id><![CDATA[]]></medical_card_id>\n" +
"<serial_no><![CDATA[WXa4820ed35506439d45d9d6d0635f]]></serial_no>\n" +
"<attach><![CDATA[recipe=1]]></attach>\n" +
"<cash_order_id><![CDATA[C22062955949633669]]></cash_order_id>\n" +
"<insurance_order_id><![CDATA[I22062955949633669]]></insurance_order_id>\n" +
"<sign><![CDATA[1FA8E91777A02ADDDCE2AB02D96B20A3]]></sign>\n" +
"<insurance_self_fee>300</insurance_self_fee>\n" +
"<insurance_fund_fee>0</insurance_fund_fee>\n" +
"<insurance_other_fee>0</insurance_other_fee>\n" +
"</xml>";
Map<String, Object> stringObjectMap = xmlOuterToMap(xml, false);
MedicalNotify medicalNotify = JSON.parseObject(JSON.toJSONString(stringObjectMap), MedicalNotify.class);
System.out.println(medicalNotify);
}
}