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
