PayCommonUtil.java 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. package cn.efunbox.base.util;
  2. import com.alibaba.fastjson.JSONObject;
  3. import javax.net.ssl.HttpsURLConnection;
  4. import javax.net.ssl.SSLContext;
  5. import javax.net.ssl.SSLSocketFactory;
  6. import javax.net.ssl.TrustManager;
  7. import java.io.*;
  8. import java.net.ConnectException;
  9. import java.net.URL;
  10. import java.util.*;
  11. public class PayCommonUtil {
  12. public static String CreateNoncestr(int length) {
  13. String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  14. String res = "";
  15. for (int i = 0; i < length; i++) {
  16. Random rd = new Random();
  17. res += chars.indexOf(rd.nextInt(chars.length() - 1));
  18. }
  19. return res;
  20. }
  21. public static String CreateNoncestr() {
  22. String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  23. String res = "";
  24. for (int i = 0; i < 16; i++) {
  25. Random rd = new Random();
  26. res += chars.charAt(rd.nextInt(chars.length() - 1));
  27. }
  28. return res;
  29. }
  30. /**
  31. * 是否签名正确,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。
  32. * @return boolean
  33. */
  34. public static boolean isTenpaySign(SortedMap<Object, Object> packageParams,String signKey) {
  35. StringBuffer sb = new StringBuffer();
  36. Set es = packageParams.entrySet();
  37. Iterator it = es.iterator();
  38. while(it.hasNext()) {
  39. Map.Entry entry = (Map.Entry)it.next();
  40. String k = (String)entry.getKey();
  41. String v = (String)entry.getValue();
  42. if(!"sign".equals(k) && null != v && !"".equals(v)) {
  43. sb.append(k + "=" + v + "&");
  44. }
  45. }
  46. sb.append("key=" + signKey);
  47. //算出摘要
  48. String mysign = MD5.MD5Encode(sb.toString()).toLowerCase();
  49. String tenpaySign = ((String)packageParams.get("sign")).toLowerCase();
  50. //System.out.println(tenpaySign + " " + mysign);
  51. return tenpaySign.equals(mysign);
  52. }
  53. /**
  54. * @Description:sign签名
  55. * @param parameters 请求参数
  56. * @return
  57. */
  58. public static String createSign(SortedMap<String,String> parameters,String signKey){
  59. StringBuffer sb = new StringBuffer();
  60. Set es = parameters.entrySet();
  61. Iterator it = es.iterator();
  62. while(it.hasNext()) {
  63. Map.Entry<String,String> entry = (Map.Entry)it.next();
  64. String k = entry.getKey();
  65. String v = entry.getValue();
  66. if(null != v && !"".equals(v)
  67. && !"sign".equals(k) && !"key".equals(k)) {
  68. sb.append(k + "=" + v + "&");
  69. }
  70. }
  71. sb.append("key="+signKey);
  72. String sign = MD5.MD5Encode(sb.toString()).toUpperCase();
  73. return sign;
  74. }
  75. /**
  76. * @Description:将请求参数转换为xml格式的string
  77. * @param parameters 请求参数
  78. * @return
  79. */
  80. public static String getRequestXml(SortedMap<String,String> parameters){
  81. StringBuffer sb = new StringBuffer();
  82. sb.append("<xml>");
  83. Set es = parameters.entrySet();
  84. Iterator it = es.iterator();
  85. while(it.hasNext()) {
  86. Map.Entry<String,String> entry = (Map.Entry)it.next();
  87. String k = entry.getKey();
  88. String v = entry.getValue();
  89. if ("attach".equalsIgnoreCase(k)||"body".equalsIgnoreCase(k)) {
  90. sb.append("<"+k+">"+"<![CDATA["+v+"]]></"+k+">");
  91. }else {
  92. sb.append("<"+k+">"+v+"</"+k+">");
  93. }
  94. }
  95. sb.append("</xml>");
  96. return sb.toString();
  97. }
  98. /**
  99. * @Description:返回给微信的参数
  100. * @param return_code 返回编码
  101. * @param return_msg 返回信息
  102. * @return
  103. */
  104. public static String setXML(String return_code, String return_msg) {
  105. return "<xml><return_code><![CDATA[" + return_code
  106. + "]]></return_code><return_msg><![CDATA[" + return_msg
  107. + "]]></return_msg></xml>";
  108. }
  109. /**
  110. * 发送https请求
  111. * @param requestUrl 请求地址
  112. * @param requestMethod 请求方式(GET、POST)
  113. * @param outputStr 提交的数据
  114. * @return 返回微信服务器响应的信息
  115. */
  116. public static String httpsRequest(String requestUrl, String requestMethod, String outputStr) {
  117. try {
  118. // 创建SSLContext对象,并使用我们指定的信任管理器初始化
  119. TrustManager[] tm = { new MyX509TrustManager() };
  120. SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
  121. sslContext.init(null, tm, new java.security.SecureRandom());
  122. // 从上述SSLContext对象中得到SSLSocketFactory对象
  123. SSLSocketFactory ssf = sslContext.getSocketFactory();
  124. URL url = new URL(requestUrl);
  125. HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
  126. //conn.setSSLSocketFactory(ssf);
  127. conn.setDoOutput(true);
  128. conn.setDoInput(true);
  129. conn.setUseCaches(false);
  130. // 设置请求方式(GET/POST)
  131. conn.setRequestMethod(requestMethod);
  132. conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
  133. // 当outputStr不为null时向输出流写数据
  134. if (null != outputStr) {
  135. OutputStream outputStream = conn.getOutputStream();
  136. // 注意编码格式
  137. outputStream.write(outputStr.getBytes("UTF-8"));
  138. outputStream.close();
  139. }
  140. // 从输入流读取返回内容
  141. InputStream inputStream = conn.getInputStream();
  142. InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
  143. BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
  144. String str = null;
  145. StringBuffer buffer = new StringBuffer();
  146. while ((str = bufferedReader.readLine()) != null) {
  147. buffer.append(str);
  148. }
  149. // 释放资源
  150. bufferedReader.close();
  151. inputStreamReader.close();
  152. inputStream.close();
  153. inputStream = null;
  154. conn.disconnect();
  155. return buffer.toString();
  156. } catch (ConnectException ce) {
  157. // log.error("连接超时:{}", ce);
  158. } catch (Exception e) {
  159. // log.error("https请求异常:{}", e);
  160. }
  161. return null;
  162. }
  163. /**
  164. * 发送https请求
  165. *
  166. * @param requestUrl 请求地址
  167. * @param requestMethod 请求方式(GET、POST)
  168. * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
  169. */
  170. public static JSONObject httpsRequest(String requestUrl, String requestMethod) {
  171. JSONObject jsonObject = null;
  172. try {
  173. // 创建SSLContext对象,并使用我们指定的信任管理器初始化
  174. TrustManager[] tm = { new MyX509TrustManager() };
  175. SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
  176. sslContext.init(null, tm, new java.security.SecureRandom());
  177. // 从上述SSLContext对象中得到SSLSocketFactory对象
  178. SSLSocketFactory ssf = sslContext.getSocketFactory();
  179. URL url = new URL(requestUrl);
  180. HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
  181. //conn.setSSLSocketFactory(ssf);
  182. conn.setDoOutput(true);
  183. conn.setDoInput(true);
  184. conn.setUseCaches(false);
  185. conn.setConnectTimeout(3000);
  186. // 设置请求方式(GET/POST)
  187. conn.setRequestMethod(requestMethod);
  188. //conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
  189. // 当outputStr不为null时向输出流写数据
  190. // 从输入流读取返回内容
  191. InputStream inputStream = conn.getInputStream();
  192. InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
  193. BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
  194. String str = null;
  195. StringBuffer buffer = new StringBuffer();
  196. while ((str = bufferedReader.readLine()) != null) {
  197. buffer.append(str);
  198. }
  199. // 释放资源
  200. bufferedReader.close();
  201. inputStreamReader.close();
  202. inputStream.close();
  203. inputStream = null;
  204. conn.disconnect();
  205. jsonObject = JSONObject.parseObject(buffer.toString());
  206. } catch (ConnectException ce) {
  207. // log.error("连接超时:{}", ce);
  208. } catch (Exception e) {
  209. System.out.println(e);
  210. // log.error("https请求异常:{}", e);
  211. }
  212. return jsonObject;
  213. }
  214. public static String urlEncodeUTF8(String source){
  215. String result = source;
  216. try {
  217. result = java.net.URLEncoder.encode(source,"utf-8");
  218. } catch (UnsupportedEncodingException e) {
  219. e.printStackTrace();
  220. }
  221. return result;
  222. }
  223. }