package com.pj.api.jh.utils; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; /** * Created with IntelliJ IDEA. * * @Auther: lzm */ @Component @Slf4j public class MerchantApiUtil { /** * 获取参数签名 * * @param paramMap 签名参数 * @param paySecret 签名密钥 * @return */ public static String getSign(Map paramMap, String paySecret) { SortedMap smap = new TreeMap(paramMap); if (smap.get("sign") != null) { smap.remove("sign"); } StringBuilder stringBuffer = new StringBuilder(); for (Map.Entry m : smap.entrySet()) { Object value = m.getValue(); if (value != null && StrUtil.isNotBlank(String.valueOf(value))) { stringBuffer.append(m.getKey()).append("=").append(value).append("&"); } } stringBuffer.delete(stringBuffer.length() - 1, stringBuffer.length()); String argPreSign = stringBuffer.append("&paySecret=").append(paySecret).toString(); log.info("待签名数据:" + argPreSign); return SecureUtil.md5(argPreSign).toUpperCase(); } /** * 验证商户签名 * * @param paramMap 签名参数 * @param paySecret 签名私钥 * @param signStr 原始签名密文 * @return */ public static boolean isRightSign(Map paramMap, String paySecret, String signStr) { if (StrUtil.isBlank(signStr)) { return false; } String sign = getSign(paramMap, paySecret); if (signStr.equals(sign)) { return true; } else { return false; } } }