decrypt.java 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package com.ydtech.modules.ttqf;
  2. import com.alibaba.fastjson.JSON;
  3. import com.ipaynow.jiaxin.*;
  4. import com.ipaynow.jiaxin.domain.ResultModel;
  5. import com.ipaynow.jiaxin.util.StringUtils;
  6. import lombok.extern.slf4j.Slf4j;
  7. import java.util.HashMap;
  8. import java.util.Map;
  9. import static com.ipaynow.jiaxin.TangConstants.CODE_SUCCESS;
  10. import static com.ipaynow.jiaxin.TangConstants.SECRET_KEY_ERROR;
  11. @Slf4j
  12. public class decrypt {
  13. private Decryptor decryptor;
  14. private SignChecker signChecker;
  15. public TangResponse aa(String response){
  16. // 返回对象初始化
  17. TangResponse rsp = null;
  18. //解析响应报文
  19. Map responseMap = JSON.parseObject(response, Map.class);
  20. String code = (String) responseMap.get("code");
  21. String msg = (String) responseMap.get("msg");
  22. if(!CODE_SUCCESS.equals(code)) {
  23. rsp.setCode(code);
  24. rsp.setMsg(msg);
  25. return rsp;
  26. }
  27. // 6. 解密AES
  28. String decAES = null;
  29. Decryptor aesDecryptor = null;
  30. try {
  31. decAES = this.decryptor.decrypt((String) responseMap.get("aes"));
  32. aesDecryptor = new AESDecryptor(decAES);
  33. } catch (Exception e) {
  34. log.error("天天企赋API => 秘钥错误,解密失败", e);
  35. rsp.setCode(SECRET_KEY_ERROR);
  36. rsp.setMsg("解密错误");
  37. return rsp;
  38. }
  39. // 7. 解密业务报文
  40. String bizResponse = null;
  41. try {
  42. bizResponse = aesDecryptor.decrypt((String) responseMap.get("respData"));
  43. } catch (Exception e) {
  44. log.error("天天企赋API => 秘钥错误,解密业务报文失败", e);
  45. rsp.setCode(SECRET_KEY_ERROR);
  46. rsp.setMsg("解密响应报文错误");
  47. return rsp;
  48. }
  49. // 8. 构造签名
  50. Map<String, String> rtMap = new HashMap<>();
  51. rtMap.put("respData", bizResponse);
  52. rtMap.put("mchId", (String) responseMap.get("mchId"));
  53. rtMap.put("reqId", (String) responseMap.get("reqId"));
  54. rtMap.put("respTime", (String) responseMap.get("respTime"));
  55. rtMap.put("signType", "RSA");
  56. rtMap.put("aes", decAES);
  57. rtMap.put("version", "1.0");
  58. // 8. 构造待验签字符串
  59. String dataForm1 = StringUtils.buildDataForm(rtMap);
  60. // 9. 签名结果
  61. boolean check = this.signChecker.check(dataForm1, (String) responseMap.get("sign"));
  62. if (check) {
  63. rsp.setCode(code);
  64. rsp.setMsg(msg);
  65. // 解析业务报文
  66. ResultModel rs = null;
  67. try {
  68. rs = (ResultModel) rsp.getResultModelClass().newInstance();
  69. } catch (InstantiationException e) {
  70. throw new SdkException(e);
  71. } catch (IllegalAccessException e) {
  72. throw new SdkException(e);
  73. }
  74. rs = JSON.parseObject(bizResponse, rs.getClass());
  75. rsp.setResultModel(rs);
  76. rsp.setBizCode(rs.getBizCode());
  77. rsp.setBizMsg(rs.getBizMsg());
  78. rsp.setRespData(bizResponse);
  79. return rsp;
  80. } else {
  81. rsp.setCode(SECRET_KEY_ERROR);
  82. rsp.setMsg("签名错误");
  83. return rsp;
  84. }
  85. }
  86. }