From: kaixiang.xia Date: Tue, 2 Feb 2021 07:50:14 +0000 (+0800) Subject: 大理新接口实现初版 X-Git-Tag: 1.0.32^2~8 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=7ecfe286f1ba71e101113c9fd9df82443604ec70;p=epayment%2Ffood_payapi.git 大理新接口实现初版 --- diff --git a/payapi/build.gradle b/payapi/build.gradle index c6d7dd49..de710ba9 100644 --- a/payapi/build.gradle +++ b/payapi/build.gradle @@ -115,7 +115,7 @@ dependencies { // implementation files('libs/ojdbc6.jar') implementation 'commons-dbcp:commons-dbcp:1.4' implementation 'commons-beanutils:commons-beanutils:1.9.3' - implementation files('libs/ynrcc-mbp-1.0-RELEASE.jar') + implementation files('libs/ynrcc-mbp-1.1-RELEASE.jar') implementation 'log4j:log4j:1.2.17' implementation 'com.alibaba:fastjson:1.2.60' diff --git a/payapi/libs/ynrcc-mbp-1.0-RELEASE.jar b/payapi/libs/ynrcc-mbp-1.0-RELEASE.jar deleted file mode 100644 index 0a481dde..00000000 Binary files a/payapi/libs/ynrcc-mbp-1.0-RELEASE.jar and /dev/null differ diff --git a/payapi/libs/ynrcc-mbp-1.1-RELEASE.jar b/payapi/libs/ynrcc-mbp-1.1-RELEASE.jar new file mode 100644 index 00000000..34da4722 Binary files /dev/null and b/payapi/libs/ynrcc-mbp-1.1-RELEASE.jar differ diff --git a/payapi/sql/update-210106.sql b/payapi/sql/update-210106.sql index acf987ce..803b1826 100644 --- a/payapi/sql/update-210106.sql +++ b/payapi/sql/update-210106.sql @@ -8,3 +8,25 @@ INSERT INTO "tb_subject" ("subjid","subjno", "balflag", "displayflag", "endflag" VALUES (33, '112235', 1, 'y', 1, '1122', '20210106', 2, '农商行支付款', 1, '{tenantid}'); commit; +-- ---------------------------- +-- Table structure for tb_ynrccpay_sign +-- ---------------------------- +CREATE TABLE tb_ynrccpay_sign ( + id varchar(32) NOT NULL, + bankcardno varchar(32) NOT NULL, + shopaccno varchar(10) NOT NULL, + userid varchar(32) NOT NULL, + status varchar(10) NOT NULL, + sign_flag bool NOT NULL, + customer_sign_no varchar(60), + sign_time varchar(14), + cancel_time varchar(14), + remark varchar(600), + createtime varchar(14) +); +ALTER TABLE tb_ynrccpay_sign ADD CONSTRAINT tb_ynrccpay_sign_pkey PRIMARY KEY (id); +CREATE INDEX idx1_ynrccpay_sign ON tb_ynrccpay_sign(bankcardno,shopaccno,status); + +INSERT INTO "tb_transcode" ("transcode_id", "transcode", "transname", "tenantid") +VALUES (4, 3050, '农商行网关快捷支付', '{tenantid}'); +commit; diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java index 149c3ae3..caa0ce4c 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java @@ -1,5 +1,7 @@ package com.supwisdom.dlpay.agent; +import java.util.Map; + public class AgentResponse { public static final String AGENTCODE_SUCCESS = "0"; @@ -13,6 +15,7 @@ public class AgentResponse { private DtlStatus dtlStatus; private T payload; + private Map params; public String getAgentBody() { return agentBody; @@ -70,6 +73,14 @@ public class AgentResponse { this.payload = payload; } + public Map getParams() { + return params; + } + + public void setParams(Map params) { + this.params = params; + } + public AgentResponse() { } } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/YnrccPayCommonResp.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/YnrccPayCommonResp.java new file mode 100644 index 00000000..8c9f27d3 --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/YnrccPayCommonResp.java @@ -0,0 +1,22 @@ +package com.supwisdom.dlpay.agent.ynrccpay; + +public class YnrccPayCommonResp { + private String Plain; + private String Signature; + + public String getPlain() { + return Plain; + } + + public void setPlain(String plain) { + Plain = plain; + } + + public String getSignature() { + return Signature; + } + + public void setSignature(String signature) { + Signature = signature; + } +} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/YnrccPayResp.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/YnrccPayResp.java new file mode 100644 index 00000000..71f92009 --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/YnrccPayResp.java @@ -0,0 +1,185 @@ +package com.supwisdom.dlpay.agent.ynrccpay; + +public class YnrccPayResp { + private String code; //ZF0000 表示成功 + private String message; + + private String plain; + private String signature; + + private String TransId; + private String Mer_Id; + private String TransSeqNo; + + //退款 + private String OrgTransAmt; + private String TransAmount; + private String MerchantSeqNo; + + //查询 + private String OrgTransId; //ZF01 - 支付; ZF02 - 退货 + private String OrderNo; //订单号 + private String Amount; //交易金额 + private String Amount1; //已退货金额 + private String FeeAmt; //手续费金额 + private String CurrencyType; //币种 + private String PpDateTime; //支付系统交易时间 + private String ClearingDate; //清算日期 + private String TransStatus; //交易状态 00 - 交易成功; 01 - 交易失败; 02 - 撤消成功; 03 - 部分退货; 04 - 全部退货; 99 - 交易超时 + + public String error() { + return "code=[" + this.code + "],message=[" + this.message + "]"; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getPlain() { + return plain; + } + + public void setPlain(String plain) { + this.plain = plain; + } + + public String getSignature() { + return signature; + } + + public void setSignature(String signature) { + this.signature = signature; + } + + public String getTransId() { + return TransId; + } + + public void setTransId(String transId) { + TransId = transId; + } + + public String getMer_Id() { + return Mer_Id; + } + + public void setMer_Id(String mer_Id) { + Mer_Id = mer_Id; + } + + public String getTransSeqNo() { + return TransSeqNo; + } + + public void setTransSeqNo(String transSeqNo) { + TransSeqNo = transSeqNo; + } + + public String getTransStatus() { + return TransStatus; + } + + public void setTransStatus(String transStatus) { + TransStatus = transStatus; + } + + public String getOrgTransAmt() { + return OrgTransAmt; + } + + public void setOrgTransAmt(String orgTransAmt) { + OrgTransAmt = orgTransAmt; + } + + public String getTransAmount() { + return TransAmount; + } + + public void setTransAmount(String transAmount) { + TransAmount = transAmount; + } + + public String getMerchantSeqNo() { + return MerchantSeqNo; + } + + public void setMerchantSeqNo(String merchantSeqNo) { + MerchantSeqNo = merchantSeqNo; + } + + public String getOrgTransId() { + return OrgTransId; + } + + public void setOrgTransId(String orgTransId) { + OrgTransId = orgTransId; + } + + public String getOrderNo() { + return OrderNo; + } + + public void setOrderNo(String orderNo) { + OrderNo = orderNo; + } + + public String getAmount() { + return Amount; + } + + public void setAmount(String amount) { + Amount = amount; + } + + public String getAmount1() { + return Amount1; + } + + public void setAmount1(String amount1) { + Amount1 = amount1; + } + + public String getFeeAmt() { + return FeeAmt; + } + + public void setFeeAmt(String feeAmt) { + FeeAmt = feeAmt; + } + + public String getCurrencyType() { + return CurrencyType; + } + + public void setCurrencyType(String currencyType) { + CurrencyType = currencyType; + } + + public String getPpDateTime() { + return PpDateTime; + } + + public void setPpDateTime(String ppDateTime) { + PpDateTime = ppDateTime; + } + + public String getClearingDate() { + return ClearingDate; + } + + public void setClearingDate(String clearingDate) { + ClearingDate = clearingDate; + } +} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/YnrccPayUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/YnrccPayUtil.java index 17959f36..d0a34747 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/YnrccPayUtil.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/YnrccPayUtil.java @@ -1,40 +1,87 @@ package com.supwisdom.dlpay.agent.ynrccpay; +import com.google.gson.Gson; +import com.supwisdom.dlpay.agent.AgentCode; +import com.supwisdom.dlpay.agent.citizencard.YnrccRespCode; +import org.springframework.data.util.Pair; + +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; public class YnrccPayUtil { + public static final String GATEWAY = "ynrcc.netpay.URL"; + public static final String MER_ID = "ynrcc.netpay.Mer_Id"; + public static final String MER_NAME = "ynrcc.netpay.Mer_IdName"; + public static final String MER_URL = "ynrcc.netpay.MerURL"; - public static final Map transName; - static { - transName = new HashMap(0); - transName.put("IQSR","QueryMerchantEpay.do"); //单笔查询交易IQSR - transName.put("IPSR","MerchantWithdraw.do"); //单笔退货交易IPSR - transName.put("IDFR","MerchantCheckFileQry.do"); //清算对账IDFR - //网关支付IFPR有三种可供选择 - transName.put("IFPR","PayGateFastPay4M.do"); //网关快捷支付IFPR - transName.put("IFPR_PC","PayGateFastPay.do"); //fixme:普通网关支付IFPR - transName.put("IFPR_H5","PayGateFastPay4MNoCtrl.do"); //fixme:手机端普通网关支付IFPR - - transName.put("IFCR","PayGateFastPayCancelSign.do"); //网关快捷支付解约IFCR - - //网关支付限额修改IFMR有两种可供选择 - transName.put("IFMR","PayGateFastPayModify4M.do"); //网关快捷支付限额修改IFMR - transName.put("IFMR_PC","PayGateFastPayModify.do"); //fixme:普通网关支付限额修改IFMR - } + public static final String SUCCESS = "ZF0000"; + public static final String WAIT_FOR_QUERY = "ZF0098"; //等待查询结果 - /** - * 接口名称 - * */ - public static final String TRANSNAME_IQSR="QueryMerchantEpay.do"; + public static String toJson(Object obj) { + if (null == obj) return ""; + Gson gson = new Gson(); + return gson.toJson(obj); + } + public static final List> errcode = new ArrayList<>(0); - /** - * 交易码 - * */ - public static final String IQSR="IQSR"; + static { + errcode.add(Pair.of(AgentCode.SUCCESS, new YnrccRespCode("ZF0000", "交易成功"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0001", "本机构无权查看机构的信息"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0003", "无效商户"))); + errcode.add(Pair.of(AgentCode.SERVER_INTERNAL_ERROR, new YnrccRespCode("ZF0006", "网络不通"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0012", "无效交易"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0013", "无效金额"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0014", "无效卡号"))); + errcode.add(Pair.of(AgentCode.REFNO_NOT_EXISTS, new YnrccRespCode("ZF0020", "原订单信息不存在"))); + errcode.add(Pair.of(AgentCode.SERVER_INTERNAL_ERROR, new YnrccRespCode("ZF0022", "交易异常"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0030", "终端上送数据格式错"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0041", "账号被冻结或挂失"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0042", "无此帐户"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0048", "该客户号已关闭快速支付"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0049", "签约已撤消或冻结"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0050", "没有签约协议支付"))); + errcode.add(Pair.of(AgentCode.SHORT_OF_BALANCE, new YnrccRespCode("ZF0051", "余额不足"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0055", "密码错误"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0058", "不允许商户进行的交易"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0061", "超出商户金额限制"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0062", "退货金额超限"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0063", "上笔交易正在处理中,现交易被拒绝"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0064", "原始交易金额不匹配"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0065", "超出取款限制次数"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0067", "不允许多次退货"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0075", "超出密码输入次数"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0077", "商户状态错误"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0082", "卡号已经被注销了"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0084", "账号不存在"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0085", "银联支付号被注销了"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0086", "身份证号不匹配"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0087", "无效证件号码"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0088", "简单密码"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0092", "上笔交易正在处理中"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0093", "违法交易,无法完成"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0094", "重复交易"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0096", "系统内部错"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0097", "无效终端,柜员号不存在"))); + errcode.add(Pair.of(AgentCode.REQUIRE_QUERY, new YnrccRespCode("ZF0098", "交易超时,请查询"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0099", "支付密码不允许为空"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF00EI", "找不到机构号"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF00EB", "(商户)机构设置错误"))); + + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF00A0", "成功接收订单"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF00A1", "支付方取消订单"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0101", "无相关数据"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZF0214", "平台已冻结或已注销"))); + //自定义错误 ZExxxx + errcode.add(Pair.of(AgentCode.CONFIG_ERROR, new YnrccRespCode("ZE0001", "系统参数未配置"))); + errcode.add(Pair.of(AgentCode.COMMON_ERROR, new YnrccRespCode("ZE0002", "签名计算错误"))); + errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("ZE0098", "请求农商行网关快捷支付返回数据为空"))); + errcode.add(Pair.of(AgentCode.SERVER_INTERNAL_ERROR, new YnrccRespCode("ZE0099", "请求农商行网关快捷支付httpStatus非200"))); + } } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/citizencard/dao/YnrccPaySignDao.java b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/dao/YnrccPaySignDao.java new file mode 100644 index 00000000..d8b0949a --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/dao/YnrccPaySignDao.java @@ -0,0 +1,17 @@ +package com.supwisdom.dlpay.citizencard.dao; + +import com.supwisdom.dlpay.citizencard.domain.TYnrccPaySign; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +@Repository +public interface YnrccPaySignDao extends JpaRepository { + @Query("from TYnrccPaySign t where t.bankcardno=?1 and t.shopaccno=?2 and t.status='normal'") + TYnrccPaySign getUserSign(String bankcardno, String shopaccno); + + @Query("select count(t.id) from TYnrccPaySign t where t.bankcardno=?1 and t.shopaccno<>?2 and t.status='normal' and t.signFlag is true ") + int countByBankcardnoAndSignStatus(String bankcardno, String shopaccno); + + TYnrccPaySign getById(String id); +} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Subject.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Subject.java index e80344a0..21602c49 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Subject.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Subject.java @@ -78,6 +78,11 @@ public class Subject { */ public static final String SUBJNO_PAY_CITIZEN_CARD = "112234"; + /** + * 应收账款 - 农商行网关快捷支付 + */ + public static final String SUBJNO_YNRCC_NETPAY = "112235"; + //======================= 负债类 =====================// diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java index b78049f9..29f39216 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java @@ -13,6 +13,8 @@ public class TradeCode { public static final int TRANSCODE_ALIPAY = 3040;//支付宝支付 + public static final int TRANSCODE_YNRCC_NETPAY = 3050;//农商行网关快捷支付 + // QRcode 聚合支付 public static final int TRANSCODE_QRCODE = 1002; diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java index 161b1c75..ae9aafe7 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java @@ -81,6 +81,7 @@ public class TradeDict { public static final String PAYTYPE_CITIZEN_CARD = "citizenCard"; //市民卡 public static final String PAYTYPE_YKT_CARD = "yktpay"; //一卡通 public static final String PAYTYPE_OTHER_THIRDPART = "thirdpart"; //其他第三方 + public static final String PAYTYPE_YNRCC_PAY="ynrccpay"; //农商行网关快捷支付 public static final String PAYTYPE_APP = "APP"; //app内支付 public static final String PAYTYPE_H5 = "H5"; //H5内支付 diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/ynrcc_netpay_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/ynrcc_netpay_service_impl.kt index 2d94e307..3c1c7e7e 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/ynrcc_netpay_service_impl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/ynrcc_netpay_service_impl.kt @@ -1,9 +1,28 @@ package com.supwisdom.dlpay.agent.service.impl +import com.csii.ynrcc.open.api.pay.YNRCCFastGateWayPayApi +import com.google.gson.Gson import com.supwisdom.dlpay.agent.service.YnrccNetPayService +import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayCommonResp +import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayResp import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayUtil +import com.supwisdom.dlpay.api.bean.YnrccPaySignApplyParam +import com.supwisdom.dlpay.api.bean.YnrccPaySignApplyResponse +import com.supwisdom.dlpay.api.dao.CardDao +import com.supwisdom.dlpay.api.dao.PersonDao +import com.supwisdom.dlpay.api.repositories.ShopaccService import com.supwisdom.dlpay.api.service.SourceTypeService +import com.supwisdom.dlpay.citizencard.dao.YnrccPaySignDao +import com.supwisdom.dlpay.citizencard.domain.TYnrccPaySign +import com.supwisdom.dlpay.exception.TransactionProcessException +import com.supwisdom.dlpay.framework.dao.ShopaccDao import com.supwisdom.dlpay.framework.service.SystemUtilService +import com.supwisdom.dlpay.framework.util.MoneyUtil +import com.supwisdom.dlpay.framework.util.StringUtil +import com.supwisdom.dlpay.framework.util.TradeDict +import com.supwisdom.dlpay.framework.util.TradeErrorCode +import com.supwisdom.dlpay.util.ConstantUtil +import mu.KotlinLogging import org.springframework.http.HttpEntity import org.springframework.http.HttpHeaders import org.springframework.http.MediaType @@ -18,45 +37,306 @@ import java.nio.charset.StandardCharsets @Service class YnrccNetPayServiceImpl(val restTemplate: RestTemplate, val systemUtilService: SystemUtilService, - val sourceTypeService: SourceTypeService): YnrccNetPayService { + val sourceTypeService: SourceTypeService) : YnrccNetPayService { + private val logger = KotlinLogging.logger { } - private fun postForm(url: String, params: Map): ResponseEntity { + override fun doAnalysisSignature(shopaccno: String, plain: String, signature: String): Map { + val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_YNRCC_PAY, shopaccno, false, true) + val data = YNRCCFastGateWayPayApi.verify(signature, plain) //调SDK验证签名 + val merId = config[YnrccPayUtil.MER_ID] + if (!merId.isNullOrEmpty() && merId != data["Mer_Id"]) { + throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "参数[Mer_Id]不匹配!") + } + return data + } + + override fun doApplyYnrccPaySign(shopaccno: String): YnrccPayResp { + val resp = YnrccPayResp() + val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_YNRCC_PAY, shopaccno, false, false) + val merId = config[YnrccPayUtil.MER_ID] + val merUrl = config[YnrccPayUtil.MER_URL] + if (merId.isNullOrEmpty()) { + resp.code = "ZE0001" + resp.message = "系统参数未配置[Mer_Id]" + logger.error(resp.error()) + return resp + } + if (merUrl.isNullOrEmpty()) { + resp.code = "ZE0001" + resp.message = "系统参数未配置[MerURL]" + logger.error(resp.error()) + return resp + } + + val params = hashMapOf() + params["TransId"] = "IFSR" + params["Mer_Id"] = merId.trim() + params["MerURL"] = merUrl.trim() + + //调SDK生成签名 + val signData = YNRCCFastGateWayPayApi.sign(params) + + resp.code = YnrccPayUtil.SUCCESS + resp.message = "SUCCESS" + resp.plain = signData["Plain"] + resp.signature = signData["Signature"] + return resp + } + + override fun doCancelYnrccPaySign(shopaccno: String, customerSignNo: String): YnrccPayResp { + val resp = YnrccPayResp() + val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_YNRCC_PAY, shopaccno, false, false) + val gateWay = config[YnrccPayUtil.GATEWAY] + val merId = config[YnrccPayUtil.MER_ID] + if (gateWay.isNullOrEmpty()) { + resp.code = "ZE0001" + resp.message = "系统参数未配置[网关地址]" + logger.error(resp.error()) + return resp + } + if (merId.isNullOrEmpty()) { + resp.code = "ZE0001" + resp.message = "系统参数未配置[Mer_Id]" + logger.error(resp.error()) + return resp + } + + val url = String.format(gateWay, "PayGateFastPayCancelSign.do") //赋予接口名 + val params = hashMapOf() + params["TransId"] = "IFCR" + params["Mer_Id"] = merId.trim() + params["CustomerSignNo"] = customerSignNo + + val signData = YNRCCFastGateWayPayApi.sign(params) //调SDK生成签名 + val plain = signData["Plain"] + val signature = signData["Signature"] + if (plain.isNullOrEmpty() || signature.isNullOrEmpty()) { + resp.code = "ZE0002" + resp.message = "签名计算错误!" + logger.error(resp.error()) + return resp + } + + val result = postForm(url, plain, signature, "解约") //发起表单提交 + resp.code = result["RespCode"] + resp.message = result["RespDesc"] + if (YnrccPayUtil.SUCCESS == result["RespCode"]) { + resp.transId = result["TransId"] + resp.mer_Id = result["Mer_Id"] + } else { + logger.error(resp.error()) + } + return resp + } + + private fun error(code: String, message: String): Map { + val error = hashMapOf() + error["RespCode"] = code + error["RespDesc"] = message + return error + } + + private fun postForm(url: String, plain: String, signature: String, opt:String): Map { val httpHeaders = HttpHeaders() httpHeaders.contentType = MediaType.APPLICATION_FORM_URLENCODED //Form表单提交 - val requestParams = LinkedMultiValueMap() - params.forEach(requestParams::add) + requestParams.add("Plain", plain); + requestParams.add("Signature", signature) val httpEntity = HttpEntity>(requestParams, httpHeaders) - restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8) //UTF-8接收 - return restTemplate.postForEntity(url, httpEntity, String::class.java) + + logger.info("农商行网关快捷支付请求【$opt】:\nurl=[$url]\nPlain=[$plain]\nSignature=[$signature]") + val result = restTemplate.postForEntity(url, httpEntity, String::class.java) + if (200 == result.statusCodeValue) { + //请求成功 + val resJson = Gson().fromJson(result.body, YnrccPayCommonResp::class.java) + if (null == resJson || StringUtil.isEmpty(resJson.plain) || StringUtil.isEmpty(resJson.signature)) { + return error("ZE0098", "请求农商行网关【$opt】返回数据为空!") + } + + val resData = YNRCCFastGateWayPayApi.verify(resJson.signature, resJson.plain) //调SDK验证签名 + logger.info("农商行网关快捷支付请求【$opt】返回:\nurl=[$url]\nResponse=[" + YnrccPayUtil.toJson(resData) + "]") + return if (YnrccPayUtil.SUCCESS == resData["RespCode"]) { + resData["RespDesc"] = "SUCCESS" + resData + } else { + val errcode = resData["RespCode"] + val errmsg = YnrccPayUtil.errcode.firstOrNull { + it.second.code == errcode + }?.second?.msg + resData["RespDesc"] = "$errcode $errmsg" //设置失败信息 + resData + } + } else { + return error("ZE0099","请求农商行网关【$opt】失败!http status=[${result.statusCodeValue}]") + } } - override fun doYnrccPaySign() { + override fun doYnrccPayInit(shopaccno: String, refno: String, amount: Int, transDateTime: String, productInfo: String, extData: String, custname: String, email: String, customerSignNo: String): YnrccPayResp { + val resp = YnrccPayResp() + val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_YNRCC_PAY, shopaccno, false, false) + val merId = config[YnrccPayUtil.MER_ID] + val merIdName = config[YnrccPayUtil.MER_NAME] + val merUrl = config[YnrccPayUtil.MER_URL] + if (merId.isNullOrEmpty()) { + resp.code = "ZE0001" + resp.message = "系统参数未配置[Mer_Id]" + logger.error(resp.error()) + return resp + } + if (merIdName.isNullOrEmpty()) { + resp.code = "ZE0001" + resp.message = "系统参数未配置[Mer_IdName]" + logger.error(resp.error()) + return resp + } + if (merUrl.isNullOrEmpty()) { + resp.code = "ZE0001" + resp.message = "系统参数未配置[MerURL]" + logger.error(resp.error()) + return resp + } + val params = hashMapOf() -// params["stuempno"]="111" -// params["partner_id"]="100006" -// params["timestamp"]=systemUtilService.sysdatetime.hostdatetime -// params["sign_method"]="HMAC" -// params["sign"]="X" -// val url = "http://localhost:8581/epayapi/services/servicehall//common/queryaccountinfo" - - val url ="http://220.163.130.136:8087/pweb/PayGateFastPaySign4MNoCtrl.do?LoginType=C&BankId=9999&_locale=zh_CN" - val plain = "TransId=IFSR~~Mer_Id=700003~~MerURL=http://ykt.supwisdom.com" -// val sign = YnrccPayUtil.sign(plain); - val sign = "123" - - params["TransName"]="IFSR" - params["Plain"]=plain - params["Signature"]=sign - - var resp = postForm(url,params) - if(200 == resp.statusCodeValue){ - //success - println("return json=${resp.body}") + params["TransId"] = "IFPR" + params["Mer_Id"] = merId.trim() + params["Mer_IdName"] = merIdName + params["OrderNo"] = refno + params["Amount"] = MoneyUtil.formatYuanToString(amount / 100.0) + params["OrderDateTime"] = transDateTime + params["CurrencyType"] = "156" + params["CustomerName"] = custname + params["ProductInfo"] = productInfo + params["CustomerEMail"] = email + params["CustomerSignNo"] = customerSignNo + params["MerURL"] = merUrl + params["MsgExt"] = extData + + //调SDK生成签名 + val signData = YNRCCFastGateWayPayApi.sign(params) + + resp.code = YnrccPayUtil.SUCCESS + resp.message = "SUCCESS" + resp.plain = signData["Plain"] + resp.signature = signData["Signature"] + return resp + } + + override fun doYnrccPayRefund(shopaccno: String, orignRefno: String, amount: Int, orignTransDate: String): YnrccPayResp { + val resp = YnrccPayResp() + val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_YNRCC_PAY, shopaccno, false, false) + val gateWay = config[YnrccPayUtil.GATEWAY] + val merId = config[YnrccPayUtil.MER_ID] + if (gateWay.isNullOrEmpty()) { + resp.code = "ZE0001" + resp.message = "系统参数未配置[网关地址]" + logger.error(resp.error()) + return resp + } + if (merId.isNullOrEmpty()) { + resp.code = "ZE0001" + resp.message = "系统参数未配置[Mer_Id]" + logger.error(resp.error()) + return resp + } + + val url = String.format(gateWay, "MerchantWithdraw.do") //赋予接口名 + val params = hashMapOf() + params["TransId"] = "IPSR" + params["Mer_Id"] = merId.trim() + params["OrgMerchantSeqNo"] = orignRefno + params["Amount"] = MoneyUtil.formatYuanToString(amount / 100.0) + params["OrgMerchantDate"] = orignTransDate + + val signData = YNRCCFastGateWayPayApi.sign(params) //调SDK生成签名 + val plain = signData["Plain"] + val signature = signData["Signature"] + if (plain.isNullOrEmpty() || signature.isNullOrEmpty()) { + resp.code = "ZE0002" + resp.message = "签名计算错误!" + logger.error(resp.error()) + return resp + } + + val result = postForm(url, plain, signature, "退款") //发起表单提交 + resp.code = result["RespCode"] + resp.message = result["RespDesc"] + if (YnrccPayUtil.SUCCESS == result["RespCode"]) { + resp.transId = result["TransId"] + resp.mer_Id = result["Mer_Id"] + resp.orgTransAmt = result["OrgTransAmt"] + resp.transAmount = result["TransAmount"] + resp.merchantSeqNo = result["MerchantSeqNo"] + resp.transSeqNo = result["TransSeqNo"] + } else { + logger.error(resp.error()) + } + return resp + } + + override fun doQueryYnrccPayResult(shopaccno: String, orignRefno: String, orignTransDate: String): YnrccPayResp { + val resp = YnrccPayResp() + val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_YNRCC_PAY, shopaccno, false, false) + val gateWay = config[YnrccPayUtil.GATEWAY] + val merId = config[YnrccPayUtil.MER_ID] + val merIdName = config[YnrccPayUtil.MER_NAME] + if (gateWay.isNullOrEmpty()) { + resp.code = "ZE0001" + resp.message = "系统参数未配置[网关地址]" + logger.error(resp.error()) + return resp + } + if (merId.isNullOrEmpty()) { + resp.code = "ZE0001" + resp.message = "系统参数未配置[Mer_Id]" + logger.error(resp.error()) + return resp + } + if (merIdName.isNullOrEmpty()) { + resp.code = "ZE0001" + resp.message = "系统参数未配置[Mer_IdName]" + logger.error(resp.error()) + return resp + } + + val url = String.format(gateWay, "QueryMerchantEpay.do") //赋予接口名 + val params = hashMapOf() + params["TransId"] = "IQSR" + params["Mer_Id"] = merId.trim() + params["Mer_IdName"] = merIdName.trim() + params["OrderNo"] = orignRefno + params["OrderDate"] = orignTransDate + + val signData = YNRCCFastGateWayPayApi.sign(params) //调SDK生成签名 + val plain = signData["Plain"] + val signature = signData["Signature"] + if (plain.isNullOrEmpty() || signature.isNullOrEmpty()) { + resp.code = "ZE0002" + resp.message = "签名计算错误!" + logger.error(resp.error()) + return resp + } + + val result = postForm(url, plain, signature, "结果查询") //发起表单提交 + resp.code = result["RespCode"] + resp.message = result["RespDesc"] + if (YnrccPayUtil.SUCCESS == result["RespCode"]) { + resp.transId = result["TransId"] + resp.mer_Id = result["Mer_Id"] + resp.orgTransId = result["OrgTransId"] + resp.orderNo = result["OrderNo"] + resp.amount = result["Amount"] + resp.amount1 = result["Amount1"] + resp.feeAmt = result["FeeAmt"] + resp.currencyType = result["CurrencyType"] + resp.transSeqNo = result["TransSeqNo"] + resp.ppDateTime = result["PpDateTime"] + resp.clearingDate = result["ClearingDate"] + resp.transStatus = result["TransStatus"] } else { - //fail - println("return status=${resp.statusCodeValue},json=${resp.body}") + logger.error(resp.error()) } + return resp } + } \ No newline at end of file diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/ynrcc_netpay_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/ynrcc_netpay_service.kt index e6ab5fb1..f2e5bdc5 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/ynrcc_netpay_service.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/ynrcc_netpay_service.kt @@ -1,5 +1,94 @@ package com.supwisdom.dlpay.agent.service +import com.supwisdom.dlpay.agent.AgentCode +import com.supwisdom.dlpay.agent.AgentPayService +import com.supwisdom.dlpay.agent.AgentResponse +import com.supwisdom.dlpay.agent.DtlStatus +import com.supwisdom.dlpay.agent.citizencard.YnrccRespCode +import com.supwisdom.dlpay.agent.citizencard.YnrccUtil +import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayResp +import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayUtil +import com.supwisdom.dlpay.api.domain.TTransactionMain +import com.supwisdom.dlpay.framework.util.MoneyUtil +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.stereotype.Component + interface YnrccNetPayService { - fun doYnrccPaySign() + fun doAnalysisSignature(shopaccno: String, plain: String, signature: String): Map + + fun doApplyYnrccPaySign(shopaccno: String): YnrccPayResp + + fun doCancelYnrccPaySign(shopaccno: String, customerSignNo: String): YnrccPayResp + + fun doYnrccPayInit(shopaccno: String, refno: String, amount: Int, transDateTime: String, productInfo: String, + extData: String, custname: String, email: String, customerSignNo: String): YnrccPayResp + + fun doYnrccPayRefund(shopaccno: String, orignRefno: String, amount: Int, orignTransDate: String): YnrccPayResp + + fun doQueryYnrccPayResult(shopaccno: String, orignRefno: String, orignTransDate: String): YnrccPayResp +} + +@Component("ynrccpayAgent") +class YnrccNetPayAgent: AgentPayService{ + @Autowired + private lateinit var ynrccNetPayService: YnrccNetPayService + + private fun agentCode(code: String, msg: String?): org.springframework.data.util.Pair { + return YnrccPayUtil.errcode.firstOrNull { + it.second.code == code + }?.let { + org.springframework.data.util.Pair.of(it.first, YnrccRespCode( + code, it.second.msg.replace("{message}", msg ?: "未知") + )) + } ?: org.springframework.data.util.Pair.of(AgentCode.COMMON_ERROR, + YnrccRespCode(code, msg ?: "未知")) + } + + override fun auth(agentid: String?, billno: String?): AgentResponse { + return AgentResponse().apply { + this.code = AgentCode.NOT_SUPPORT + } + } + + override fun pay(transaction: TTransactionMain): AgentResponse { + return AgentResponse().apply { + this.code = AgentCode.NOT_SUPPORT //fixme:支付由客户端发起,服务端无支付逻辑 + } + } + + override fun cancel(transaction: TTransactionMain): AgentResponse { + return refund(transaction) + } + + override fun refund(transaction: TTransactionMain): AgentResponse { + val resp = ynrccNetPayService.doYnrccPayRefund(transaction.shopDtl.shopaccno, transaction.reverseRefno, + MoneyUtil.YuanToFen(transaction.personDtl.amount), transaction.shopDtl.accdate) + return AgentResponse().also { + val code = agentCode(resp.code, resp.message) + it.code = code.first + it.agentCode = code.second.code + it.agentMsg = code.second.msg + it.agentRefno = resp.transSeqNo + } + } + + override fun query(transaction: TTransactionMain): AgentResponse { + val resp = ynrccNetPayService.doQueryYnrccPayResult(transaction.shopDtl.shopaccno, transaction.refno, transaction.shopDtl.transdate) + + return AgentResponse().also { + val code = agentCode(resp.code, resp.message) + it.code = code.first + it.agentCode = code.second.code + it.agentMsg = code.second.msg + it.agentRefno = resp.transSeqNo + it.dtlStatus = when (resp.transStatus) { +// 00 - 交易成功 01 - 交易失败 02 - 撤消成功 03 - 部分退货 04 - 全部退货 99 - 交易超时 + "00" -> DtlStatus.SUCCESS + "03" -> DtlStatus.PARTIAL_REFUND + "04" -> DtlStatus.REFUND + else -> DtlStatus.FAIL + } + } + } + } \ No newline at end of file diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt index d539a41d..16ceadb9 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt @@ -59,6 +59,9 @@ class ConsumeAPIController { @Autowired private lateinit var qrCodeService: QRCodeService + @Autowired + private lateinit var ynrccNetPayBusinessService: YnrccNetPayBusinessService + /** * ============================================================================ * 消费流水结果查询统一接口 @@ -844,15 +847,55 @@ class ConsumeAPIController { * ============================================================================ * */ @PostMapping("/ynrccpay/order") - fun ynrccPayOrder(@Valid @RequestBody param: YnrccPayOrderParam): ResponseEntity{ - val success=true - if(success){ + fun ynrccPayOrder(@Valid @RequestBody param: YnrccPayOrderParam): ResponseEntity { + val userSign = ynrccNetPayBusinessService.queryUserYnrccPaySign(param.bankcardno, param.shopaccno) + val person = userService.findOnePersonByUserid(param.userid) + if (person.userid != userSign.userid) { + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(TradeErrorCode.INPUT_DATA_ERROR, "银行卡持有人错误!")) + } else if (!userSign.isSignFlag || StringUtil.isEmpty(userSign.customerSignNo)) { + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "用户未签约农商行网关快捷支付!")) + } + val dtlType = consumePayService.getDtltypeDictionary(param.dtltype, Dictionary.DTLTYPES) + if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_YNRCC_PAY)) { + val account = accountUtilServcie.readAccount(person.userid) + val shopacc = accountUtilServcie.readShopbyShopaccno(param.shopaccno) + val subject = accountUtilServcie.readSubject(Subject.SUBJNO_YNRCC_NETPAY) + val transaction = TransactionBuilder().apply { + setTransInfo(param.transdate, param.transtime, + TradeCode.TRANSCODE_YNRCC_NETPAY, + TradeDict.PAYTYPE_YNRCC_PAY) + setOutTransInfo(shopacc.shopaccno, param.billno) + operator(param.shopaccno, TradeDict.OPERTYPE_SHOP) + payinfo = userSign.customerSignNo //存放签约协议号 + description = dtlType.dictcaption + dtltype = param.dtltype + }.person(account).apply { + setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_OUT) + setOpposite(AccountProxy(shopacc)) + }.and().shop(shopacc).apply { + setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_IN) + setOpposite(AccountProxy(account)) + }.and().addDebitCreditRecord(AccountProxy(subject), AccountProxy(account), + param.amount / 100.0, dtlType.dictcaption) + .addDebitCreditRecord(AccountProxy(account), AccountProxy(shopacc), + param.amount / 100.0, dtlType.dictcaption) + .also { +// param.feelist?.also { +// TODO("feelist 费用清单暂无!") +// } + }.init(transactionService) + + //创建初始化流水后,返回客户端sdk需要的支付参数 + val resp = ynrccNetPayBusinessService.doYnrccPayInit(transaction, userSign) + return ResponseEntity.ok(ResponseBodyBuilder.create() - .success(YnrccPayOrderResponse(), "交易初始化成功")) + .success(resp, "交易初始化成功")) } return ResponseEntity.ok(ResponseBodyBuilder.create() - .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>")) + .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<农商行网关快捷支付>")) } /** @@ -862,15 +905,27 @@ class ConsumeAPIController { * */ @PostMapping("/ynrccpay/confirm") fun ynrccPayConfirm(@Valid @RequestBody param: YnrccPayConfirmParam): ResponseEntity { - val success=true - if(success){ - return ResponseEntity.ok(ResponseBodyBuilder.create() - .success(YnrccPayConfirmResponse(), "交易初始化成功")) + val dtl = transactionService.wip(param.refno) + val resp = ynrccNetPayBusinessService.doYnrccPayConfirm(dtl, param.plain, param.signature) + val ret = YnrccPayConfirmResponse(dtl.refno,dtl.outTradeNo,dtl.shopDtl.amount,resp.params) + when (resp.code) { + AgentCode.SUCCESS -> + transactionService.success(dtl.refno, resp.agentRefno, false).let { + return ResponseEntity.ok(ResponseBodyBuilder.create() + .success(ret, "交易确认成功")) + } + AgentCode.REQUIRE_QUERY -> { + //去查询 + agentQueryResultTask.queryResult(dtl, 0) + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(ret, TradeErrorCode.WAIT_QUERY_RESULT, "请查询支付结果")) + } + else -> //失败 + transactionService.fail(param.refno, resp.agentMsg).let { + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(ret, TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${resp.agentMsg}")) + } } - - return ResponseEntity.ok(ResponseBodyBuilder.create() - .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>")) - } /** @@ -879,16 +934,53 @@ class ConsumeAPIController { * ============================================================================ * */ @PostMapping("/ynrccpay/refund") - fun ynrccPayRefund(@Valid @RequestBody param:YnrccPayRefundParam): ResponseEntity{ - val success=true - if(success){ - return ResponseEntity.ok(ResponseBodyBuilder.create() - .success(YnrccPayRefundResponse(), "交易初始化成功")) - } + fun ynrccPayRefund(@Valid @RequestBody param: YnrccPayRefundParam): ResponseEntity { + consumePayService.getTransactionMainDtl(param.refno, param.billno, param.shopaccno)?.let { mainDtl -> + if (mainDtl.sourceType.isNotEmpty()) { + //判断能否冲正 + if (mainDtl.shop) { + consumePayService.checkCanReverse(mainDtl.sourceType, mainDtl.shopDtl.shopaccno) + } else { + consumePayService.checkCanReverse(mainDtl.sourceType) + } + } else { + throw TransactionCheckException(TradeErrorCode.TRANSDTL_STATUS_ERROR, + "该笔交易未定义sourcetype, 不支持退款") + } - return ResponseEntity.ok(ResponseBodyBuilder.create() - .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>")) + val builder = TransactionBuilder().apply { + setTransInfo(param.transdate, param.transtime, mainDtl.transCode, mainDtl.sourceType) + setOutTransInfo(mainDtl.outId, param.requestbillno) + } + val refundTrans = builder.refundInit(mainDtl.refno, param.refundAmount / 100.0, transactionService) + transactionService.wip(refundTrans.refno) + val service = createAgentService(mainDtl.sourceType) + val resp = service.refund(refundTrans) + when (resp.code) { + AgentCode.SUCCESS -> { + transactionService.success(refundTrans.refno, resp.agentRefno, false) + + return ResponseEntity.ok(ResponseBodyBuilder.create() + .success(YnrccPayRefundResponse(refundTrans.refno), "交易退款成功")) + } + AgentCode.REQUIRE_QUERY -> { + //待查询 + agentQueryResultTask.queryResult(refundTrans, 0) + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(YnrccPayRefundResponse(refundTrans.refno), + TradeErrorCode.WAIT_QUERY_RESULT, "请查询退款结果")) + } + else -> transactionService.fail(refundTrans.refno, + "${resp.agentCode}-${resp.agentMsg}").let { + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(YnrccPayRefundResponse(refundTrans.refno), + TradeErrorCode.BUSINESS_DEAL_ERROR, "退款失败!${resp.agentMsg}")) + } + } + + } ?: return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在")) } } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt index ec9624cf..1c6750c6 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt @@ -2,12 +2,10 @@ package com.supwisdom.dlpay.api.controller import com.supwisdom.dlpay.agent.citizencard.YnrccUtil import com.supwisdom.dlpay.agent.service.CitizencardPayService +import com.supwisdom.dlpay.agent.service.YnrccNetPayService import com.supwisdom.dlpay.api.bean.* import com.supwisdom.dlpay.api.exception.RequestParamCheckException -import com.supwisdom.dlpay.api.service.CardService -import com.supwisdom.dlpay.api.service.KafkaSendMsgService -import com.supwisdom.dlpay.api.service.QRCodeService -import com.supwisdom.dlpay.api.service.UserService +import com.supwisdom.dlpay.api.service.* import com.supwisdom.dlpay.exception.TransactionException import com.supwisdom.dlpay.framework.ResponseBodyBuilder import com.supwisdom.dlpay.framework.util.TradeDict @@ -41,8 +39,8 @@ class UserAPIController { private lateinit var citizencardPayService: CitizencardPayService @Autowired private lateinit var qrcodeService: QRCodeService - - + @Autowired + private lateinit var ynrccNetPayBusinessService: YnrccNetPayBusinessService @PostMapping("/open") fun openAccount(@RequestBody param: OpenUserParam): ResponseEntity { @@ -455,15 +453,9 @@ class UserAPIController { * */ @PostMapping("/ynrccpaySignQuery") fun queryYnrccPaySign(@Valid @RequestBody param: YnrccPaySignQueryParam): ResponseEntity { - val success=true - if(success){ - return ResponseEntity.ok(ResponseBodyBuilder.create() - .success(YnrccPaySignQueryResponse(), "交易初始化成功")) - } - + val signFlag = ynrccNetPayBusinessService.checkUserYnrccPaySignStatus(param.userid,param.bankcardno,param.shopaccno) return ResponseEntity.ok(ResponseBodyBuilder.create() - .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>")) - + .success(YnrccPaySignQueryResponse(signFlag), "查询成功")) } /** @@ -473,15 +465,9 @@ class UserAPIController { * */ @PostMapping("/ynrccpaySignApply") fun applyYnrccPaySign(@Valid @RequestBody param: YnrccPaySignApplyParam): ResponseEntity { - val success=true - if(success){ - return ResponseEntity.ok(ResponseBodyBuilder.create() - .success(YnrccPaySignApplyResponse(), "交易初始化成功")) - } - + val resp = ynrccNetPayBusinessService.applyUserYnrccPaySign(param) return ResponseEntity.ok(ResponseBodyBuilder.create() - .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>")) - + .success(resp, "success")) } /** @@ -490,16 +476,15 @@ class UserAPIController { * ============================================================================ * */ @PostMapping("/ynrccpaySignConfirm") - fun confirmYnrccPaySign(@Valid @RequestBody param:YnrccPaySignConfirmParam): ResponseEntity{ - val success=true - if(success){ - return ResponseEntity.ok(ResponseBodyBuilder.create() - .success(YnrccPaySignConfirmResponse(), "交易初始化成功")) + fun confirmYnrccPaySign(@Valid @RequestBody param: YnrccPaySignConfirmParam): ResponseEntity { + val resp = ynrccNetPayBusinessService.confirmUserYnrccPaySign(param) + return if (0 == resp.retcode) { + ResponseEntity.ok(ResponseBodyBuilder.create() + .success(resp, "success")) + } else { + ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(resp.retcode, resp.retmsg)) } - - return ResponseEntity.ok(ResponseBodyBuilder.create() - .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>")) - } /** @@ -509,15 +494,14 @@ class UserAPIController { * */ @PostMapping("/ynrccpaySignCancel") fun cancelYnrccPaySign(@Valid @RequestBody param:YnrccPaySignCancelParam):ResponseEntity{ - val success=true - if(success){ - return ResponseEntity.ok(ResponseBodyBuilder.create() - .success(YnrccPaySignCancelResponse(), "交易初始化成功")) + val resp = ynrccNetPayBusinessService.cancelUserYnrccPaySign(param) + return if (0 == resp.retcode) { + ResponseEntity.ok(ResponseBodyBuilder.create() + .success(resp, "success")) + } else { + ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(resp.retcode, resp.retmsg)) } - - return ResponseEntity.ok(ResponseBodyBuilder.create() - .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>")) - } /** @@ -527,14 +511,14 @@ class UserAPIController { * */ @PostMapping("/ynrccpayModifyLimit") fun modifyYnrccPayLimit(@Valid @RequestBody param:YnrccPayLimitModifyParam):ResponseEntity{ - val success=true + val success=false if(success){ return ResponseEntity.ok(ResponseBodyBuilder.create() - .success(YnrccPayLimitModifyResponse(), "交易初始化成功")) + .success(YnrccPayLimitModifyResponse(), "success")) } return ResponseEntity.ok(ResponseBodyBuilder.create() - .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>")) + .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "暂无业务逻辑")) } } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/ynrcc_netpay_business_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/ynrcc_netpay_business_service.kt new file mode 100644 index 00000000..da4e581f --- /dev/null +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/ynrcc_netpay_business_service.kt @@ -0,0 +1,256 @@ +package com.supwisdom.dlpay.api.service.impl + +import com.supwisdom.dlpay.agent.AgentCode +import com.supwisdom.dlpay.agent.AgentResponse +import com.supwisdom.dlpay.agent.DtlStatus +import com.supwisdom.dlpay.agent.citizencard.YnrccRespCode +import com.supwisdom.dlpay.agent.service.YnrccNetPayService +import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayUtil +import com.supwisdom.dlpay.api.bean.* +import com.supwisdom.dlpay.api.dao.CardDao +import com.supwisdom.dlpay.api.dao.PersonDao +import com.supwisdom.dlpay.api.dao.TransactionMainDao +import com.supwisdom.dlpay.api.domain.TTransactionMain +import com.supwisdom.dlpay.api.exception.RequestParamCheckException +import com.supwisdom.dlpay.api.service.SourceTypeService +import com.supwisdom.dlpay.api.service.TransactionService +import com.supwisdom.dlpay.api.service.YnrccNetPayBusinessService +import com.supwisdom.dlpay.api.types.IDTypes +import com.supwisdom.dlpay.citizencard.dao.YnrccPaySignDao +import com.supwisdom.dlpay.citizencard.domain.TYnrccPaySign +import com.supwisdom.dlpay.exception.TransactionProcessException +import com.supwisdom.dlpay.framework.dao.ShopaccDao +import com.supwisdom.dlpay.framework.service.SystemUtilService +import com.supwisdom.dlpay.framework.util.MoneyUtil +import com.supwisdom.dlpay.framework.util.StringUtil +import com.supwisdom.dlpay.framework.util.TradeDict +import com.supwisdom.dlpay.framework.util.TradeErrorCode +import com.supwisdom.dlpay.util.ConstantUtil +import mu.KotlinLogging +import org.springframework.stereotype.Service + +@Service +class YnrccNetPayBusinessServiceImpl(val personDao: PersonDao, + val shopaccDao: ShopaccDao, + val ynrccPaySignDao: YnrccPaySignDao, + val cardDao: CardDao, + val transactionMainDao: TransactionMainDao, + val transactionService: TransactionService, + val systemUtilService: SystemUtilService, + val sourceTypeService: SourceTypeService, + val ynrccNetPayService: YnrccNetPayService) : YnrccNetPayBusinessService { + private val logger = KotlinLogging.logger { } + + override fun checkUserYnrccPaySignStatus(userid: String, bankcardno: String, shopaccno: String): Boolean { + val person = personDao.findByUserid(userid) + ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "用户<$userid>不存在") + val shopacc = shopaccDao.findByShopaccno(shopaccno) + ?: throw TransactionProcessException(TradeErrorCode.SHOP_NOT_EXISTS, "商户<$shopaccno>不存在") + if (sourceTypeService.checkShopSourceType(shopacc.shopaccno, TradeDict.PAYTYPE_YNRCC_PAY, false)) { + val paySign = ynrccPaySignDao.getUserSign(bankcardno, shopacc.shopaccno) + if (null != paySign) { + if (person.userid != paySign.userid) { + throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "银行卡持有人错误!") + } + + return paySign.isSignFlag + } + } + return false + } + + override fun applyUserYnrccPaySign(param: YnrccPaySignApplyParam): YnrccPaySignApplyResponse { + val person = personDao.findByUserid(param.userid) + ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "用户<${param.userid}>不存在") + val shopacc = shopaccDao.findByShopaccno(param.shopaccno) + ?: throw TransactionProcessException(TradeErrorCode.SHOP_NOT_EXISTS, "商户<${param.shopaccno}>不存在") + val bankCard = cardDao.findCardByCardnoAndCardtype(param.bankcardno.trim(), ConstantUtil.CARDTYPE_BANKCARD) + if (null != bankCard && person.userid != bankCard.userid) { + throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "银行卡持有人错误!") + } + val idType = IDTypes.findByValue(person.idtype) + if (idType < 0) { + throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "证件类型未识别[${person.idtype}]!") + } + sourceTypeService.checkShopSourceType(shopacc.shopaccno, TradeDict.PAYTYPE_YNRCC_PAY, false) + + val isAuthSign = ynrccPaySignDao.countByBankcardnoAndSignStatus(param.bankcardno, shopacc.shopaccno) > 0 + var userSign = ynrccPaySignDao.getUserSign(param.bankcardno, shopacc.shopaccno) ?: TYnrccPaySign().apply { + this.bankcardno = param.bankcardno.trim() + this.bankcardno = shopacc.shopaccno + this.userid = person.userid + this.status = TradeDict.STATUS_NORMAL + this.isSignFlag = false + this.createtime = systemUtilService.sysdatetime.hostdatetime + } + if (person.userid != userSign.userid) { + throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "银行卡持有人不匹配!") + } else if (userSign.isSignFlag) { + throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "该卡已签约!") + } + if (StringUtil.isEmpty(userSign.id)) { + ynrccPaySignDao.save(userSign) //新创建的保存申请记录 + } + + val signDataResp = ynrccNetPayService.doApplyYnrccPaySign(shopacc.shopaccno) + if (YnrccPayUtil.SUCCESS != signDataResp.code) { + throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, signDataResp.message) + } + + val resp = YnrccPaySignApplyResponse() + resp.retcode = 0 + resp.retmsg = "success" + resp.signNo = userSign.id + resp.isAuthSign = isAuthSign + resp.plain = signDataResp.plain + resp.signature = signDataResp.signature + resp.signUserData = YnrccPaySignUserData().apply { + this.name = person.name + this.idType = idType.toString() + this.idNo = person.idno + this.acNo = userSign.bankcardno + } + logger.info("申请签约返回:" + YnrccPayUtil.toJson(resp)) + return resp + } + + override fun confirmUserYnrccPaySign(param: YnrccPaySignConfirmParam): YnrccPaySignConfirmResponse { + val userSign = ynrccPaySignDao.getById(param.signNo.toString()) + ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "签约申请记录<${param.signNo}>不存在!") + + val data = ynrccNetPayService.doAnalysisSignature(userSign.shopaccno, param.plain, param.signature) + logger.info("签约确认:" + YnrccPayUtil.toJson(data)) + val respCode = data["RespCode"] + if (YnrccPayUtil.SUCCESS != respCode) { + val errmsg = YnrccPayUtil.errcode.firstOrNull { + it.second.code == respCode + }?.second?.msg + throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "$respCode $errmsg") + } + + //签约成功 + if (data["CustomerAcNo"] != userSign.bankcardno) { + throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "支付账号与签约号不匹配!") + } else if (userSign.isSignFlag && data["CustomerSignNo"] != userSign.customerSignNo) { + throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "用户已签约且快捷支付协议号不一致!") + } + + if (!userSign.isSignFlag) { + userSign.isSignFlag = true + userSign.customerSignNo = data["CustomerSignNo"]?.trim() + userSign.signTime = systemUtilService.sysdatetime.hostdatetime + ynrccPaySignDao.save(userSign) + } + + return YnrccPaySignConfirmResponse().apply { + this.retcode = 0 + this.retmsg = "success" + this.signNo = userSign.id + this.data = data + } + } + + override fun cancelUserYnrccPaySign(param: YnrccPaySignCancelParam): YnrccPaySignCancelResponse { + val userSign = ynrccPaySignDao.getUserSign(param.bankcardno.trim(), param.shopaccno) + ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "签约记录不存在或已解约!") + if (userSign.userid != param.userid) { + throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "持卡人错误!") + } else if (!userSign.isSignFlag) { + throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "该卡还未签约,不能解约!") + } + + val resp = YnrccPaySignCancelResponse() + val cancelResp = ynrccNetPayService.doCancelYnrccPaySign(userSign.shopaccno, userSign.customerSignNo) + if (YnrccPayUtil.SUCCESS == cancelResp.code) { + //解约成功 + userSign.status = TradeDict.STATUS_CLOSED + userSign.isSignFlag = false + userSign.cancelTime = systemUtilService.sysdatetime.hostdatetime + ynrccPaySignDao.save(userSign) + + resp.retcode = 0 + resp.retmsg = "success" + resp.signNo = userSign.id + return resp + } + + resp.retcode = 99 + resp.retmsg = cancelResp.message + return resp + } + + override fun queryUserYnrccPaySign(bankcardno: String, shopaccno: String): TYnrccPaySign { + return ynrccPaySignDao.getUserSign(bankcardno.trim(), shopaccno.trim()) + ?: throw RequestParamCheckException("银行卡签约记录不存在!") + } + + override fun doYnrccPayInit(transdtl: TTransactionMain, userSign: TYnrccPaySign): YnrccPayOrderResponse { + if (StringUtil.isEmpty(transdtl.refno) || null == transdtl.shopDtl || null == transdtl.shopDtl.amount) { + throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "流水初始化错误!") + } else if (TradeDict.DTL_STATUS_SUCCESS == transdtl.status) { + throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "非初始化交易流水!") + } else if (TradeDict.PAYTYPE_YNRCC_PAY != transdtl.sourceType || transdtl.shopDtl.shopaccno != userSign.shopaccno || transdtl.shopDtl.payInfo != userSign.customerSignNo) { + throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易流水与签约信息不符!") + } + + val refno = transdtl.refno + val shopaccno = transdtl.shopDtl.shopaccno + val amount = MoneyUtil.YuanToFen(transdtl.shopDtl.amount) + val transDateTime = "${transdtl.shopDtl.transdate}${transdtl.shopDtl.transtime}" + val billno = transdtl.outTradeNo //billno放附加信息 + val productInfo = "农商行网关快捷支付[${transdtl.shopDtl.transdesc}]"; //商品描述 + val person = personDao.findByUserid(userSign.userid) + ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "用户不存在!") + val orderResp = ynrccNetPayService.doYnrccPayInit(shopaccno, refno, amount, transDateTime, + productInfo, billno, person.name, person.email, userSign.customerSignNo) + + if (YnrccPayUtil.SUCCESS != orderResp.code) { + throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, orderResp.message) + } + + val resp = YnrccPayOrderResponse() + resp.retcode = 0 + resp.retmsg = "success" + resp.refno = refno + resp.billno = billno + resp.amount = transdtl.shopDtl.amount + resp.plain = orderResp.plain + resp.signature = orderResp.signature + + logger.info("下单返回:" + YnrccPayUtil.toJson(resp)) + return resp + } + + override fun doYnrccPayConfirm(transaction: TTransactionMain, plain: String, signature: String): AgentResponse { + if (TradeDict.DTL_STATUS_SUCCESS == transaction.status) { + throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水已入账!") + } + + val data = ynrccNetPayService.doAnalysisSignature(transaction.shopDtl.shopaccno, plain, signature) + logger.info("支付确认:" + YnrccPayUtil.toJson(data)) + val respCode = data["RespCode"]?.trim() + val orderNo = data["OrderNo"]?.trim() + val payAmt = data["Amount"]?.trim() + val tradeNo = data["TransSeqNo"]?.trim() + if (transaction.refno != orderNo) { + throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "流水号错误,非此笔流水的确认信息!") + } else if (transaction.shopDtl.amount != payAmt?.toDouble()) { + throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "支付金额与流水交易金额不匹配!") + } + + val agentCode = YnrccPayUtil.errcode.firstOrNull{ + it.second.code == respCode + }?: org.springframework.data.util.Pair.of(AgentCode.COMMON_ERROR, + YnrccRespCode(respCode, "未知错误[$respCode]")) + + return AgentResponse().also { + it.code = agentCode.first + it.agentCode = agentCode.second.code + it.agentMsg = agentCode.first.message() + "-" + agentCode.second.msg + it.agentRefno = tradeNo + it.params = data + } + } + + +} \ No newline at end of file diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/ynrcc_netpay_business_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/ynrcc_netpay_business_service.kt new file mode 100644 index 00000000..ad3527ce --- /dev/null +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/ynrcc_netpay_business_service.kt @@ -0,0 +1,31 @@ +package com.supwisdom.dlpay.api.service + +import com.supwisdom.dlpay.agent.AgentResponse +import com.supwisdom.dlpay.agent.DtlStatus +import com.supwisdom.dlpay.api.bean.* +import com.supwisdom.dlpay.api.domain.TTransactionMain +import com.supwisdom.dlpay.citizencard.domain.TYnrccPaySign +import org.springframework.transaction.annotation.Transactional + +interface YnrccNetPayBusinessService { + @Transactional(rollbackFor = [Exception::class], readOnly = true) + fun checkUserYnrccPaySignStatus(userid: String, bankcardno: String, shopaccno: String): Boolean + + @Transactional(rollbackFor = [Exception::class]) + fun applyUserYnrccPaySign(param: YnrccPaySignApplyParam): YnrccPaySignApplyResponse + + @Transactional(rollbackFor = [Exception::class]) + fun confirmUserYnrccPaySign(param: YnrccPaySignConfirmParam): YnrccPaySignConfirmResponse + + @Transactional(rollbackFor = [Exception::class]) + fun cancelUserYnrccPaySign(param: YnrccPaySignCancelParam): YnrccPaySignCancelResponse + + @Transactional(rollbackFor = [Exception::class], readOnly = true) + fun queryUserYnrccPaySign(bankcardno: String, shopaccno: String): TYnrccPaySign + + @Transactional(rollbackFor = [Exception::class], readOnly = true) + fun doYnrccPayInit(transdtl: TTransactionMain, userSign: TYnrccPaySign): YnrccPayOrderResponse + + @Transactional(rollbackFor = [Exception::class]) + fun doYnrccPayConfirm(transaction: TTransactionMain, plain: String, signature: String): AgentResponse +} \ No newline at end of file diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/framework_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/framework_controller.kt index b80d5737..a55845fb 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/framework_controller.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/framework_controller.kt @@ -1,11 +1,8 @@ package com.supwisdom.dlpay.framework.controller import com.jcabi.manifests.Manifests -import com.supwisdom.dlpay.agent.service.YnrccNetPayService import com.supwisdom.dlpay.api.bean.ApiVersionResponse import com.supwisdom.dlpay.framework.ResponseBodyBuilder -import com.supwisdom.dlpay.framework.redisrepo.ApiClientRepository -import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestMapping @@ -15,13 +12,9 @@ import org.springframework.web.bind.annotation.RestController @RestController @RequestMapping("/api/common") class AboutController { - @Autowired - lateinit var ynrccNetPayService: YnrccNetPayService - @GetMapping("/version") fun version(): ResponseEntity { return try { - ynrccNetPayService.doYnrccPaySign() Manifests.read("Payapi-Version").let { ResponseEntity.ok(ResponseBodyBuilder.create() .success(ApiVersionResponse(it))) diff --git a/payapi/src/main/resources/payment_merchant.properties b/payapi/src/main/resources/payment_merchant.properties index b2f94dcc..f07cdea2 100644 --- a/payapi/src/main/resources/payment_merchant.properties +++ b/payapi/src/main/resources/payment_merchant.properties @@ -6,6 +6,6 @@ store_password=111111 # \u7528\u4E8E\u5546\u6237\u7B7E\u540D\u7684\u79D8\u94A5\u522B\u540D key_alias=merchant_key # \u79D8\u94A5\u5BC6\u7801 -key_password=111111 +key_password=881220 # \u9A8C\u7B7E\u79D8\u94A5\u522B\u540D alias_paygate=alias_paygate \ No newline at end of file