| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- 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<String, String> 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;
- }
- }
- }
|