1. package com.skynet.wechat.wxPay.common;
  2.  
  3. import java.security.MessageDigest;
  4. import java.util.Iterator;
  5. import java.util.Map;
  6. import java.util.Set;
  7. import java.util.SortedMap;
  8. import java.util.TreeMap;
  9.  
  10. public class MD5Util {
  11.  
  12. private static String charset = "UTF-8";
  13.  
  14. /**
  15. * 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。
  16. */
  17. @SuppressWarnings("rawtypes")
  18. public static String createSign(SortedMap<String, String> packageParams,String token) {
  19. StringBuffer sb = new StringBuffer();
  20. Set es = packageParams.entrySet();
  21. Iterator it = es.iterator();
  22. while (it.hasNext()) {
  23. Map.Entry entry = (Map.Entry) it.next();
  24. String k = (String) entry.getKey();
  25. String v = (String) entry.getValue();
  26. if (null != v && !"".equals(v) && !"sign".equals(k)
  27. && !"key".equals(k)) {
  28. sb.append(k + "=" + v + "&");
  29. }
  30. }
  31. sb.append("key=" + token);
  32. System.out.println("md5 sb:" + sb);
  33. String sign = MD5Util.MD5Encode(sb.toString(), charset)
  34. .toUpperCase();
  35. System.out.println("签名:" + sign);
  36. return sign;
  37.  
  38. }
  39. private static String byteArrayToHexString(byte b[]) {
  40. StringBuffer resultSb = new StringBuffer();
  41. for (int i = 0; i < b.length; i++)
  42. resultSb.append(byteToHexString(b[i]));
  43.  
  44. return resultSb.toString();
  45. }
  46.  
  47. private static String byteToHexString(byte b) {
  48. int n = b;
  49. if (n < 0)
  50. n += 256;
  51. int d1 = n / 16;
  52. int d2 = n % 16;
  53. return hexDigits[d1] + hexDigits[d2];
  54. }
  55.  
  56. public static String MD5Encode(String origin, String charsetname) {
  57. String resultString = null;
  58. try {
  59. resultString = new String(origin);
  60. MessageDigest md = MessageDigest.getInstance("MD5");
  61. if (charsetname == null || "".equals(charsetname))
  62. resultString = byteArrayToHexString(md.digest(resultString
  63. .getBytes()));
  64. else
  65. resultString = byteArrayToHexString(md.digest(resultString
  66. .getBytes(charsetname)));
  67. } catch (Exception exception) {
  68. }
  69. return resultString;
  70. }
  71.  
  72. private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
  73. "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
  74.  
  75. public static void main(String[] args) {
  76.  
  77. SortedMap<String, String> packageParams = new TreeMap<String, String>();
  78. packageParams.put("token", "518e3f22f34d44868717f26d2c1150da");
  79. packageParams.put("hosId", "419b2c79e2194bd7aa75a584e3e4b2a7");
  80. packageParams.put("cardID", "8000001852953706");
  81. packageParams.put("money", "0.10");
  82. packageParams.put("modeType", "1");
  83. packageParams.put("serialNumber", "101383989");
  84. packageParams.put("IDentityCard", "610102197704090934");
  85. packageParams.put("patientName", "杜涛");
  86. packageParams.put("telephone", "18740461619");
  87.  
  88. String sign = MD5Util.createSign(packageParams, "518e3f22f34d44868717f26d2c1150da");
  89.  
  90. System.out.println(sign);
  91.  
  92. }
  93. }

