• 支付签名 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);
          
       }
    }
  • 相关阅读:
    能否获取倒数第二个指定字符的位置? 截取
    css布局之头尾固定中间高度自适应
    C# Convert.ToInt32和int.Parse转换null和空字符串时的不同表现
    当前上下文中不存在viewbag
    IIS 7.5 上传文件大小限制
    git 学习笔记
    sql like 语句
    js文件,同样的路径,拷贝过来的为什么不能访问
    软件项目开发报价(一)
    asp.net core webapi 日期返回中出现字母T
  • 原文地址:https://www.cnblogs.com/yydxh/p/11810443.html
Copyright © 2020-2023  润新知