package com.ydtech.modules.ttqf; import com.alibaba.fastjson.JSON; import com.ipaynow.jiaxin.*; import com.ipaynow.jiaxin.domain.ResultModel; import com.ipaynow.jiaxin.util.StringUtils; import lombok.extern.slf4j.Slf4j; import java.util.HashMap; import java.util.Map; import static com.ipaynow.jiaxin.TangConstants.CODE_SUCCESS; import static com.ipaynow.jiaxin.TangConstants.SECRET_KEY_ERROR; @Slf4j public class decrypt { private Decryptor decryptor; private SignChecker signChecker; public TangResponse aa(String response){ // 返回对象初始化 TangResponse rsp = null; //解析响应报文 Map responseMap = JSON.parseObject(response, Map.class); String code = (String) responseMap.get("code"); String msg = (String) responseMap.get("msg"); if(!CODE_SUCCESS.equals(code)) { rsp.setCode(code); rsp.setMsg(msg); return rsp; } // 6. 解密AES String decAES = null; Decryptor aesDecryptor = null; try { decAES = this.decryptor.decrypt((String) responseMap.get("aes")); aesDecryptor = new AESDecryptor(decAES); } catch (Exception e) { log.error("天天企赋API => 秘钥错误,解密失败", e); rsp.setCode(SECRET_KEY_ERROR); rsp.setMsg("解密错误"); return rsp; } // 7. 解密业务报文 String bizResponse = null; try { bizResponse = aesDecryptor.decrypt((String) responseMap.get("respData")); } catch (Exception e) { log.error("天天企赋API => 秘钥错误,解密业务报文失败", e); rsp.setCode(SECRET_KEY_ERROR); rsp.setMsg("解密响应报文错误"); return rsp; } // 8. 构造签名 Map rtMap = new HashMap<>(); rtMap.put("respData", bizResponse); rtMap.put("mchId", (String) responseMap.get("mchId")); rtMap.put("reqId", (String) responseMap.get("reqId")); rtMap.put("respTime", (String) responseMap.get("respTime")); rtMap.put("signType", "RSA"); rtMap.put("aes", decAES); rtMap.put("version", "1.0"); // 8. 构造待验签字符串 String dataForm1 = StringUtils.buildDataForm(rtMap); // 9. 签名结果 boolean check = this.signChecker.check(dataForm1, (String) responseMap.get("sign")); if (check) { rsp.setCode(code); rsp.setMsg(msg); // 解析业务报文 ResultModel rs = null; try { rs = (ResultModel) rsp.getResultModelClass().newInstance(); } catch (InstantiationException e) { throw new SdkException(e); } catch (IllegalAccessException e) { throw new SdkException(e); } rs = JSON.parseObject(bizResponse, rs.getClass()); rsp.setResultModel(rs); rsp.setBizCode(rs.getBizCode()); rsp.setBizMsg(rs.getBizMsg()); rsp.setRespData(bizResponse); return rsp; } else { rsp.setCode(SECRET_KEY_ERROR); rsp.setMsg("签名错误"); return rsp; } } }