中间缴费参数存表
diff --git a/payapi/sql/update-210106.sql b/payapi/sql/update-210106.sql
index 45a6a77..513f317 100644
--- a/payapi/sql/update-210106.sql
+++ b/payapi/sql/update-210106.sql
@@ -36,4 +36,23 @@
INSERT INTO "public"."tb_sourcetype_config"("id", "config_name", "config_value", "configid", "globalflag", "sourcetype", "tenantid") VALUES ('27', '农商行网关支付商户名', NULL, 'ynrcc.netpay.Mer_IdName', 'f', 'ynrccpay', '{tenantid}');
INSERT INTO "public"."tb_sourcetype_config"("id", "config_name", "config_value", "configid", "globalflag", "sourcetype", "tenantid") VALUES ('28', '农商行网关支付回调地址', NULL, 'ynrcc.netpay.MerURL', 'f', 'ynrccpay', '{tenantid}');
INSERT INTO "public"."tb_sourcetype_config"("id", "config_name", "config_value", "configid", "globalflag", "sourcetype", "tenantid") VALUES ('25', '农商行网关支付地址', 'https://ebank.ynrcc.com/pweb/%s?LoginType=C&_locale=zh_CN&BankId=9999', 'ynrcc.netpay.URL', 't', 'ynrccpay', '{tenantid}');
+commit;
+
+CREATE TABLE tb_ynrccpay_thirdapp (
+ id varchar(32) NOT NULL,
+ mch_id varchar(20) NOT NULL,
+ mch_name varchar(200),
+ app_id varchar(60) NOT NULL,
+ token varchar(20) NOT NULL,
+ pubkey varchar(200) NOT NULL,
+ enable bool NOT NULL,
+ remark varchar(200)
+);
+ALTER TABLE tb_ynrccpay_thirdapp ADD CONSTRAINT tb_ynrccpay_thirdapp_pkey PRIMARY KEY (id);
+
+-- 测试环境或正式环境插入相应配置
+INSERT INTO "public"."tb_ynrccpay_thirdapp"("id", "mch_id", "mch_name", "app_id", "token", "pubkey", "enable", "remark")
+VALUES ('test', '1002010472001', '大理市信息化发展有限责任公司', '318D34955996AA035F3047939EA655FF', 'J6upjifWdQfRj3eh', '043AAF09775EC7EEEAAA2C66773F61BF18CE4D2DDDCBFFF43249113D849AD3FF4F8951889E8BF759EC80AF2EEA7473F9FEE97A7DE0B284FFD3312BD5021061F172', 't', '测试环境配置');
+--INSERT INTO "public"."tb_ynrccpay_thirdapp"("id", "mch_id", "mch_name", "app_id", "token", "pubkey", "enable", "remark")
+--VALUES ('dev', '1002010472001', '大理市信息化发展有限责任公司', '5FE60D156754432BAC1789AF35EEA592', 'Cg3Ue7mdkWv9g5mK', '0484D7043D24F3AC19E3F7CA03A166C2F813BCFE2141CB0E8559214A23E7A8DFDC9B4C1E9D9FBE9456621373652B145DDB91BD6DD484E8F04870560E7A16F5AB2C', 't', '生产环境配置');
commit;
\ No newline at end of file
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java
index 4b3ace3..dfe5630 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java
@@ -32,4 +32,10 @@
List<TCard> findCitizencardByCardphyidWithoutOldId(String cardphyid, String oldId);
TCard getById(String id);
+
+ @Query("select count(t.id) from TCard t where t.status='normal' and t.cardtype='bankcard' and t.cardno=?1 ")
+ int countByBankCardNo(String bankcardno);
+
+ @Query("select count(t.id) from TCard t where t.status='normal' and t.cardtype='bankcard' and t.cardno=?1 and t.userid=?2 ")
+ int countByBankCardNoAndUserid(String bankcardno, String userid);
}
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
index adc6075..752bba4 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/citizencard/dao/YnrccPaySignDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/dao/YnrccPaySignDao.java
@@ -28,4 +28,10 @@
@Query("from TYnrccPaySign t where t.userid=?1 and t.bankcardno=?2 and t.status='normal' and t.signFlag is true")
List<TYnrccPaySign> queryActiveSignsByUseridAndBankcardno(String userid, String bankcardno);
+
+ @Query("select count(t.id) from TYnrccPaySign t where t.bankcardno=?1 and t.status='normal' ")
+ int countByBankcardno(String bankcardno);
+
+ @Query("select count(t.id) from TYnrccPaySign t where t.bankcardno=?1 and t.userid=?2 and t.status='normal' ")
+ int countByBankcardnoAndUserid(String bankcardno, String userid);
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/citizencard/dao/YnrccPayThirdappDao.java b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/dao/YnrccPayThirdappDao.java
new file mode 100644
index 0000000..f20a8c4
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/dao/YnrccPayThirdappDao.java
@@ -0,0 +1,12 @@
+package com.supwisdom.dlpay.citizencard.dao;
+
+import com.supwisdom.dlpay.citizencard.domain.TYnrccPayThirdapp;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+public interface YnrccPayThirdappDao extends JpaRepository<TYnrccPayThirdapp, String> {
+ @Query("from TYnrccPayThirdapp t where t.enable is true ")
+ List<TYnrccPayThirdapp> queryYnrccPayThirdConfig();
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/citizencard/domain/TYnrccPayThirdapp.java b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/domain/TYnrccPayThirdapp.java
new file mode 100644
index 0000000..b4ef460
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/domain/TYnrccPayThirdapp.java
@@ -0,0 +1,118 @@
+package com.supwisdom.dlpay.citizencard.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * 大理农商行快捷支付第三方中间缴费业务
+ * 对接参数配置表
+ * */
+@Entity
+@Table(name = "TB_YNRCCPAY_THIRDAPP")
+public class TYnrccPayThirdapp {
+
+ @Id
+ @Column(name = "id", unique = true, nullable = false, length = 32)
+ private String id;
+
+ @Column(name = "mch_id", nullable = false, length = 20)
+ private String mchId;
+
+ @Column(name = "mch_name", nullable = false, length = 200)
+ private String mchName;
+
+ @Column(name = "app_id", nullable = false, length = 60)
+ private String appId;
+
+ @Column(name = "token", nullable = false, length = 20)
+ private String token;
+
+ @Column(name = "pubkey", nullable = false, length = 200)
+ private String pubkey;
+
+ @Column(name = "enable", nullable = false, length = 20)
+ private boolean enable;
+
+ @Column(name = "remark", length = 200)
+ private String remark;
+
+ public TYnrccPayThirdapp() {
+ }
+
+ public TYnrccPayThirdapp(String id, String mchId, String mchName, String appId, String token, String pubkey, boolean enable, String remark) {
+ this.id = id;
+ this.mchId = mchId;
+ this.mchName = mchName;
+ this.appId = appId;
+ this.token = token;
+ this.pubkey = pubkey;
+ this.enable = enable;
+ this.remark = remark;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getMchId() {
+ return mchId;
+ }
+
+ public void setMchId(String mchId) {
+ this.mchId = mchId;
+ }
+
+ public String getMchName() {
+ return mchName;
+ }
+
+ public void setMchName(String mchName) {
+ this.mchName = mchName;
+ }
+
+ public String getAppId() {
+ return appId;
+ }
+
+ public void setAppId(String appId) {
+ this.appId = appId;
+ }
+
+ public String getToken() {
+ return token;
+ }
+
+ public void setToken(String token) {
+ this.token = token;
+ }
+
+ public String getPubkey() {
+ return pubkey;
+ }
+
+ public void setPubkey(String pubkey) {
+ this.pubkey = pubkey;
+ }
+
+ public boolean isEnable() {
+ return enable;
+ }
+
+ public void setEnable(boolean enable) {
+ this.enable = enable;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+}
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
index 65f8145..bd6be6c 100644
--- 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
@@ -12,7 +12,6 @@
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
@@ -20,6 +19,7 @@
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.dao.YnrccPayThirdappDao
import com.supwisdom.dlpay.citizencard.domain.TYnrccPaySign
import com.supwisdom.dlpay.exception.TransactionProcessException
import com.supwisdom.dlpay.framework.dao.ShopaccDao
@@ -38,7 +38,7 @@
val shopaccDao: ShopaccDao,
val ynrccPaySignDao: YnrccPaySignDao,
val cardDao: CardDao,
- val transactionMainDao: TransactionMainDao,
+ val ynrccPayThirdappDao: YnrccPayThirdappDao,
val transactionService: TransactionService,
val systemUtilService: SystemUtilService,
val sourceTypeService: SourceTypeService,
@@ -323,23 +323,50 @@
}
override fun doYnrccPayThirdAuth(thirdSrv: String, bankcardno: String, userid: String): YnrccPayThirdAuthResponse {
+ logger.info("中间缴费请求参数:thirdSrv=[$thirdSrv],bankcardno=[$bankcardno],userid=[$userid]")
val resp = YnrccPayThirdAuthResponse()
resp.retcode = 99
- //TODO: 根据第三方服务标识thirdSrv获取配置信息
- val mchId = ""
- val appId = ""
- val token = ""
- val pubKey = ""
- val handler = YNRCCOpenServiceApi.getInstance(mchId, appId, token, pubKey)
+ val thirdConfs = ynrccPayThirdappDao.queryYnrccPayThirdConfig()
+ if (null == thirdConfs || thirdConfs.isEmpty()) {
+ resp.retcode = 99
+ resp.retmsg = "中间缴费对接参数未配置!"
+ return resp
+ } else if (thirdConfs.size != 1) {
+ resp.retcode = 99
+ resp.retmsg = "中间缴费对接参数未指定!"
+ return resp
+ }
+ val config = thirdConfs[0] //获取配置信息(第三方服务标识thirdSrv暂时无用)
+ var handler = YNRCCOpenServiceApi.getInstance(config.mchId, config.appId, config.token, config.pubkey)
//获取客户端sdk配置信息
val sdkConfigData = handler.getSDKConfigData()
//获取客户端SDK访问开放服务所需参数
val person = personDao.findByUserid(userid)
?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "用户不存在!")
- //TODO: 判断bankcard是否该userid所有
+ if (person.mobile.isNullOrBlank()) {
+ resp.retcode = 99
+ resp.retmsg = "用户手机号为空!"
+ return resp
+ }
+ //fixme: 判断bankcard是否该userid所有
+ if (ynrccPaySignDao.countByBankcardno(bankcardno?.trim()) > 0) {
+ if (ynrccPaySignDao.countByBankcardnoAndUserid(bankcardno?.trim(), person.userid) < 1) {
+ resp.retcode = 99
+ resp.retmsg = "银行卡持有人错误!"
+ return resp
+ }
+ } else if (cardDao.countByBankCardNo(bankcardno?.trim()) > 0) {
+ if (cardDao.countByBankCardNoAndUserid(bankcardno?.trim(), person.userid) < 1) {
+ resp.retcode = 99
+ resp.retmsg = "银行卡持有人错误!"
+ return resp
+ }
+ }
+
+// val user = User("测试", "420117198802234181", "13584821704", "623100095486551526") //测试User
val user = User(person.name, person.idno, person.mobile, bankcardno)
val access2ServiceData = handler.getAccess2ServiceData(user)
@@ -354,6 +381,7 @@
}
resp.sdkConfigData = sdkConfigData
resp.access2ServiceData = access2ServiceData
+ logger.info("中间缴费成功返回:" + YnrccPayUtil.toJson(resp))
return resp
}
}
\ No newline at end of file