| package com.xzx.gc.util;  | 
|   | 
|   | 
| import org.slf4j.Logger;  | 
| import org.slf4j.LoggerFactory;  | 
|   | 
| import java.net.*;  | 
| import java.text.SimpleDateFormat;  | 
| import java.util.*;  | 
|   | 
|   | 
| public class PayForUtil {  | 
|   | 
|     private static Logger lg= LoggerFactory.getLogger(PayForUtil.class);;  | 
|   | 
|     /**  | 
|      * 是否签名正确,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。  | 
|      * @return boolean  | 
|      */  | 
|     public static boolean isTenpaySign(String characterEncoding, SortedMap<Object, Object> packageParams, String API_KEY) {  | 
|         StringBuffer sb = new StringBuffer();  | 
|         Set es = packageParams.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(!"sign".equals(k) && null != v && !"".equals(v)) {  | 
|                 sb.append(k + "=" + v + "&");  | 
|             }  | 
|         }  | 
|         sb.append("key=" + API_KEY);  | 
|   | 
|         //算出摘要  | 
|         String mysign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toLowerCase();  | 
|         String tenpaySign = ((String)packageParams.get("sign")).toLowerCase();  | 
|   | 
|         return tenpaySign.equals(mysign);  | 
|     }  | 
|   | 
|     /**  | 
|      * @author chenp  | 
|      * @Description:sign签名  | 
|      * @param characterEncoding  | 
|      *            编码格式  | 
|      * @param  | 
|      * @return  | 
|      */  | 
|     public static String createSign(String characterEncoding, SortedMap<Object, Object> packageParams, String API_KEY) {  | 
|         StringBuffer sb = new StringBuffer();  | 
|         Set es = packageParams.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 (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {  | 
|                 sb.append(k + "=" + v + "&");  | 
|             }  | 
|         }  | 
|         sb.append("key=" + API_KEY);  | 
|         String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase();  | 
|         return sign;  | 
|     }  | 
|   | 
|     /**  | 
|      * @author chenp  | 
|      * @Description:将请求参数转换为xml格式的string  | 
|      * @param parameters  | 
|      *            请求参数  | 
|      * @return  | 
|      */  | 
|     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();  | 
|     }  | 
|   | 
|     /**  | 
|      * 取出一个指定长度大小的随机正整数.  | 
|      *  | 
|      * @param length  | 
|      *            int 设定所取出随机数的长度。length小于11  | 
|      * @return int 返回生成的随机数。  | 
|      */  | 
|     public static int buildRandom(int length) {  | 
|         int num = 1;  | 
|         double random = Math.random();  | 
|         if (random < 0.1) {  | 
|             random = random + 0.1;  | 
|         }  | 
|         for (int i = 0; i < length; i++) {  | 
|             num = num * 10;  | 
|         }  | 
|         return (int) ((random * num));  | 
|     }  | 
|   | 
|     /**  | 
|      * 获取当前时间 yyyyMMddHHmmss  | 
|      *  @author chenp  | 
|      * @return String  | 
|      */  | 
|     public static String getCurrTime() {  | 
|         Date now = new Date();  | 
|         SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");  | 
|         String s = outFormat.format(now);  | 
|         return s;  | 
|     }  | 
|     /**  | 
|      * 获取本机IP地址  | 
|      * @author chenp  | 
|      * @return  | 
|      */  | 
|     public static String localIp(){  | 
|         String ip = null;  | 
|         Enumeration allNetInterfaces;  | 
|         try {  | 
|             allNetInterfaces = NetworkInterface.getNetworkInterfaces();  | 
|             while (allNetInterfaces.hasMoreElements()) {  | 
|                 NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();  | 
|                 List<InterfaceAddress> InterfaceAddress = netInterface.getInterfaceAddresses();  | 
|                 for (InterfaceAddress add : InterfaceAddress) {  | 
|                     InetAddress Ip = add.getAddress();  | 
|                     if (Ip != null && Ip instanceof Inet4Address) {  | 
|                         ip = Ip.getHostAddress();  | 
|                     }  | 
|                 }  | 
|             }  | 
|         } catch (SocketException e) {  | 
|             lg.warn("获取本机Ip失败:异常信息:"+e.getMessage());  | 
|         }  | 
|         return ip;  | 
|     }  | 
|   | 
| }  |