package com.stylefeng.guns.modular.system.controller.util; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateFormatUtils; import javax.servlet.http.HttpServletRequest; import java.io.UnsupportedEncodingException; import java.util.*; /** * @program: publicpaydemo * @description: 工具类 * @author: Mr.YS * @CreatDate: 2019/5/17/017 13:24 */ public class Util { /** * 获取到订单号 * * @param msgSrcId 消息来源编号 1017 * @return 商户订单号 {来源编号(4位)}{时间(yyyyMMddmmHHssSSS)(17位)}{7位随机数} */ public static String getMerOrderId(String msgSrcId) { return msgSrcId + DateFormatUtils.format(new Date(), "yyyyMMddHHmmssSSS") + RandomStringUtils.randomNumeric(7); } /** * 获取商户订单号 * @return */ public static String getMerchantOrderId() { return DateFormatUtils.format(new Date(), "yyyyMMddHHmmssSSS") + RandomStringUtils.randomNumeric(7); } /** * 获取到退货订单号refundOrderId * * @param msgSrcId 消息来源编号 1017 * @return 商户订单号 {来源编号(4位)}{时间(yyyyMMddmmHHssSSS)(17位)}{7位随机数} */ public static String getRefundOrderId(String msgSrcId) { return msgSrcId + DateFormatUtils.format(new Date(), "yyyyMMddHHmmssSSS") + RandomStringUtils.randomNumeric(7); } // 获取HttpServletRequest里面的参数 public static Map getRequestParams(HttpServletRequest request) { Map params = request.getParameterMap(); Map params2 = new HashMap<>(); for (String key : params.keySet()) { String[] values = params.get(key); if (values.length > 0) { params2.put(key, request.getParameter(key)); } } return params2; } public static String makeSign(String md5Key, Map params) { String preStr = buildSignString(params); // 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 String text = preStr + md5Key; System.out.println("待签名字符串:"+text); return DigestUtils.md5Hex(getContentBytes(text)).toUpperCase(); //return DigestUtils.sha256Hex(getContentBytes(text)).toLowerCase(); } // 构建签名字符串 public static String buildSignString(Map params) { // params.put("Zm","test_test"); if (params == null || params.size() == 0) { return ""; } List keys = new ArrayList<>(params.size()); for (String key : params.keySet()) { if ("sign".equals(key)) continue; if (StringUtils.isEmpty(params.get(key))) continue; keys.add(key); } //System.out.println(listToString(keys)); Collections.sort(keys); StringBuilder buf = new StringBuilder(); for (int i = 0; i < keys.size(); i++) { String key = keys.get(i); String value = params.get(key); if (i == keys.size() - 1) {// 拼接时,不包括最后一个&字符 buf.append(key + "=" + value); } else { buf.append(key + "=" + value + "&"); } } return buf.toString(); } // 根据编码类型获得签名内容byte[] public static byte[] getContentBytes(String content) { try { return content.getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException("签名过程中出现错误"); } } }