ParamVerifyBean.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. package gateway.processor;
  2. import com.yihu.hos.core.datatype.StringUtil;
  3. import com.yihu.hos.core.encrypt.MD5;
  4. import java.net.URLEncoder;
  5. import java.text.SimpleDateFormat;
  6. import java.util.Date;
  7. import java.util.Iterator;
  8. import java.util.Map;
  9. import java.util.TreeMap;
  10. /**
  11. * @author HZY
  12. * @vsrsion 1.0
  13. * Created at 2017/3/15.
  14. */
  15. public class ParamVerifyBean {
  16. private final String version = "1.0";
  17. private TreeMap<String, String> paramMap = new TreeMap<>();
  18. private String timestamp;
  19. //TODO 配置文件中配置
  20. private String gatewayUrl = "seb-gatewayUrl";
  21. private String api;
  22. private String appKey = "esb-key";
  23. private String appSecret = "esb-secret";
  24. private String token;
  25. public void setToken(String token) {
  26. this.token = token;
  27. }
  28. public void setApi(String api) {
  29. this.api = api;
  30. }
  31. public void setGatewayUrl(String gatewayUrl) {
  32. this.gatewayUrl = gatewayUrl;
  33. }
  34. /**
  35. * TODO 无用可删除
  36. * 获取完整请求地址
  37. * @return
  38. */
  39. private String completeUrl() {
  40. try {
  41. addParam("api", api, true);
  42. addParam("param", genParam(), false);
  43. addParam("appKey", appKey, true);
  44. addParam("token", token, false);
  45. addParam("v", version, true);
  46. addParam("timestamp", getTimestamp(), false);
  47. addParam("sign", signParam(), true);
  48. String completeUrl = gatewayUrl + genParam();
  49. return completeUrl;
  50. } catch (Exception e) {
  51. e.printStackTrace();
  52. }
  53. return null;
  54. }
  55. private void addParam(String paramName, String paramValue, boolean bMust) throws Exception {
  56. if (StringUtil.isEmpty(paramValue)) {
  57. if (bMust) {
  58. throw new Exception(paramName + "参数不能为空.");
  59. } else {
  60. return;
  61. }
  62. }
  63. String encodeValue = URLEncoder.encode(paramValue, "UTF-8");
  64. paramMap.put(paramName, encodeValue);
  65. }
  66. public void addParam(Map<String,String> params) throws Exception {
  67. if (params !=null) {
  68. params.remove("sign");
  69. Iterator<Map.Entry<String, String>> iterator = params.entrySet().iterator();
  70. while (iterator.hasNext()) {
  71. Map.Entry<String, String> next = iterator.next();
  72. String key = next.getKey();
  73. String value = next.getValue();
  74. String encodeValue = URLEncoder.encode(value, "UTF-8");
  75. paramMap.put(key, encodeValue);
  76. }
  77. }else {
  78. return;
  79. }
  80. }
  81. /**
  82. * sign 签名生成 ( md5(secret + params拼接字符串 + secret) )
  83. * @return
  84. */
  85. public String signParam() {
  86. Iterator<Map.Entry<String, String>> iterator = paramMap.entrySet().iterator();
  87. StringBuilder builder = new StringBuilder();
  88. builder.append(appSecret);
  89. while (iterator.hasNext()) {
  90. Map.Entry<String, String> next = iterator.next();
  91. String key = next.getKey();
  92. String value = next.getValue();
  93. builder.append(key);
  94. builder.append(value);
  95. }
  96. builder.append(appSecret);
  97. try {
  98. return MD5.hash(builder.toString());
  99. } catch (Exception e) {
  100. e.printStackTrace();
  101. }
  102. return null;
  103. }
  104. /**
  105. * http请求 参数拼接
  106. * @return
  107. * @throws Exception
  108. */
  109. public String genParam() throws Exception {
  110. Iterator<Map.Entry<String, String>> iterator = paramMap.entrySet().iterator();
  111. StringBuilder builder = new StringBuilder();
  112. while (iterator.hasNext()) {
  113. Map.Entry<String, String> next = iterator.next();
  114. String key = next.getKey();
  115. String value = next.getValue();
  116. if (value == null) {
  117. throw new Exception("参数错误:参数" + key + "值为空.");
  118. }
  119. if (builder.length() == 0) {
  120. builder.append("?");
  121. } else {
  122. builder.append("&");
  123. }
  124. builder.append(key);
  125. builder.append("=");
  126. builder.append(URLEncoder.encode(value, "UTF-8"));
  127. }
  128. return builder.toString();
  129. }
  130. //TODO 获取应用token
  131. public String getToken() {
  132. return null;
  133. }
  134. /**
  135. * 获取 ISO 8601格式的时间戳
  136. * @return
  137. */
  138. private String getTimestamp() {
  139. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SSZ");
  140. timestamp = format.format(new Date());
  141. return timestamp;
  142. }
  143. public static void main(String[] args) throws Exception {
  144. ParamVerifyBean paramSignUtil = new ParamVerifyBean();
  145. paramSignUtil.setApi("collect");
  146. paramSignUtil.addParam("patientId","11111",true);
  147. paramSignUtil.addParam("eventNo","2222222",true);
  148. paramSignUtil.genParam();
  149. String s = paramSignUtil.signParam();
  150. System.out.println(s);
  151. }
  152. }