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<Object, Object> parameters) {
|
StringBuffer sb = new StringBuffer();
|
sb.append("<xml>");
|
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 + ">" + "<![CDATA[" + v + "]]></" + k + ">");
|
} else {
|
sb.append("<" + k + ">" + v + "</" + k + ">");
|
}
|
}
|
sb.append("</xml>");
|
return sb.toString();
|
}
|
|
/**
|
* 创建签名Sign
|
*/
|
@SuppressWarnings("rawtypes")
|
public static String createSign(String characterEncoding, SortedMap<Object, Object> 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("</" + name + ">");
|
}
|
}
|
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<String, String> params) {
|
StringBuilder xml = new StringBuilder();
|
xml.append("<xml>");
|
for (Map.Entry<String, String> entry : params.entrySet()) {
|
String key = entry.getKey();
|
String value = entry.getValue();
|
// 略过空值
|
if (StringUtils.isEmpty(value))
|
continue;
|
xml.append("<").append(key).append("><![CDATA[");
|
xml.append(entry.getValue());
|
xml.append("]]></").append(key).append(">");
|
}
|
xml.append("</xml>");
|
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);
|
}
|
}
|