TtqfDecrypt.java 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package com.ydtech.modules.ttqf;
  2. import cn.hutool.extra.spring.SpringUtil;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.ipaynow.jiaxin.SdkException;
  6. import com.ipaynow.jiaxin.util.AESUtils;
  7. import com.ipaynow.jiaxin.util.RSAUtils;
  8. import com.ipaynow.jiaxin.util.StringUtils;
  9. import lombok.extern.slf4j.Slf4j;
  10. import java.util.HashMap;
  11. import java.util.Map;
  12. @Slf4j
  13. public class TtqfDecrypt {
  14. /**
  15. * 解密通知业务报文
  16. * @param enc
  17. * @return
  18. */
  19. public static String parse(String enc) {
  20. TTFQConfig ttfqConfig = SpringUtil.getBean(TTFQConfig.class);
  21. JSONObject encObj = JSON.parseObject(enc);
  22. //1. 解密AES秘钥
  23. String aes = null;
  24. try {
  25. aes = RSAUtils.decrypt(encObj.getString("aes"), ttfqConfig.getMchPrivateKey());
  26. } catch (Exception e) {
  27. log.error("天天企赋通知-AES秘钥解密错误", e);
  28. throw new SdkException(e);
  29. }
  30. String bizRequest = null;
  31. try {
  32. bizRequest = AESUtils.decrypt(encObj.getString("reqData"), aes);
  33. } catch (Exception e) {
  34. log.error("天天企赋通知-业务报文解密错误", e);
  35. throw new SdkException(e);
  36. }
  37. Map<String, String> rtMap = new HashMap<>();
  38. rtMap.put("reqData", bizRequest);
  39. rtMap.put("mchId", encObj.getString("mchId"));
  40. rtMap.put("reqId", encObj.getString("reqId"));
  41. rtMap.put("reqTime",encObj.getString("reqTime"));
  42. rtMap.put("signType", "RSA");
  43. rtMap.put("aes", aes);
  44. rtMap.put("version", "1.0");
  45. // 8. 构造待验签字符串
  46. String dataForm = StringUtils.buildDataForm(rtMap);
  47. // 9. 签名结果
  48. boolean check = RSAUtils.verifySign(dataForm, encObj.getString("sign"), ttfqConfig.getPlatformPublicKey());
  49. if(check) {
  50. return bizRequest;
  51. } else {
  52. return null;
  53. }
  54. }
  55. }