diff --git a/jianshui-common/src/main/java/com/jianshui/common/enums/ErrorCode.java b/jianshui-common/src/main/java/com/jianshui/common/enums/ErrorCode.java index f63c4d1..97a6cbc 100644 --- a/jianshui-common/src/main/java/com/jianshui/common/enums/ErrorCode.java +++ b/jianshui-common/src/main/java/com/jianshui/common/enums/ErrorCode.java @@ -50,6 +50,8 @@ public enum ErrorCode { /****************** 进行incoime错误 *****************/ INCOME_ERROR("200000", "进项错误"), + INCOME_KEY_ERROR("200001", "检查系统配置 key/app secret,请联系管理员!"), + /****************** 支付pay错误 *****************/ PAY_ERROR("300000", "支付错误"), diff --git a/jianshui-income/src/main/java/com/jianshui/income/service/impl/EleAuthInvoiceImpl.java b/jianshui-income/src/main/java/com/jianshui/income/service/impl/EleAuthInvoiceImpl.java index f1b64e9..6a2a6fc 100644 --- a/jianshui-income/src/main/java/com/jianshui/income/service/impl/EleAuthInvoiceImpl.java +++ b/jianshui-income/src/main/java/com/jianshui/income/service/impl/EleAuthInvoiceImpl.java @@ -121,6 +121,9 @@ public class EleAuthInvoiceImpl implements IAuthInvoice { } catch (Exception e) { e.printStackTrace(); log.error("【进项服务类】【大象】【状态采集】API请求异常,大象外部报文返回code非0000。错误信息:{}", e.getMessage()); + if(e.getMessage().indexOf("secret") != -1){ + return AjaxResult.error(ErrorCode.INCOME_KEY_ERROR); + } return AjaxResult.error(ErrorCode.INCOME_ERROR); } try { @@ -287,6 +290,9 @@ public class EleAuthInvoiceImpl implements IAuthInvoice { } catch (Exception e) { e.printStackTrace(); log.error("【进项服务类】【大象】【申请认证】API请求异常,大象外部报文返回code非0000。错误信息:{}", e.getMessage()); + if(e.getMessage().indexOf("secret") != -1){ + return AjaxResult.error(ErrorCode.INCOME_KEY_ERROR); + } return AjaxResult.error(ErrorCode.INCOME_ERROR); } //返回解析 @@ -374,6 +380,9 @@ public class EleAuthInvoiceImpl implements IAuthInvoice { } catch (Exception e) { e.printStackTrace(); log.error("【进项服务类】【大象】【发票认证查询】API请求异常,大象外部报文返回code非0000。错误信息:{}", e.getMessage()); + if(e.getMessage().indexOf("secret") != -1){ + return AjaxResult.error(ErrorCode.INCOME_KEY_ERROR); + } return AjaxResult.error(ErrorCode.INCOME_ERROR); } //返回解析 @@ -493,6 +502,9 @@ public class EleAuthInvoiceImpl implements IAuthInvoice { } catch (Exception e) { e.printStackTrace(); log.error("【进项服务类】【大象】【申请确认】API请求异常,大象外部报文返回code非0000。错误信息:{}", e.getMessage()); + if(e.getMessage().indexOf("secret") != -1){ + return AjaxResult.error(ErrorCode.INCOME_KEY_ERROR); + } return AjaxResult.error(ErrorCode.INCOME_ERROR); } @@ -604,6 +616,9 @@ public class EleAuthInvoiceImpl implements IAuthInvoice { } catch (Exception e) { e.printStackTrace(); log.error("【进项服务类】【大象】【获取确认结果】API请求异常,大象外部报文返回code非0000。错误信息:{}", e.getMessage()); + if(e.getMessage().indexOf("secret") != -1){ + return AjaxResult.error(ErrorCode.INCOME_KEY_ERROR); + } return AjaxResult.error(ErrorCode.INCOME_ERROR); } //返回解析 @@ -731,6 +746,9 @@ public class EleAuthInvoiceImpl implements IAuthInvoice { } catch (Exception e) { e.printStackTrace(); log.error("【进项服务类】【大象】【获取企业档案】API请求异常,大象外部报文返回code非0000。错误信息:{}", e.getMessage()); + if(e.getMessage().indexOf("secret") != -1){ + return AjaxResult.error(ErrorCode.INCOME_KEY_ERROR); + } return AjaxResult.error(ErrorCode.INCOME_ERROR); } @@ -790,6 +808,9 @@ public class EleAuthInvoiceImpl implements IAuthInvoice { } catch (Exception e) { e.printStackTrace(); log.error("【进项服务类】【大象】【重置密码】API请求异常,大象外部报文返回code非0000。错误信息:{}", e.getMessage()); + if(e.getMessage().indexOf("secret") != -1){ + return AjaxResult.error(ErrorCode.INCOME_KEY_ERROR); + } return AjaxResult.error(ErrorCode.INCOME_ERROR); } @@ -836,6 +857,9 @@ public class EleAuthInvoiceImpl implements IAuthInvoice { } catch (Exception e) { e.printStackTrace(); log.error("【进项服务类】【大象】【设置密码】API请求异常,大象外部报文返回code非0000。错误信息:{}", e.getMessage()); + if(e.getMessage().indexOf("secret") != -1){ + return AjaxResult.error(ErrorCode.INCOME_KEY_ERROR); + } return AjaxResult.error(ErrorCode.INCOME_ERROR); } SetPasswordVO setPasswordVO = BeanUtil.copyProperties(resp, SetPasswordVO.class); @@ -914,6 +938,9 @@ public class EleAuthInvoiceImpl implements IAuthInvoice { e.printStackTrace(); // 大象请求异常 log.error("【进项服务类】【大象】【全票面采集】API请求异常,大象外部报文返回code非0000。错误信息:{}", e.getMessage()); + if(e.getMessage().indexOf("secret") != -1){ + return AjaxResult.error(ErrorCode.INCOME_KEY_ERROR); + } return AjaxResult.error(ErrorCode.INCOME_ERROR); } @@ -1071,6 +1098,9 @@ public class EleAuthInvoiceImpl implements IAuthInvoice { } catch (Exception e) { e.printStackTrace(); log.error("【进项服务类】【大象】【主信息采集】API请求异常,大象外部报文返回code非0000。错误信息:{}", e.getMessage()); + if(e.getMessage().indexOf("secret") != -1){ + return AjaxResult.error(ErrorCode.INCOME_KEY_ERROR); + } return AjaxResult.error(ErrorCode.INCOME_ERROR); } //返回解析 @@ -1163,6 +1193,9 @@ public class EleAuthInvoiceImpl implements IAuthInvoice { } catch (Exception e) { e.printStackTrace(); log.error("【进项服务类】【大象】【获取统计信息】API请求异常,大象外部报文返回code非0000。错误信息:{}", e.getMessage()); + if(e.getMessage().indexOf("secret") != -1){ + return AjaxResult.error(ErrorCode.INCOME_KEY_ERROR); + } return AjaxResult.error(ErrorCode.INCOME_ERROR); } //返回解析 @@ -1280,6 +1313,9 @@ public class EleAuthInvoiceImpl implements IAuthInvoice { } catch (Exception e) { e.printStackTrace(); log.error("【进项服务类】【大象】【申请统计】API请求异常,大象外部报文返回code非0000。错误信息:{}", e.getMessage()); + if(e.getMessage().indexOf("secret") != -1){ + return AjaxResult.error(ErrorCode.INCOME_KEY_ERROR); + } return AjaxResult.error(ErrorCode.INCOME_ERROR); } @@ -1384,6 +1420,9 @@ public class EleAuthInvoiceImpl implements IAuthInvoice { } catch (Exception e) { e.printStackTrace(); log.error("【进项服务类】【大象】【获取统计结果】API请求异常,大象外部报文返回code非0000。错误信息:{}", e.getMessage()); + if(e.getMessage().indexOf("secret") != -1){ + return AjaxResult.error(ErrorCode.INCOME_KEY_ERROR); + } return AjaxResult.error(ErrorCode.INCOME_ERROR); } @@ -1580,6 +1619,9 @@ public class EleAuthInvoiceImpl implements IAuthInvoice { } catch (Exception e) { e.printStackTrace(); log.error("【进项服务类】【大象】【状态采集】API请求异常,大象外部报文返回code非0000。错误信息:{}", e.getMessage()); + if(e.getMessage().indexOf("secret") != -1){ + return AjaxResult.error(ErrorCode.INCOME_KEY_ERROR); + } return AjaxResult.error(ErrorCode.INCOME_ERROR); } if (resp.getString("ZTDM").equals("0000")) { diff --git a/jianshui-income/src/main/java/com/jianshui/income/service/impl/adapter/request/ElephentIncomeAuthRequestAdapterImpl.java b/jianshui-income/src/main/java/com/jianshui/income/service/impl/adapter/request/ElephentIncomeAuthRequestAdapterImpl.java index 746db60..201eb55 100644 --- a/jianshui-income/src/main/java/com/jianshui/income/service/impl/adapter/request/ElephentIncomeAuthRequestAdapterImpl.java +++ b/jianshui-income/src/main/java/com/jianshui/income/service/impl/adapter/request/ElephentIncomeAuthRequestAdapterImpl.java @@ -77,7 +77,7 @@ public class ElephentIncomeAuthRequestAdapterImpl implements IIncomeRequestServi throw new JianshuiParamErrorException(ErrorCode.DECRYPT_ERROR, companyservice, "income"); } - log.info("查验报文:identity=" + identity + ",order=" + order); + log.info("【进项】认证报文:identity=" + identity + ",order=" + order); // 报文内容体 JSONObject json; diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/adapter/request/AisinoInvoiceRequestAdapterImpl.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/adapter/request/AisinoInvoiceRequestAdapterImpl.java index 69504ac..95bffaa 100644 --- a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/adapter/request/AisinoInvoiceRequestAdapterImpl.java +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/adapter/request/AisinoInvoiceRequestAdapterImpl.java @@ -103,7 +103,7 @@ public class AisinoInvoiceRequestAdapterImpl implements IInvoiceRequestService { // 平台解密 try { // TODO: 2023/9/20 - order = AisinoInvoiceDecryptUtil.decrypt(order, JKey); +// order = AisinoInvoiceDecryptUtil.decrypt(order, JKey); } catch (Exception e) { e.printStackTrace(); throw new JianshuiParamErrorException(ErrorCode.DECRYPT_ERROR, companyservice, "invoice"); diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiServiceImpl.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiServiceImpl.java index 45d3451..5e78420 100644 --- a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiServiceImpl.java +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiServiceImpl.java @@ -8,8 +8,15 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.dxyun.invoice.constant.StatusConstants; +import com.dxyun.invoice.exception.BadRequestException; +import com.dxyun.invoice.protocol.InterfaceData; +import com.dxyun.invoice.protocol.ProtocolUtil; +import com.dxyun.invoice.protocol.exception.ProtocolException; +import com.dxyun.invoice.util.InterfaceDataUtil; import com.jianshui.common.core.domain.AjaxResult; import com.jianshui.common.core.domain.entity.Companyservice; import com.jianshui.common.enums.ErrorCode; @@ -1205,21 +1212,47 @@ public class AisinoConsoleInvoiceApiServiceImpl implements IInvoiceApiService { * @return */ public String exportVehicleInvoice(VehicleInvoiceExpBo vehicleInvoiceExpBo) { - //1.调用税控获取终端代码 - String terminalCode = getTerminalCode(vehicleInvoiceExpBo.getNsrsbh(), vehicleInvoiceExpBo.getEntId()); + //1.调用税控获取终端代码(简税固定为 金税盘 ) + // `sksb_code`税控设备说明 + // ( + // 000:未配置;001:金税盘托管;002:金税盘A9托管; + // 004:税控盘托管;005:百望服务器;006:本地税控盘; + // 007:本地金税盘;008:百望服务器ActiveX; + // 009:税控服务器;010:UKey托管;011:本地UKey; + // 012:金税盘U180托管;013:UkeyU180托管; + // 014:UT000/Q30;015:本地51云组件 + // )', + String terminalCode = "007"; + // TODO: 2023/10/9 机动车加密大象这里代码是混淆的,带看一下他是怎么调用的,哪里有用到这个 - /* String requestUrl = invoiceConfig.configVehicleInvoiceExp(); - VehicleInvoiceExpResponse response = HttpInvoiceRequestUtil.vehicleInvoiceExp(requestUrl, vehicleInvoiceExpBo, terminalCode); - log.info("机动车导出加密数据 税控底层返回结果:" + JSONUtil.toJsonStr(response)); - if (Objects.isNull(response)) { - log.error("机动车加密数据导出税控返回结果为空!"); - } else { - if (!response.getCode().equals(ConfigureConstant.STRING_0000)) { - log.error("机动车加密数据导出错误:" + response.getMsg()); + + /*try { + InterfaceData interfaceData = InterfaceDataUtil.requestInterfaceData(req, apiVersion, true, minProtocolVersion); + + if (!StatusConstants.REQUEST_SUCCESS.getCODE().equals(interfaceData.getReturnCode())) { + return interfaceData; } + InterfaceData jg = taxInvoiceFactory.getQueryInfoHandler(TaxTypeEnum.getTaxType(interfaceData.getMachineType())).vehicleInvoiceExp(interfaceData); + return ProtocolUtil.packageProtocol(InterfaceDataUtil.replaceInterfaceData(interfaceData, jg)); + } catch (JSONException jsonException) { + log.error(jsonException.getMessage(), jsonException); + return InterfaceDataUtil.error("9999", "参数解析异常"); + } catch (BadRequestException badReq) { + log.error(badReq.getMessage(), badReq); + return InterfaceDataUtil.error("9999", badReq.getMessage()); + } catch (ProtocolException protocolException) { + log.error(protocolException.getMessage(), protocolException); + return InterfaceDataUtil.error("9999", protocolException.getMessage()); + } catch (Exception e) { + log.error(e.getMessage(), e); + return InterfaceDataUtil.error("9999", "验签失败发票查询发生异常"); } + + return response.getVEHICLEINVOICEBUFF();*/ + + return null; } @@ -1248,7 +1281,7 @@ public class AisinoConsoleInvoiceApiServiceImpl implements IInvoiceApiService { public TaxEquipmentInfo queryTaxEquipment(String nsrsbh, String entId) { TaxEquipmentInfo taxEquipmentInfo = null; - /*try { + /* try { //调用基础服务获取税控设备,基础服务封装了真实的entId String configQueryTaxEquipmentUrl = baseServiceConfig.configQueryTaxEquipmentUrl(); PageQueryTaxEquipmentReq pageQueryTaxEquipmentReq = new PageQueryTaxEquipmentReq(); diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/IncomeTest.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/IncomeTest.java index 2724ca2..67c97e9 100644 --- a/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/IncomeTest.java +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/IncomeTest.java @@ -24,7 +24,8 @@ public class IncomeTest { // String key = "LTEO+oOgWMsuQAOUglqXuQ=="; // 1204 // String key = "PzRRv8Gk4LBBWSzE7ZlUzg=="; // 1223 大象进项测试 // String key = "FIQKraT+UheC1GqQtgDM6g=="; // 1205 - String key = "uIawjnF+dXZa60h8cyI/MA=="; // 1483 +// String key = "uIawjnF+dXZa60h8cyI/MA=="; // 1483 + String key = "10OOM+SR3PT3WFRMTlzU9g=="; // 1512 // String key = "zE9+TICzsrejfujj/BXjCQ=="; // 1206 System.out.println("-------------------单个发票查验-----------------------------"); @@ -62,7 +63,7 @@ public class IncomeTest { System.out.println("------------------------进项-认证-------------------------------------"); System.out.println("-------------------企业档案查询-----------------------------"); - order = "{\"SBH\":\"91370181MA3UQT3180\",\"taxNo\":\"91370181MA3UQT3180\"}"; + order = "{\"SBH\":\"1403016L1NN5336\",\"taxNo\":\"1403016L1NN5336\"}"; m = AisinoInvoiceDecryptUtil.encrypt(order, key); System.out.println("json : \n" + order); System.out.println(m); diff --git a/jianshui-invoice/src/main/lib/invoice-common-6.0.1.jar b/jianshui-invoice/src/main/lib/invoice-common-6.0.1.jar new file mode 100644 index 0000000..a3b94a8 Binary files /dev/null and b/jianshui-invoice/src/main/lib/invoice-common-6.0.1.jar differ diff --git a/jianshui-invoice/src/main/lib/invoice-sdk-1.2.10.jar b/jianshui-invoice/src/main/lib/invoice-sdk-1.2.10.jar new file mode 100644 index 0000000..eb2f5db Binary files /dev/null and b/jianshui-invoice/src/main/lib/invoice-sdk-1.2.10.jar differ diff --git a/jianshui-invoice/src/main/resources/mapper/invoice/BillInfoMapper.xml b/jianshui-invoice/src/main/resources/mapper/invoice/BillInfoMapper.xml index a4e35a9..f514bbb 100644 --- a/jianshui-invoice/src/main/resources/mapper/invoice/BillInfoMapper.xml +++ b/jianshui-invoice/src/main/resources/mapper/invoice/BillInfoMapper.xml @@ -475,6 +475,7 @@ left join bill_detail b on b.bill_info_id = a.id where a.company_id = #{companyId} and a.out_trade_orderno = #{out_trade_orderno} + limit 1