支付签名 MD5Util 排序工具类的更多相关文章

  1. 小米开源文件管理器MiCodeFileExplorer-源码研究(8)-文件排序工具类FileSortHelper

    FileSortHelper的核心功能就是,对文件集合FileInfo排序.FileInfo有若干字段,根据字段定义了4种比较器Comparator.调用示例:Collections.sort(Lis ...

  2. Java 签名验签工具类

    public class SignatureUtil { private static final String CHARSET = "UTF-8"; private static ...

  3. list自定义排序工具类

    工具类 package sort; import java.lang.reflect.Method; import java.text.Collator; import java.util.Compa ...

  4. Android 开发工具类 35_PatchUtils

    增量更新工具类[https://github.com/cundong/SmartAppUpdates] import java.io.File; import android.app.Activity ...

  5. Guava ---- Ordering排序工具

    使用Guava的排序工具类, 高速实现对象的单变量排序和多变量排序, 让你的开发效率爆炸... import com.google.common.collect.Lists; import com.g ...

  6. java版MD5签名工具类

    package com.net.util; import java.security.MessageDigest; /** * MD5签名工具类 * @author zhangdi * */ publ ...

  7. JAVA Collections工具类sort()排序方法

    主要分析内容: 一.Collections工具类两种sort()方法 二.示例 一.Collections工具类两种sort()方法 格式一: public static <T extends ...

  8. 基于HttpClient 4.3的可訪问自签名HTTPS网站的新版工具类

    本文出处:http://blog.csdn.net/chaijunkun/article/details/40145685,转载请注明.因为本人不定期会整理相关博文,会对相应内容作出完好.因此强烈建议 ...

  9. Lucene第二篇【抽取工具类、索引库优化、分词器、高亮、摘要、排序、多条件搜索】

    对Lucene代码优化 我们再次看回我们上一篇快速入门写过的代码,我来截取一些有代表性的: 以下代码在把数据填充到索引库,和从索引库查询数据的时候,都出现了.是重复代码! Directory dire ...

随机推荐

  1. Codeforces 547C/548E - Mike and Foam 题解

    目录 Codeforces 547C/548E - Mike and Foam 题解 前置芝士 - 容斥原理 题意 想法(口胡) 做法 程序 感谢 Codeforces 547C/548E - Mik ...

  2. Python实现单链表数据的添加、删除、插入操作

    Python实现单链表数据的添加.删除.插入操作 链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结 ...

  3. [考试反思]1113csp-s模拟测试114:一梦

    自闭.不废话.写一下低错. T1:觉得信心赛T1不会很恶心一遍过样例直接没对拍(其实是想写完T2之后回来对拍的) 状态也不好,基本全机房都开始码了我还没想出来(skyh已经开T2了).想了40多分钟. ...

  4. ubuntu 安装谷歌浏览器

    如何在ubuntu 中安装谷歌浏览器, 对于一个刚刚接触ubuntu的人来说,希望安装软件更加的简单,明了.最好能够像在windows下面安装软件一样. 先来介绍一下如何快速的安装谷歌浏览器,以下的方 ...

  5. date:显示与设置系统时间

    功能: date命令用于显示当前的系统时间或设置系统时间 语法格式: date [option] [+format] date [选项] [+日期格式] 参数选项: option 参数选项: -d  ...

  6. Redis实战(一)Redis简介及环境安装(Windows)

    提到Redis,大家肯定都听过,并且应该都在项目中或多或少的使用过,也许你觉得Redis用起来挺简单的呀,但如果有人问你下面的几个问题(比如同事或者面试官),你能回答的上来吗? 什么是Redis? R ...

  7. RabbitMQ与Spring的框架整合之Spring Cloud Stream实战

    1.RabbitMQ与Spring Cloud Stream整合实战.SpringCloud Stream整体结构核心概念图,如下所示: 图示解释:Outputs输出,即消息的发送端.Inputs输入 ...

  8. Android 在Fragment中修改Activity中的控件

    在当前的Fragment中调用getActivity方法获取依附着的那个Activity,然后再用获取到的Activity去findViewById拿到你需要的控件对其操作就行了.

  9. js调用网络摄像头

    不支持IE浏览器(需要使用flash插件), 支持移动端, 未经过完全测试 PC端使用的时候, HTML页面需要预留video标签, canvas标签 移动端使用的时候, HTML页面需要预留file ...

  10. Selenium(十):用By定位元素、鼠标事件、键盘事件

    1. 用By定位元素 除了前面介绍的单位方法,WebDriver还提供了另外一套写法,即统一调用find_element()方法,通过By来声明定位的方法,并且传入对应定位方法的定位参数.具体如下: ...