package com.panzhihua.common.utlis; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.math.BigDecimal; import java.net.InetAddress; import java.net.UnknownHostException; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.text.SimpleDateFormat; import java.util.*; import org.jdom2.input.SAXBuilder; public class PayUtil { /** * 获取当前机器的ip */ public static String getLocalIp() { InetAddress ia = null; String localip = null; try { ia = InetAddress.getLocalHost(); localip = ia.getHostAddress(); } catch (UnknownHostException e) { e.printStackTrace(); } return localip; } @SuppressWarnings("rawtypes") public static String getRequestXml(SortedMap parameters) { StringBuffer sb = new StringBuffer(); sb.append(""); Set es = parameters.entrySet(); Iterator it = es.iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry)it.next(); String k = (String)entry.getKey(); String v = (String)entry.getValue(); if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k) || "sign".equalsIgnoreCase(k)) { sb.append("<" + k + ">" + ""); } else { sb.append("<" + k + ">" + v + ""); } } sb.append(""); return sb.toString(); } /** * 创建签名Sign */ @SuppressWarnings("rawtypes") public static String createSign(String characterEncoding, SortedMap parameters, String key) { StringBuffer sb = new StringBuffer(); Set es = parameters.entrySet(); Iterator it = es.iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry)it.next(); String k = (String)entry.getKey(); if (entry.getValue() != null || !"".equals(entry.getValue())) { String v = String.valueOf(entry.getValue()); if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) { sb.append(k + "=" + v + "&"); } } } sb.append("key=" + key); String sign = ""; try { sign = MD5(sb.toString()); } catch (Exception e) { return e.getMessage(); } return sign; } /** * 生成随机数 */ public static String makeUUID(int len) { return UUID.randomUUID().toString().replaceAll("-", "").substring(0, len); } /** * 生成订单号 */ public static String generateOrderNo() { SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd"); return sdf.format(new Date()) + makeUUID(16); } /** * 解析xml */ public static Map doXMLParse(String strxml) throws Exception { strxml = strxml.replaceFirst("encoding=\".*\"", "encoding=\"UTF-8\""); if (StringUtils.isNotEmpty(strxml)) { return null; } Map m = new HashMap(); InputStream in = new ByteArrayInputStream(strxml.getBytes(StandardCharsets.UTF_8)); SAXBuilder builder = new SAXBuilder(); org.jdom2.Document doc = builder.build(in); org.jdom2.Element root = doc.getRootElement(); List list = root.getChildren(); Iterator it = list.iterator(); while (it.hasNext()) { org.jdom2.Element e = (org.jdom2.Element)it.next(); String k = e.getName(); String v = ""; List children = e.getChildren(); if (children.isEmpty()) { v = e.getTextNormalize(); } else { v = getChildrenText(children); } m.put(k, v); } // 关闭流 in.close(); return m; } /** * 获取子节点的xml */ public static String getChildrenText(List children) { StringBuffer sb = new StringBuffer(); if (!children.isEmpty()) { Iterator it = children.iterator(); while (it.hasNext()) { org.jdom2.Element e = (org.jdom2.Element)it.next(); String name = e.getName(); String value = e.getTextNormalize(); List list = e.getChildren(); sb.append("<" + name + ">"); if (!list.isEmpty()) { sb.append(getChildrenText(list)); } sb.append(value); sb.append(""); } } return sb.toString(); } /** * 转换金额到整型 */ public static String moneyToIntegerStr(BigDecimal money) { int amount = money.multiply(new BigDecimal((100))).setScale(0, BigDecimal.ROUND_HALF_UP).intValue(); return String.valueOf(amount); } /** * 微信下单,map to xml * * @param params * 参数 * @return String */ public static String mapToXml(Map params) { StringBuilder xml = new StringBuilder(); xml.append(""); for (Map.Entry entry : params.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); // 略过空值 if (StringUtils.isEmpty(value)) continue; xml.append("<").append(key).append(">"); } xml.append(""); return xml.toString(); } /** * 生成 MD5 * * @param data * 待处理数据 * @return MD5结果 */ public static String MD5(String data) throws Exception { java.security.MessageDigest md = MessageDigest.getInstance("MD5"); byte[] array = md.digest(data.getBytes(StandardCharsets.UTF_8)); StringBuilder sb = new StringBuilder(); for (byte item : array) { sb.append(Integer.toHexString((item & 0xFF) | 0x100), 1, 3); } return sb.toString().toUpperCase(); } public static String create_timestamp() { return Long.toString(System.currentTimeMillis() / 1000); } }