From: kaixiang.xia Date: Wed, 20 Jan 2021 08:11:27 +0000 (+0800) Subject: 农商行快捷支付接口定义 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=0f6aba896d407e458a800062d09246ad42b8e8ca;p=epayment%2Ffood_payapi.git 农商行快捷支付接口定义 --- diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayConfirmParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayConfirmParam.java new file mode 100644 index 00000000..678c24e6 --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayConfirmParam.java @@ -0,0 +1,30 @@ +package com.supwisdom.dlpay.api.bean; + +import com.supwisdom.dlpay.api.APIRequestParam; +import com.supwisdom.dlpay.api.annotation.Sign; +import com.supwisdom.dlpay.api.exception.RequestParamCheckException; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotNull; + +@Getter +@Setter +public class YnrccPayConfirmParam extends APIRequestParam { + @Sign + @NotNull(message = "交易参考号不能为空") + private String refno; + + @Sign + @NotNull(message = "参数Plain不能为空") + private String plain; //农商行快捷支付参数 + + @Sign + @NotNull(message = "参数Signature不能为空") + private String signature; //农商行快捷支付参数 + + @Override + public boolean checkParam() throws RequestParamCheckException { + return true; + } +} diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayConfirmResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayConfirmResponse.java new file mode 100644 index 00000000..a9241c4e --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayConfirmResponse.java @@ -0,0 +1,18 @@ +package com.supwisdom.dlpay.api.bean; + +import lombok.*; + +import java.util.Map; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class YnrccPayConfirmResponse extends ApiResponse { + private String refno; + private String billno; + private Double amount; + + private Map data; //农商行快捷支付返回字段 +} diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayLimitModifyParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayLimitModifyParam.java new file mode 100644 index 00000000..6845d83a --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayLimitModifyParam.java @@ -0,0 +1,39 @@ +package com.supwisdom.dlpay.api.bean; + +import com.supwisdom.dlpay.api.APIRequestParam; +import com.supwisdom.dlpay.api.annotation.Sign; +import com.supwisdom.dlpay.api.exception.RequestParamCheckException; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotEmpty; + +@Getter +@Setter +public class YnrccPayLimitModifyParam extends APIRequestParam { + @Sign + @NotEmpty(message = "用户ID不能为空") + private String userid; + + @Sign + @NotEmpty(message = "银行卡号不能为空") + private String bankcardno; + + @Sign + @NotEmpty(message = "签约商户不能为空") + private String shopaccno; + + @Sign + @Min(value = 0L, message = "错误的单次限额") + private Integer singlelimit; //单次限额。单位:分 + + @Sign + @Min(value = 0L, message = "错误的单日限额") + private Integer daylimit; //日限额。单位:分 + + @Override + public boolean checkParam() throws RequestParamCheckException { + return true; + } +} diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayLimitModifyResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayLimitModifyResponse.java new file mode 100644 index 00000000..04607b4a --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayLimitModifyResponse.java @@ -0,0 +1,13 @@ +package com.supwisdom.dlpay.api.bean; + +import lombok.*; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class YnrccPayLimitModifyResponse extends ApiResponse { + private Integer singlelimit; //单次限额。单位:分 + private Integer daylimit; //日限额。单位:分 +} diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayOrderParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayOrderParam.java new file mode 100644 index 00000000..6e66c41a --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayOrderParam.java @@ -0,0 +1,56 @@ +package com.supwisdom.dlpay.api.bean; + +import com.supwisdom.dlpay.api.APIRequestParam; +import com.supwisdom.dlpay.api.annotation.Sign; +import com.supwisdom.dlpay.api.exception.RequestParamCheckException; +import com.supwisdom.dlpay.api.util.DateUtil; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Positive; + +@Getter +@Setter +public class YnrccPayOrderParam extends APIRequestParam { + @Sign + @NotNull(message = "用户唯一号不能为空") + private String userid; //用户userid + + @Sign + @NotNull(message = "银行卡号不能为空") + private String bankcardno; + + @Sign + @NotNull(message = "对接系统唯一订单号不能为空") + private String billno; + + @Sign + @NotNull(message = "交易金额不能为空") + @Positive(message = "交易金额必须大于零") + private Integer amount; + + @Sign + @NotNull(message = "请指定交易商户") + private String shopaccno; + + @Sign + @NotNull(message = "交易日期不能为空") + private String transdate; + @Sign + @NotNull(message = "交易时间不能为空") + private String transtime; + + @Sign + @NotNull(message = "流水类型不能为空") + private String dtltype; + + @Override + public boolean checkParam() throws RequestParamCheckException { + if (!DateUtil.checkDatetimeValid(transdate, DateUtil.DATE_FMT)) + throw new RequestParamCheckException("交易日期错误[yyyyMMdd]"); + if (!DateUtil.checkDatetimeValid(transtime, DateUtil.TIME_FMT)) + throw new RequestParamCheckException("交易时间错误[HHmmss]"); + return true; + } +} diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayOrderResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayOrderResponse.java new file mode 100644 index 00000000..c93e2cc1 --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayOrderResponse.java @@ -0,0 +1,18 @@ +package com.supwisdom.dlpay.api.bean; + +import lombok.*; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class YnrccPayOrderResponse extends ApiResponse { + private String refno; //核心平台流水号 + private String billno; //订单号 + private Double amount; //支付金额 + + //农商行快捷支付参数 + private String plain; + private String signature; +} diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayRefundParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayRefundParam.java new file mode 100644 index 00000000..decc341c --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayRefundParam.java @@ -0,0 +1,51 @@ +package com.supwisdom.dlpay.api.bean; + +import com.supwisdom.dlpay.api.APIRequestParam; +import com.supwisdom.dlpay.api.annotation.Sign; +import com.supwisdom.dlpay.api.exception.RequestParamCheckException; +import com.supwisdom.dlpay.api.util.DateUtil; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.StringUtils; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +@Getter +@Setter +public class YnrccPayRefundParam extends APIRequestParam { + @Sign + private String refno; + @Sign + private String billno; + @Sign + private String shopaccno; + + @Sign + @Min(value = 0L, message = "错误的退款金额") + private Integer refundAmount; + + @Sign + @NotNull(message = "撤销或退款流水号不能为空") + private String requestbillno; + @Sign + @NotNull(message = "交易日期不能为空") + private String transdate; + @Sign + @NotNull(message = "交易时间不能为空") + private String transtime; + + @Override + public boolean checkParam() throws RequestParamCheckException { + if (StringUtils.isEmpty(refno) && (StringUtils.isEmpty(billno) || StringUtils.isEmpty(shopaccno))) { + throw new RequestParamCheckException("原流水唯一号不能为空"); + } + if (!DateUtil.checkDatetimeValid(transdate, DateUtil.DATE_FMT)) { + throw new RequestParamCheckException("交易日期错误[yyyyMMdd]"); + } + if (!DateUtil.checkDatetimeValid(transtime, DateUtil.TIME_FMT)) { + throw new RequestParamCheckException("交易时间错误[HHmmss]"); + } + return true; + } +} diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayRefundResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayRefundResponse.java new file mode 100644 index 00000000..975abde2 --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayRefundResponse.java @@ -0,0 +1,14 @@ +package com.supwisdom.dlpay.api.bean; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Setter +public class YnrccPayRefundResponse extends ApiResponse { + private String refundRefno; //退款流水号 +} diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignApplyParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignApplyParam.java new file mode 100644 index 00000000..581316b8 --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignApplyParam.java @@ -0,0 +1,30 @@ +package com.supwisdom.dlpay.api.bean; + +import com.supwisdom.dlpay.api.APIRequestParam; +import com.supwisdom.dlpay.api.annotation.Sign; +import com.supwisdom.dlpay.api.exception.RequestParamCheckException; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotEmpty; + +@Getter +@Setter +public class YnrccPaySignApplyParam extends APIRequestParam { + @Sign + @NotEmpty(message = "用户ID不能为空") + private String userid; + + @Sign + @NotEmpty(message = "银行卡号不能为空") + private String bankcardno; + + @Sign + @NotEmpty(message = "签约商户不能为空") + private String shopaccno; + + @Override + public boolean checkParam() throws RequestParamCheckException { + return true; + } +} diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignApplyResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignApplyResponse.java new file mode 100644 index 00000000..4d43405d --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignApplyResponse.java @@ -0,0 +1,20 @@ +package com.supwisdom.dlpay.api.bean; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Setter +public class YnrccPaySignApplyResponse extends ApiResponse { + private String signNo; //签约号 + private boolean authSign = false; //是否授权签约 + + //农商行快捷支付参数 + private String plain; + private String signature; + private YnrccPaySignUserData signUserData; +} diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignCancelParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignCancelParam.java new file mode 100644 index 00000000..17e3b57b --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignCancelParam.java @@ -0,0 +1,30 @@ +package com.supwisdom.dlpay.api.bean; + +import com.supwisdom.dlpay.api.APIRequestParam; +import com.supwisdom.dlpay.api.annotation.Sign; +import com.supwisdom.dlpay.api.exception.RequestParamCheckException; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotEmpty; + +@Getter +@Setter +public class YnrccPaySignCancelParam extends APIRequestParam { + @Sign + @NotEmpty(message = "用户ID不能为空") + private String userid; + + @Sign + @NotEmpty(message = "银行卡号不能为空") + private String bankcardno; + + @Sign + @NotEmpty(message = "签约商户不能为空") + private String shopaccno; + + @Override + public boolean checkParam() throws RequestParamCheckException { + return true; + } +} diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignCancelResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignCancelResponse.java new file mode 100644 index 00000000..2911c4ef --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignCancelResponse.java @@ -0,0 +1,12 @@ +package com.supwisdom.dlpay.api.bean; + +import lombok.*; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class YnrccPaySignCancelResponse extends ApiResponse { + private String signNo; //签约号 +} diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignConfirmParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignConfirmParam.java new file mode 100644 index 00000000..136bc588 --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignConfirmParam.java @@ -0,0 +1,31 @@ +package com.supwisdom.dlpay.api.bean; + +import com.supwisdom.dlpay.api.APIRequestParam; +import com.supwisdom.dlpay.api.annotation.Sign; +import com.supwisdom.dlpay.api.exception.RequestParamCheckException; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@Getter +@Setter +public class YnrccPaySignConfirmParam extends APIRequestParam { + @Sign + @NotEmpty(message = "签约号不能为空") + private String signNo; //申请时返回的签约号 + + @Sign + @NotNull(message = "参数Plain不能为空") + private String plain; //农商行快捷支付参数 + + @Sign + @NotNull(message = "参数Signature不能为空") + private String signature; //农商行快捷支付参数 + + @Override + public boolean checkParam() throws RequestParamCheckException { + return true; + } +} diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignConfirmResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignConfirmResponse.java new file mode 100644 index 00000000..dfc871cb --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignConfirmResponse.java @@ -0,0 +1,16 @@ +package com.supwisdom.dlpay.api.bean; + +import lombok.*; + +import java.util.Map; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class YnrccPaySignConfirmResponse extends ApiResponse { + private String signNo; + + private Map data; //农商行快捷支付返回字段 +} diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignUserData.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignUserData.java new file mode 100644 index 00000000..0ff52b83 --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignUserData.java @@ -0,0 +1,17 @@ +package com.supwisdom.dlpay.api.bean; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Setter +public class YnrccPaySignUserData { + private String name; //姓名 + private String idType; //证件类型 + private String idNo; //证件号码 + private String acNo; //支付账号 +} diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ConsumePropxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ConsumePropxy.java index 62584f7c..18f1521d 100644 --- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ConsumePropxy.java +++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ConsumePropxy.java @@ -24,4 +24,14 @@ public interface ConsumePropxy { @PostMapping("/qrcodequery") DoorQrcodeResponse qrcodequery(@RequestBody DoorQRCodeParam param); + + @PostMapping("/ynrccpay/order") + YnrccPayOrderResponse ynrccPayOrder(@RequestBody YnrccPayOrderParam param); + + @PostMapping("/ynrccpay/confirm") + YnrccPayConfirmResponse ynrccPayConfirm(@RequestBody YnrccPayConfirmParam param); + + @PostMapping("/ynrccpay/refund") + YnrccPayRefundResponse ynrccPayRefund(@RequestBody YnrccPayRefundParam param); + } diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java index 329c29ea..e1a5991d 100644 --- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java +++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java @@ -78,4 +78,16 @@ public interface UserProxy { @PostMapping("/api/user/queryCitizenCard") DoorQrcodeResponse queryCitizenCard(@RequestParam("uid") String uid); + + @PostMapping("/api/user/ynrccpaySignApply") + YnrccPaySignApplyResponse applyYnrccPaySign(@RequestBody YnrccPaySignApplyParam param); + + @PostMapping("/api/user/ynrccpaySignConfirm") + YnrccPaySignConfirmResponse confirmYnrccPaySign(@RequestBody YnrccPaySignConfirmParam param); + + @PostMapping("/api/user/ynrccpaySignCancel") + YnrccPaySignCancelResponse cancelYnrccPaySign(@RequestBody YnrccPaySignCancelParam param); + + @PostMapping("/api/user/ynrccpayModifyLimit") + YnrccPayLimitModifyResponse modifyYnrccPayLimit(@RequestBody YnrccPayLimitModifyParam param); } diff --git a/payapi/build.gradle b/payapi/build.gradle index e0297651..ce57fe2b 100644 --- a/payapi/build.gradle +++ b/payapi/build.gradle @@ -115,6 +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 '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 new file mode 100644 index 00000000..0a481dde Binary files /dev/null and b/payapi/libs/ynrcc-mbp-1.0-RELEASE.jar differ diff --git a/payapi/sql/update-210106.sql b/payapi/sql/update-210106.sql new file mode 100644 index 00000000..acf987ce --- /dev/null +++ b/payapi/sql/update-210106.sql @@ -0,0 +1,10 @@ +-- 农商行网关支付 +INSERT INTO "tb_sourcetype" ("sourcetype_id", "sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable", "pay_subjno", "deposite_subjno", "tplusn", "start_chktime", "tenantid") +VALUES ('B837FFDD20C0CA07E05011AC03000113', 'ynrccpay', 't', '农商行网关支付', 't', 'f', 't', 'f', 't', '112235', '-', 1, null, '{tenantid}'); +commit; + +--新加农商行支付款 +INSERT INTO "tb_subject" ("subjid","subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid") +VALUES (33, '112235', 1, 'y', 1, '1122', '20210106', 2, '农商行支付款', 1, '{tenantid}'); +commit; + diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/ConcatUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/ConcatUtil.java new file mode 100644 index 00000000..13151143 --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/ConcatUtil.java @@ -0,0 +1,30 @@ +package com.supwisdom.dlpay.agent.ynrccpay; + +public class ConcatUtil { + private String delimiter; + private StringBuilder builder; + + public ConcatUtil(String delimiter) { + if (delimiter == null) { + throw new RuntimeException("Delimiter must not be null"); + } + this.delimiter = delimiter; + builder = new StringBuilder(); + } + + public ConcatUtil add(String field) { + if (field == null) { + throw new RuntimeException("added value must not be null"); + } + if (builder.length() > 0) { + builder.append(this.delimiter); + } + builder.append(field); + return this; + } + + @Override + public String toString() { + return builder.toString(); + } +} 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 new file mode 100644 index 00000000..17959f36 --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/YnrccPayUtil.java @@ -0,0 +1,40 @@ +package com.supwisdom.dlpay.agent.ynrccpay; + + +import java.util.HashMap; +import java.util.Map; + +public class YnrccPayUtil { + + 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 TRANSNAME_IQSR="QueryMerchantEpay.do"; + + + /** + * 交易码 + * */ + public static final String IQSR="IQSR"; + +} 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 new file mode 100644 index 00000000..2d94e307 --- /dev/null +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/ynrcc_netpay_service_impl.kt @@ -0,0 +1,62 @@ +package com.supwisdom.dlpay.agent.service.impl + +import com.supwisdom.dlpay.agent.service.YnrccNetPayService +import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayUtil +import com.supwisdom.dlpay.api.service.SourceTypeService +import com.supwisdom.dlpay.framework.service.SystemUtilService +import org.springframework.http.HttpEntity +import org.springframework.http.HttpHeaders +import org.springframework.http.MediaType +import org.springframework.http.ResponseEntity +import org.springframework.http.converter.StringHttpMessageConverter +import org.springframework.stereotype.Service +import org.springframework.util.LinkedMultiValueMap +import org.springframework.util.MultiValueMap +import org.springframework.web.client.RestTemplate +import java.nio.charset.StandardCharsets + +@Service +class YnrccNetPayServiceImpl(val restTemplate: RestTemplate, + val systemUtilService: SystemUtilService, + val sourceTypeService: SourceTypeService): YnrccNetPayService { + + private fun postForm(url: String, params: Map): ResponseEntity { + val httpHeaders = HttpHeaders() + httpHeaders.contentType = MediaType.APPLICATION_FORM_URLENCODED //Form表单提交 + + val requestParams = LinkedMultiValueMap() + params.forEach(requestParams::add) + val httpEntity = HttpEntity>(requestParams, httpHeaders) + + restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8) //UTF-8接收 + return restTemplate.postForEntity(url, httpEntity, String::class.java) + } + + override fun doYnrccPaySign() { + 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}") + } else { + //fail + println("return status=${resp.statusCodeValue},json=${resp.body}") + } + } +} \ 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 new file mode 100644 index 00000000..e6ab5fb1 --- /dev/null +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/ynrcc_netpay_service.kt @@ -0,0 +1,5 @@ +package com.supwisdom.dlpay.agent.service + +interface YnrccNetPayService { + fun doYnrccPaySign() +} \ 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 692be0c0..d539a41d 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 @@ -838,5 +838,57 @@ class ConsumeAPIController { }) } + /** + * ============================================================================ + * 农商行网关快捷支付【初始化下单】 + * ============================================================================ + * */ + @PostMapping("/ynrccpay/order") + fun ynrccPayOrder(@Valid @RequestBody param: YnrccPayOrderParam): ResponseEntity{ + val success=true + if(success){ + return ResponseEntity.ok(ResponseBodyBuilder.create() + .success(YnrccPayOrderResponse(), "交易初始化成功")) + } + + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>")) + } + + /** + * ============================================================================ + * 农商行网关快捷支付【下单支付确认】 + * ============================================================================ + * */ + @PostMapping("/ynrccpay/confirm") + fun ynrccPayConfirm(@Valid @RequestBody param: YnrccPayConfirmParam): ResponseEntity { + val success=true + if(success){ + return ResponseEntity.ok(ResponseBodyBuilder.create() + .success(YnrccPayConfirmResponse(), "交易初始化成功")) + } + + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>")) + + } + + /** + * ============================================================================ + * 农商行网关快捷支付【退款】 + * ============================================================================ + * */ + @PostMapping("/ynrccpay/refund") + fun ynrccPayRefund(@Valid @RequestBody param:YnrccPayRefundParam): ResponseEntity{ + val success=true + if(success){ + return ResponseEntity.ok(ResponseBodyBuilder.create() + .success(YnrccPayRefundResponse(), "交易初始化成功")) + } + + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>")) + + } } 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 0171cede..90cbd5cd 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 @@ -20,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.* import java.net.URLDecoder +import javax.validation.Valid @RestController @RequestMapping("/api/user") @@ -446,4 +447,76 @@ class UserAPIController { .fail(ret.retcode, ret.retmsg)) } } + + /** + * ============================================================================ + * 农商行快捷支付【签约申请】 + * ============================================================================ + * */ + @PostMapping("/ynrccpaySignApply") + fun applyYnrccPaySign(@Valid @RequestBody param: YnrccPaySignApplyParam): ResponseEntity { + val success=true + if(success){ + return ResponseEntity.ok(ResponseBodyBuilder.create() + .success(YnrccPaySignApplyResponse(), "交易初始化成功")) + } + + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>")) + + } + + /** + * ============================================================================ + * 农商行快捷支付【签约确认】 + * ============================================================================ + * */ + @PostMapping("/ynrccpaySignConfirm") + fun confirmYnrccPaySign(@Valid @RequestBody param:YnrccPaySignConfirmParam): ResponseEntity{ + val success=true + if(success){ + return ResponseEntity.ok(ResponseBodyBuilder.create() + .success(YnrccPaySignConfirmResponse(), "交易初始化成功")) + } + + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>")) + + } + + /** + * ============================================================================ + * 农商行快捷支付【解约】 + * ============================================================================ + * */ + @PostMapping("/ynrccpaySignCancel") + fun cancelYnrccPaySign(@Valid @RequestBody param:YnrccPaySignCancelParam):ResponseEntity{ + val success=true + if(success){ + return ResponseEntity.ok(ResponseBodyBuilder.create() + .success(YnrccPaySignCancelResponse(), "交易初始化成功")) + } + + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>")) + + } + + /** + * ============================================================================ + * 农商行快捷支付【修改限额】 + * ============================================================================ + * */ + @PostMapping("/ynrccpayModifyLimit") + fun modifyYnrccPayLimit(@Valid @RequestBody param:YnrccPayLimitModifyParam):ResponseEntity{ + val success=true + if(success){ + return ResponseEntity.ok(ResponseBodyBuilder.create() + .success(YnrccPayLimitModifyResponse(), "交易初始化成功")) + } + + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>")) + + } } 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 a55845fb..b80d5737 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,8 +1,11 @@ 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 @@ -12,9 +15,13 @@ 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/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt index 339e607b..0fc534c9 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt @@ -6,7 +6,6 @@ import org.hibernate.annotations.GenericGenerator import org.springframework.security.core.GrantedAuthority import org.springframework.security.core.userdetails.UserDetails import javax.persistence.* -import javax.validation.constraints.NotNull @Entity @Table(name = "TB_MOBILE_USER",indexes = [Index(name = "mobile_user_loginid_idx", columnList = "loginid", unique = true)]) @@ -54,8 +53,7 @@ class TBMobileUser : UserDetails { * 登录id * */ - @Column(name = "loginid", length = 64) - @NotNull + @Column(name = "loginid", nullable = false, length = 64) var loginid: String = "" /** diff --git a/payapi/src/main/resources/payment_merchant.properties b/payapi/src/main/resources/payment_merchant.properties new file mode 100644 index 00000000..b2f94dcc --- /dev/null +++ b/payapi/src/main/resources/payment_merchant.properties @@ -0,0 +1,11 @@ +development=no +# \u8BC1\u4E66\u8DEF\u5F84,\u5FC5\u987B\u6307\u5B9A\u670D\u52A1\u5668\u7AEF\u8BC1\u4E66\u5BB9\u5668\u7EDD\u5BF9\u8DEF\u5F84 +cafile=D:/ynrccpay/merchant.jks +# \u8BC1\u4E66\u5E93\u5BC6\u7801 +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 +# \u9A8C\u7B7E\u79D8\u94A5\u522B\u540D +alias_paygate=alias_paygate \ No newline at end of file