支付簽名 MD5Util 排序工具類

package com.skynet.wechat.wxPay.common;import java.security.MessageDigest;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.SortedMap;import java.util.TreeMap;public class MD5Util {      private static String charset = "UTF-8";      /**    * 建立md5摘要,規則是:按參數名稱a-z排序,遇到空值的參數不參加簽名。    */   @SuppressWarnings("rawtypes")   public static String createSign(SortedMap<String, String> packageParams,String token) {      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=" + token);      System.out.println("md5 sb:" + sb);      String sign = MD5Util.MD5Encode(sb.toString(), charset)            .toUpperCase();      System.out.println("簽名:" + sign);      return sign;   }   private static String byteArrayToHexString(byte b[]) {      StringBuffer resultSb = new StringBuffer();      for (int i = 0; i < b.length; i++)         resultSb.append(byteToHexString(b[i]));      return resultSb.toString();   }   private static String byteToHexString(byte b) {      int n = b;      if (n < 0)         n += 256;      int d1 = n / 16;      int d2 = n % 16;      return hexDigits[d1] + hexDigits[d2];   }   public static String MD5Encode(String origin, String charsetname) {      String resultString = null;      try {         resultString = new String(origin);         MessageDigest md = MessageDigest.getInstance("MD5");         if (charsetname == null || "".equals(charsetname))            resultString = byteArrayToHexString(md.digest(resultString                  .getBytes()));         else            resultString = byteArrayToHexString(md.digest(resultString                  .getBytes(charsetname)));      } catch (Exception exception) {      }      return resultString;   }   private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",         "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };         public static void main(String[] args) {            SortedMap<String, String> packageParams = new TreeMap<String, String>();      packageParams.put("token", "518e3f22f34d44868717f26d2c1150da");      packageParams.put("hosId", "419b2c79e2194bd7aa75a584e3e4b2a7");      packageParams.put("cardID", "8000001852953706");      packageParams.put("money", "0.10");      packageParams.put("modeType", "1");      packageParams.put("serialNumber", "101383989");      packageParams.put("IDentityCard", "610102197704090934");      packageParams.put("patientName", "杜濤");      packageParams.put("telephone", "18740461619");                        String sign = MD5Util.createSign(packageParams, "518e3f22f34d44868717f26d2c1150da");            System.out.println(sign);         }}
相關文章
相關標籤/搜索