MerchantApiUtil.java 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package com.pj.api.jh.utils;
  2. import cn.hutool.core.util.StrUtil;
  3. import cn.hutool.crypto.SecureUtil;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.stereotype.Component;
  6. import java.util.Map;
  7. import java.util.SortedMap;
  8. import java.util.TreeMap;
  9. /**
  10. * Created with IntelliJ IDEA.
  11. *
  12. * @Auther: lzm
  13. */
  14. @Component
  15. @Slf4j
  16. public class MerchantApiUtil {
  17. /**
  18. * 获取参数签名
  19. *
  20. * @param paramMap 签名参数
  21. * @param paySecret 签名密钥
  22. * @return
  23. */
  24. public static String getSign(Map<String, Object> paramMap, String paySecret) {
  25. SortedMap<String, Object> smap = new TreeMap<String, Object>(paramMap);
  26. if (smap.get("sign") != null) {
  27. smap.remove("sign");
  28. }
  29. StringBuilder stringBuffer = new StringBuilder();
  30. for (Map.Entry<String, Object> m : smap.entrySet()) {
  31. Object value = m.getValue();
  32. if (value != null && StrUtil.isNotBlank(String.valueOf(value))) {
  33. stringBuffer.append(m.getKey()).append("=").append(value).append("&");
  34. }
  35. }
  36. stringBuffer.delete(stringBuffer.length() - 1, stringBuffer.length());
  37. String argPreSign = stringBuffer.append("&paySecret=").append(paySecret).toString();
  38. log.info("待签名数据:" + argPreSign);
  39. return SecureUtil.md5(argPreSign).toUpperCase();
  40. }
  41. /**
  42. * 验证商户签名
  43. *
  44. * @param paramMap 签名参数
  45. * @param paySecret 签名私钥
  46. * @param signStr 原始签名密文
  47. * @return
  48. */
  49. public static boolean isRightSign(Map<String, Object> paramMap, String paySecret, String signStr) {
  50. if (StrUtil.isBlank(signStr)) {
  51. return false;
  52. }
  53. String sign = getSign(paramMap, paySecret);
  54. if (signStr.equals(sign)) {
  55. return true;
  56. } else {
  57. return false;
  58. }
  59. }
  60. }