From 23d319cb18f712d083bfdf766bd3816718a89095 Mon Sep 17 00:00:00 2001 From: Xia Kaixiang Date: Wed, 17 Jun 2020 15:23:24 +0800 Subject: [PATCH] =?utf8?q?=E9=93=B6=E8=A1=8C=E5=89=8D=E7=BD=AE=E6=96=B0?= =?utf8?q?=E5=A2=9E=E5=AF=B9=E8=B4=A6=E7=A1=AE=E8=AE=A4=E6=8E=A5=E5=8F=A3?= =?utf8?q?=E5=92=8C=E5=8F=A3=E6=8C=82=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../com/supwisdom/agent/Util/DlpayUtil.java | 3 + .../supwisdom/agent/api/bean/DlpayReq.java | 65 +++++++++++ .../api/controller/YnrccApiController.java | 103 ++++++++++++++++++ .../api/service/YnrccParamCheckService.java | 5 + .../api/service/impl/YnrccApiServiceImpl.java | 8 ++ .../impl/YnrccParamCheckServiceImpl.java | 56 ++++++++++ 6 files changed, 240 insertions(+) diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java index c54c0a1d..2f2af64e 100644 --- a/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java +++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java @@ -19,6 +19,9 @@ public class DlpayUtil { public static final String OPTYPE_PAYREFUND = "payrefund"; //消费退款 public static final String OPTYPE_QUERYRESULT = "queryresult"; //消费结果查询 public static final String OPTYPE_CHKDTL = "chkdtl"; //流水对账 + public static final String OPTYPE_CHK_MAKESURE = "chkmakesure"; //流水对账 + public static final String OPTYPE_BANKCARD_LOSS = "bankcardloss"; //流水对账 + public static final String TRANSTYPE_SIGNCARD = "1"; //签约 diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java index bc5954fa..c1b8ca5c 100644 --- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java +++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java @@ -38,6 +38,10 @@ public class DlpayReq { private String captcha; //签约验证码 private String scenario;//消费场景 + private String stltrxdate; //(核心记账日期)不允许为当前营业日期 + private Long stlamt; //清算金额 + private Integer jnlcount; //交易流水笔数 + /** * 市民卡绑定请求XML */ @@ -158,6 +162,43 @@ public class DlpayReq { return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString(); } + /** + * 对账确认接口请求报文 + * */ + public String getChkMakeSureXml() throws UnsupportedEncodingException { + StringBuffer xml = new StringBuffer(); + xml.append(prefix) + .append("") + .append("").append(transcode).append("") + .append("").append(transdate).append("") + .append("").append(transtime).append("") + .append("").append(sn).append("") + .append("").append(stltrxdate).append("") + .append("").append(stlamt/100.00).append("") + .append("").append(jnlcount).append("") + .append(""); + return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString(); + } + + /** + * 银行口挂请求报文 + * */ + public String getLossBankcardXml()throws UnsupportedEncodingException { + StringBuffer xml = new StringBuffer(); + xml.append(prefix) + .append("") + .append("").append(transcode).append("") + .append("").append(transdate).append("") + .append("").append(transtime).append("") + .append("").append(sn).append("") + .append("").append(bcNo).append("") + .append("").append(name).append("") + .append("").append(idType).append("") + .append("").append(idNo).append("") + .append(""); + return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString(); + } + public String getTransdate() { return transdate; } @@ -309,4 +350,28 @@ public class DlpayReq { public void setScenario(String scenario) { this.scenario = scenario; } + + public String getStltrxdate() { + return stltrxdate; + } + + public void setStltrxdate(String stltrxdate) { + this.stltrxdate = stltrxdate; + } + + public Long getStlamt() { + return stlamt; + } + + public void setStlamt(Long stlamt) { + this.stlamt = stlamt; + } + + public Integer getJnlcount() { + return jnlcount; + } + + public void setJnlcount(Integer jnlcount) { + this.jnlcount = jnlcount; + } } diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java index 398cd67d..5b347175 100644 --- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java +++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java @@ -524,4 +524,107 @@ public class YnrccApiController { }; return new ResponseEntity(stream, HttpStatus.OK); } + + /** + * 对账确认接口BC5516 + * */ + @PostMapping("/checkmakesure") + public DlpayResp makeCheckdtlSure(@FormParam("transcode") String transcode, @FormParam("transdate") String transdate, + @FormParam("transtime") String transtime, @FormParam("refno") String refno, + @FormParam("stltrxdate") String stltrxdate, @FormParam("stlamt") Long stlamt, + @FormParam("jnlcount") Integer jnlcount, @FormParam("sign_type") String sign_type, + @FormParam("sign") String sign){ + DlpayResp resp = new DlpayResp(); + if (!ynrccParamCheckService.checkChkMakesureParam(transcode, transdate, transtime, refno, stltrxdate, stlamt, jnlcount, sign_type, sign, resp)) { + logger.error(resp.errPrint()); + return resp; + } + + Map params = new HashMap<>(0); + params.put("transcode", transcode); + params.put("transdate", transdate); + params.put("transtime", transtime); + params.put("refno", refno); + params.put("stltrxdate", stltrxdate); + params.put("stlamt", stlamt.toString()); + params.put("jnlcount", jnlcount.toString()); + params.put("sign_type", sign_type); + params.put("sign", sign); + if (!checkYnrccSign(params, resp)) { + return resp; + } + + try{ + DlpayReq req = new DlpayReq(); + req.setTranscode(transcode); + req.setTransdate(transdate); + req.setTranstime(transtime); + req.setSn(refno); + req.setStltrxdate(stltrxdate); + req.setStlamt(stlamt); + req.setJnlcount(jnlcount); + return ynrccApiService.sendToYnrcc(DlpayUtil.OPTYPE_CHK_MAKESURE, req); + } catch (BussinessException be) { + resp.setCode(ErrorCode.BUSSINESS_ERROR); + resp.setMessage(be.getMessage()); + logger.error(resp.errPrint()); + return resp; + }catch (Exception e){ + doSystemError(e, resp); + return resp; + } + } + + /** + * 口挂接口 BC5517 + * */ + @PostMapping("/bankcardloss") + public DlpayResp bankcardLoss(@FormParam("transcode") String transcode, @FormParam("transdate") String transdate, + @FormParam("transtime") String transtime, @FormParam("refno") String refno, + @FormParam("bankcardno") String bankcardno, @FormParam("username") String username, + @FormParam("idtype") String idtype, @FormParam("idno") String idno, + @FormParam("sign_type") String sign_type, @FormParam("sign") String sign){ + DlpayResp resp = new DlpayResp(); + if (!ynrccParamCheckService.checkLossBankcardParam(transcode, transdate, transtime, refno, bankcardno, username, idtype, idno, sign_type, sign, resp)) { + logger.error(resp.errPrint()); + return resp; + } + + Map params = new HashMap<>(0); + params.put("transcode", transcode); + params.put("transdate", transdate); + params.put("transtime", transtime); + params.put("refno", refno); + params.put("bankcardno", bankcardno); + params.put("username", username); + params.put("idtype", idtype); + params.put("idno", idno); + params.put("sign_type", sign_type); + params.put("sign", sign); + if (!checkYnrccSign(params, resp)) { + return resp; + } + + try{ + DlpayReq req = new DlpayReq(); + req.setTranscode(transcode); + req.setTransdate(transdate); + req.setTranstime(transtime); + req.setSn(refno); + req.setBcNo(bankcardno); + req.setName(username); + req.setIdType(idtype); + req.setIdNo(idno); + return ynrccApiService.sendToYnrcc(DlpayUtil.OPTYPE_BANKCARD_LOSS, req); + } catch (BussinessException be) { + resp.setCode(ErrorCode.BUSSINESS_ERROR); + resp.setMessage(be.getMessage()); + logger.error(resp.errPrint()); + return resp; + }catch (Exception e){ + doSystemError(e, resp); + return resp; + } + } + } diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java index 9673aff1..35b38ed6 100644 --- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java +++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java @@ -24,4 +24,9 @@ public interface YnrccParamCheckService { boolean checkQueryResultParam(String transcode, String transdate, String transtime, String refno, String orignRefno, String sign_type, String sign, DlpayResp resp); boolean checkChkfileParam(String transcode, String transdate, String transtime, String refno, String checkdate, String merchant_bankcardno, String sign_type, String sign, DlpayResp resp); + + boolean checkChkMakesureParam(String transcode, String transdate, String transtime, String refno, String stltrxdate, Long stlamt, Integer jnlcount, String sign_type, String sign, DlpayResp resp); + + boolean checkLossBankcardParam(String transcode, String transdate, String transtime, String refno, String bankcardno, String username, String idtype, String idno, String sign_type, String sign, DlpayResp resp); + } diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java index 1d492e04..5c80430a 100644 --- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java +++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java @@ -64,6 +64,14 @@ public class YnrccApiServiceImpl implements YnrccApiService { sendXml = req.getChkfileXml(); logger.error("请求【获取对账单=" + req.getChkdate() + "】发送报文:\n" + sendXml); + } else if (DlpayUtil.OPTYPE_CHK_MAKESURE.equals(optype)){ + sendXml = req.getChkMakeSureXml(); + logger.error("请求【对账确认="+req.getStltrxdate()+"】发送报文:\n"+ sendXml); + + } else if(DlpayUtil.OPTYPE_BANKCARD_LOSS.equals(optype)){ + sendXml = req.getLossBankcardXml(); + logger.error("请求【银行卡口挂】发送报文:\n"+ sendXml); + } else { throw new BussinessException("请求类型[" + optype + "]错误!"); } diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java index cd6429ec..6b925f71 100644 --- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java +++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java @@ -244,4 +244,60 @@ public class YnrccParamCheckServiceImpl implements YnrccParamCheckService { return true; } + + @Override + public boolean checkChkMakesureParam(String transcode, String transdate, String transtime, String refno, String stltrxdate, Long stlamt, Integer jnlcount, String sign_type, String sign, DlpayResp resp) { + if (!checkYnrccBaseParam(transcode, transdate, transtime, refno, sign_type, sign, resp)) { + return false; + } + + if (!StringUtil.checkDatetimeValid(stltrxdate, "yyyyMMdd")) { + resp.setCode(ErrorCode.REQ_PARAM_ERROR); + resp.setMessage("请求参数错误[待清算流水日期]"); + return false; + } + + if(null == stlamt){ + resp.setCode(ErrorCode.REQ_PARAM_ERROR); + resp.setMessage("请求参数错误[清算金额]"); + return false; + } + + if(null==jnlcount || jnlcount<0){ + resp.setCode(ErrorCode.REQ_PARAM_ERROR); + resp.setMessage("请求参数错误[交易流水笔数]"); + return false; + } + + return true; + } + + @Override + public boolean checkLossBankcardParam(String transcode, String transdate, String transtime, String refno, String bankcardno, String username, String idtype, String idno, String sign_type, String sign, DlpayResp resp) { + if (!checkYnrccBaseParam(transcode, transdate, transtime, refno, sign_type, sign, resp)) { + return false; + } + if (StringUtil.isEmpty(bankcardno)) { + resp.setCode(ErrorCode.REQ_PARAM_ERROR); + resp.setMessage("请求参数错误[用户银行卡号为空]"); + return false; + } + if (StringUtil.isEmpty(username)) { + resp.setCode(ErrorCode.REQ_PARAM_ERROR); + resp.setMessage("请求参数错误[用户名为空]"); + return false; + } + if(StringUtil.isEmpty(idtype)){ + resp.setCode(ErrorCode.REQ_PARAM_ERROR); + resp.setMessage("请求参数错误[证件类型为空]"); + return false; + } + if (StringUtil.isEmpty(idno)) { + resp.setCode(ErrorCode.REQ_PARAM_ERROR); + resp.setMessage("请求参数错误[证件号为空]"); + return false; + } + + return true; + } } -- 2.17.1