diff --git a/payapi/build.gradle b/payapi/build.gradle
index cdb07b4..7a4c6cf 100644
--- a/payapi/build.gradle
+++ b/payapi/build.gradle
@@ -115,7 +115,11 @@
 //    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.1.0-RELEASE.jar')
+    implementation files('libs/ynrcc-openapi-sdk-1.1.2-RELEASE.jar')
+
+    //大理农商行sdk需求jar
+    implementation 'cn.hutool:hutool-crypto:5.4.7'
+    implementation 'org.bouncycastle:bcprov-jdk15on:1.64'
 
     implementation 'log4j:log4j:1.2.17'
     implementation 'com.alibaba:fastjson:1.2.60'
diff --git a/payapi/libs/ynrcc-mbp-1.1.0-RELEASE.jar b/payapi/libs/ynrcc-mbp-1.1.0-RELEASE.jar
deleted file mode 100644
index 0aee6ef..0000000
--- a/payapi/libs/ynrcc-mbp-1.1.0-RELEASE.jar
+++ /dev/null
Binary files differ
diff --git a/payapi/libs/ynrcc-openapi-sdk-1.1.2-RELEASE.jar b/payapi/libs/ynrcc-openapi-sdk-1.1.2-RELEASE.jar
new file mode 100644
index 0000000..c3d54ee
--- /dev/null
+++ b/payapi/libs/ynrcc-openapi-sdk-1.1.2-RELEASE.jar
Binary files differ
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 d0a3474..38a6982 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
@@ -20,6 +20,7 @@
 
   public static final String SUCCESS = "ZF0000";
   public static final String WAIT_FOR_QUERY = "ZF0098"; //等待查询结果
+  public static final String NO_RECORDS_TODAY = "0406"; //当日无交易明细
 
 
   public static String toJson(Object obj) {
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 d8b0949..adc6075 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
@@ -5,6 +5,8 @@
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface YnrccPaySignDao extends JpaRepository<TYnrccPaySign, String> {
   @Query("from TYnrccPaySign t where t.bankcardno=?1 and t.shopaccno=?2 and t.status='normal'")
@@ -13,5 +15,17 @@
   @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);
 
+  @Query("from TYnrccPaySign t where t.bankcardno=?1 and t.shopaccno<>?2 and t.status='normal' and t.signFlag is true")
+  List<TYnrccPaySign> queryOtherShopSign(String bankcardno, String shopaccno);
+
   TYnrccPaySign getById(String id);
+
+  @Query("from TYnrccPaySign t where t.userid=?1 and t.status='normal' and t.signFlag is true")
+  List<TYnrccPaySign> queryActiveSignsByUserid(String userid);
+
+  @Query("from TYnrccPaySign t where t.bankcardno=?1 and t.status='normal' and t.signFlag is true")
+  List<TYnrccPaySign> queryActiveSignsByBankcardno(String bankcardno);
+
+  @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);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/PageRes.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/PageRes.java
new file mode 100644
index 0000000..03467f9
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/PageRes.java
@@ -0,0 +1,51 @@
+package com.supwisdom.dlpay.framework.util;
+
+import java.util.List;
+
+public class PageRes<T> {
+  private int pageNo = 1;
+  private int pageSize = 10;
+  private int totalCount = 0;
+  private int totalPages = 0;
+  private List<T> data;
+
+  public int getPageNo() {
+    return pageNo;
+  }
+
+  public void setPageNo(int pageNo) {
+    this.pageNo = pageNo;
+  }
+
+  public int getPageSize() {
+    return pageSize;
+  }
+
+  public void setPageSize(int pageSize) {
+    this.pageSize = pageSize;
+  }
+
+  public int getTotalCount() {
+    return totalCount;
+  }
+
+  public void setTotalCount(int totalCount) {
+    this.totalCount = totalCount;
+  }
+
+  public int getTotalPages() {
+    return totalPages;
+  }
+
+  public void setTotalPages(int totalPages) {
+    this.totalPages = totalPages;
+  }
+
+  public List<T> getData() {
+    return data;
+  }
+
+  public void setData(List<T> data) {
+    this.data = data;
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/UserMessageService.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/UserMessageService.java
new file mode 100644
index 0000000..842b9d9
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/UserMessageService.java
@@ -0,0 +1,11 @@
+package com.supwisdom.dlpay.system.service;
+
+import com.supwisdom.dlpay.api.bean.UserMessageData;
+import com.supwisdom.dlpay.framework.util.PageRes;
+import org.springframework.transaction.annotation.Transactional;
+
+public interface UserMessageService {
+  @Transactional(rollbackFor = Exception.class, readOnly = true)
+  PageRes<UserMessageData> queryMessageByUserid(String userid, int pageNo, int pageSize);
+
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserMessageServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserMessageServiceImpl.java
new file mode 100644
index 0000000..b5fa9ce
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserMessageServiceImpl.java
@@ -0,0 +1,49 @@
+package com.supwisdom.dlpay.system.service.impl;
+
+import com.supwisdom.dlpay.api.bean.UserMessageData;
+import com.supwisdom.dlpay.framework.util.PageRes;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.system.bean.CitizenCardShowBean;
+import com.supwisdom.dlpay.system.service.UserMessageService;
+import org.hibernate.query.internal.NativeQueryImpl;
+import org.hibernate.transform.Transformers;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class UserMessageServiceImpl implements UserMessageService {
+  @PersistenceContext
+  private EntityManager entityManager;
+
+  @Override
+  public PageRes<UserMessageData> queryMessageByUserid(String userid, int pageNo, int pageSize) {
+    StringBuffer querySql = new StringBuffer("select a.msgid,a.content,a.lastupdate,a.refno,b.transdesc,b.amount,a.userid " +
+        " from tb_msg a left join tb_persondtl b on a.refno=b.refno where a.userid=:userid order by a.lastupdate desc");
+    StringBuffer countSql = new StringBuffer("select count(a.msgid) as cnt " +
+        " from tb_msg a left join tb_persondtl b on a.refno=b.refno where a.userid=:userid ");
+
+    Query query = entityManager.createNativeQuery(querySql.toString());
+    Query countQuery = entityManager.createNativeQuery(countSql.toString());
+    query.setParameter("userid", userid.trim());
+    countQuery.setParameter("userid", userid.trim());
+    query.setFirstResult((pageNo - 1) * pageSize);
+    query.setMaxResults(pageSize); //分页显示
+    query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(UserMessageData.class));
+    List<UserMessageData> list = query.getResultList();
+    BigInteger cnt = (BigInteger) countQuery.getSingleResult();
+    PageRes<UserMessageData> page = new PageRes<>();
+    page.setPageNo(pageNo);
+    page.setPageSize(pageSize);
+    page.setTotalCount(cnt == null ? 0 : cnt.intValue());
+    page.setTotalPages(page.getTotalCount() % page.getPageSize() > 0 ? (page.getTotalCount() / page.getPageSize() + 1) : (page.getTotalCount() / page.getPageSize()));
+    page.setData(list == null ? new ArrayList<>(0) : list);
+    return page;
+  }
+}
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 c1e037b..3949c55 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,32 +1,22 @@
 package com.supwisdom.dlpay.agent.service.impl
 
 import com.csii.ynrcc.open.api.pay.YNRCCFastGateWayPayApi
+import com.csii.ynrcc.open.api.service.User
+import com.csii.ynrcc.open.api.service.YNRCCOpenServiceApi
 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.domain.TPerson
 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 com.supwisdom.dlpay.framework.util.*
 import mu.KotlinLogging
 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
@@ -72,9 +62,49 @@
         params["TransId"] = "IFSR"
         params["Mer_Id"] = merId.trim()
         params["MerURL"] = merUrl.trim()
+        params["PAY_MODE"] = "QS"
 
         //调SDK生成签名
         val signData = YNRCCFastGateWayPayApi.sign(params)
+        if (signData["Plain"].isNullOrEmpty() || signData["Signature"].isNullOrEmpty()) {
+            resp.code = "ZE0002"
+            resp.message = "签名计算错误！"
+            logger.error("签名后[Plain]和[Signature]参数为空！")
+            return resp
+        }
+
+        resp.code = YnrccPayUtil.SUCCESS
+        resp.message = "SUCCESS"
+        resp.plain = signData["Plain"]
+        resp.signature = signData["Signature"]
+        return resp
+    }
+
+    override fun doApplyAuthYnrccPaySign(shopaccno: String, oldCustomerSignNo: String): YnrccPayResp {
+        val resp = YnrccPayResp()
+        val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_YNRCC_PAY, shopaccno, false, false)
+        val merId = config[YnrccPayUtil.MER_ID]
+        if (merId.isNullOrEmpty()) {
+            resp.code = "ZE0001"
+            resp.message = "系统参数未配置[Mer_Id]"
+            logger.error(resp.error())
+            return resp
+        }
+
+        val params = hashMapOf<String, String>()
+        params["TransId"] = "IFSR"
+        params["Mer_Id"] = merId.trim()
+        params["CustomerSignNo"] = oldCustomerSignNo.trim()
+        params["PAY_MODE"] = "QS"
+
+        //调SDK生成签名
+        val signData = YNRCCFastGateWayPayApi.sign(params)
+        if (signData["Plain"].isNullOrEmpty() || signData["Signature"].isNullOrEmpty()) {
+            resp.code = "ZE0002"
+            resp.message = "签名计算错误！"
+            logger.error("签名后[Plain]和[Signature]参数为空！")
+            return resp
+        }
 
         resp.code = YnrccPayUtil.SUCCESS
         resp.message = "SUCCESS"
@@ -106,6 +136,7 @@
         params["TransId"] = "IFCR"
         params["Mer_Id"] = merId.trim()
         params["CustomerSignNo"] = customerSignNo
+        params["PAY_MODE"] = "Q"
 
         val signData = YNRCCFastGateWayPayApi.sign(params) //调SDK生成签名
         val plain = signData["Plain"]
@@ -149,22 +180,25 @@
         val result = restTemplate.postForEntity(url, httpEntity, String::class.java)
         if (200 == result.statusCodeValue) {
             //请求成功
+            logger.info("农商行网关快捷支付请求【$opt】返回：\nurl=[$url]\nResponse Body=[" + result.body + "]")
             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"]) {
+            logger.info("农商行网关快捷支付请求【$opt】返回：\nurl=[$url]\nResponse Plain=[" + YnrccPayUtil.toJson(resData) + "]")
+            val respCode = resData["RespCode"]?.trim()?.replace("\r\n", "")
+            return if (YnrccPayUtil.SUCCESS == respCode) {
+                resData["RespCode"] = respCode
                 resData["RespDesc"] = "SUCCESS"
                 resData
             } else {
-                val errcode = resData["RespCode"]
                 val errmsg = YnrccPayUtil.errcode.firstOrNull {
-                    it.second.code == errcode
+                    it.second.code == respCode
                 }?.second?.msg
-                resData["RespDesc"] = "$errcode $errmsg"  //设置失败信息
+                resData["RespCode"] = respCode
+                resData["RespDesc"] = "$respCode $errmsg"  //设置失败信息
                 resData
             }
         } else {
@@ -211,9 +245,16 @@
         params["CustomerSignNo"] = customerSignNo
         params["MerURL"] = merUrl
         params["MsgExt"] = extData
+        params["PAY_MODE"] = "QS"
 
         //调SDK生成签名
         val signData = YNRCCFastGateWayPayApi.sign(params)
+        if (signData["Plain"].isNullOrEmpty() || signData["Signature"].isNullOrEmpty()) {
+            resp.code = "ZE0002"
+            resp.message = "签名计算错误！"
+            logger.error("签名后[Plain]和[Signature]参数为空！")
+            return resp
+        }
 
         resp.code = YnrccPayUtil.SUCCESS
         resp.message = "SUCCESS"
@@ -247,6 +288,7 @@
         params["OrgMerchantSeqNo"] = orignRefno
         params["Amount"] = MoneyUtil.formatYuanToString(amount / 100.0)
         params["OrgMerchantDate"] = orignTransDate
+        params["PAY_MODE"] = "Q"
 
         val signData = YNRCCFastGateWayPayApi.sign(params) //调SDK生成签名
         val plain = signData["Plain"]
@@ -306,6 +348,7 @@
         params["Mer_IdName"] = merIdName.trim()
         params["OrderNo"] = orignRefno
         params["OrderDate"] = orignTransDate
+        params["PAY_MODE"] = "Q"
 
         val signData = YNRCCFastGateWayPayApi.sign(params) //调SDK生成签名
         val plain = signData["Plain"]
@@ -339,4 +382,48 @@
         return resp
     }
 
+    override fun doQueryYnrccPayChkfile(checkDate: String, shopaccno: 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, "MerchantCheckFileQry.do") //赋予接口名
+        val params = hashMapOf<String, String>()
+        params["TransId"] = "IDFR"
+        params["Mer_Id"] = merId.trim()
+        params["ClearDate"] = checkDate
+        params["PAY_MODE"] = "Q"
+
+        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.plain = result["Plain"] //对账单
+        }
+        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 f2e5bdc..127e319 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
@@ -8,15 +8,20 @@
 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.dao.TransactionMainDao
 import com.supwisdom.dlpay.api.domain.TTransactionMain
+import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.util.MoneyUtil
+import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Component
 
 interface YnrccNetPayService {
     fun doAnalysisSignature(shopaccno: String, plain: String, signature: String): Map<String, String>
 
-    fun doApplyYnrccPaySign(shopaccno: String): YnrccPayResp
+    fun doApplyYnrccPaySign(shopaccno: String): YnrccPayResp  //首次签约
+
+    fun doApplyAuthYnrccPaySign(shopaccno: String, oldCustomerSignNo: String): YnrccPayResp //授权签约
 
     fun doCancelYnrccPaySign(shopaccno: String, customerSignNo: String): YnrccPayResp
 
@@ -26,12 +31,16 @@
     fun doYnrccPayRefund(shopaccno: String, orignRefno: String, amount: Int, orignTransDate: String): YnrccPayResp
 
     fun doQueryYnrccPayResult(shopaccno: String, orignRefno: String, orignTransDate: String): YnrccPayResp
+
+    fun doQueryYnrccPayChkfile(checkDate: String, shopaccno: String): YnrccPayResp
 }
 
 @Component("ynrccpayAgent")
 class YnrccNetPayAgent: AgentPayService<DtlStatus>{
     @Autowired
     private lateinit var ynrccNetPayService: YnrccNetPayService
+    @Autowired
+    lateinit var transactionMainDao: TransactionMainDao
 
     private fun agentCode(code: String, msg: String?): org.springframework.data.util.Pair<AgentCode, YnrccRespCode> {
         return YnrccPayUtil.errcode.firstOrNull {
@@ -61,8 +70,12 @@
     }
 
     override fun refund(transaction: TTransactionMain): AgentResponse<DtlStatus> {
+        val originalDtl = transactionMainDao.findByRefno(transaction.reverseRefno)?:
+            throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS, "原始流水<${transaction.reverseRefno}>不存在")
+
+        //fixme:必须找原流水获取下单日期
         val resp = ynrccNetPayService.doYnrccPayRefund(transaction.shopDtl.shopaccno, transaction.reverseRefno,
-                MoneyUtil.YuanToFen(transaction.personDtl.amount), transaction.shopDtl.accdate)
+                MoneyUtil.YuanToFen(transaction.personDtl.amount), originalDtl.shopDtl.accdate)
         return AgentResponse<DtlStatus>().also {
             val code = agentCode(resp.code, resp.message)
             it.code = code.first
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/ynrccpay_checkfile_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/ynrccpay_checkfile_service.kt
new file mode 100644
index 0000000..0c7126e
--- /dev/null
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/ynrccpay_checkfile_service.kt
@@ -0,0 +1,157 @@
+package com.supwisdom.dlpay.agent.service
+
+import com.supwisdom.dlpay.agent.AgentCode
+import com.supwisdom.dlpay.agent.AgentResponse
+import com.supwisdom.dlpay.agent.CheckFileProvider
+import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayUtil
+import com.supwisdom.dlpay.api.domain.TSourceTypeCheckStatus
+import com.supwisdom.dlpay.api.domain.TTransactionChkfile
+import com.supwisdom.dlpay.api.service.SourceTypeService
+import com.supwisdom.dlpay.api.service.TransactionReconciliationService
+import com.supwisdom.dlpay.exception.TransactionException
+import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.util.ConstantUtil
+import mu.KotlinLogging
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Component
+
+@Component("ynrccpayCheckFileProvider")
+class YnrccpayCheckFileProvider : CheckFileProvider {
+    @Autowired
+    private lateinit var systemUtilService: SystemUtilService
+    @Autowired
+    private lateinit var transactionReconciliationService: TransactionReconciliationService
+    @Autowired
+    private lateinit var sourceTypeService: SourceTypeService
+    @Autowired
+    private lateinit var ynrccNetPayService:YnrccNetPayService
+
+    private val logger = KotlinLogging.logger { }
+
+    override fun acquireCheckFile(checkStatus: TSourceTypeCheckStatus): AgentResponse<TSourceTypeCheckStatus> {
+        try {
+            val billDate = checkStatus.checkAccdate
+            logger.info("【农商行网关快捷支付】对账单下载：download checkdate=【$billDate】")
+
+            val chkfile: TTransactionChkfile = transactionReconciliationService
+                .getTransactionChkfile(billDate, checkStatus.sourceType)?.let { file ->
+                    when (file.status) {
+                        ConstantUtil.CHKFILE_STATUS_INIT -> file //初始化直接返回
+                        ConstantUtil.CHKFILE_STATUS_ERROR -> reinitCheckFile(file) //错误或未对账的直接重新拉取
+                        else -> {
+                            when (checkStatus.forceRecheck) {
+                                true -> reinitCheckFile(file)  //对账已完成但强制重新对账
+                                false -> {
+                                    if (file.status == ConstantUtil.CHKFILE_STATUS_UNCHECK) {
+                                        file
+                                    } else {
+                                        throw TransactionException(-1, "【农商行网关快捷支付】该天[$billDate]已对账完成")
+                                    }
+                                } //对账已完成报错
+                            }
+                        }
+                    }
+                }
+                ?: transactionReconciliationService.saveInitTransactionChkfile(billDate, checkStatus.sourceType)
+
+            if (chkfile.status == ConstantUtil.CHKFILE_STATUS_UNCHECK) {
+                return successDownload("[$billDate]日对账数据已入库成功", checkStatus)
+            }
+
+            val shopaccno = ""
+            val resp = ynrccNetPayService.doQueryYnrccPayChkfile(billDate, shopaccno)
+            when (resp.code) {
+                YnrccPayUtil.SUCCESS -> {
+                    //TODO: 农商行网关快捷支付 对账文件解析
+                    val agentUrl = ""
+
+                    //成功
+                    return AgentResponse<TSourceTypeCheckStatus>().also {
+                        it.code = AgentCode.FAIL
+                        it.agentMsg = "获取对账文件逻辑暂缺"
+//                        it.payload = sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus.apply {
+//                            this.checkFileOk = false
+//                            this.chkfileUrl = agentUrl
+//                        })
+                    }
+
+                }
+                YnrccPayUtil.NO_RECORDS_TODAY -> {
+                    //当日无交易明细，也创建空记录
+                    transactionReconciliationService.doSuccessTransactionChkfile(chkfile, "请求银行返回：当日无交易明细")
+                    //成功
+                    return successDownload("当日无交易明细", checkStatus.apply {
+                        this.chkfileUrl = "none"
+                    })
+                }
+                else -> {
+                    //报错，退出对账单拉取
+                    logger.error("农商行网关快捷支付对账单下载[$billDate]报错:${resp.message}")
+                    chkfile.status = ConstantUtil.CHKFILE_STATUS_ERROR
+                    chkfile.remark = "请求获取对账文件报错：${resp.message}"
+                    transactionReconciliationService.saveOrUpdateTransactionChkfile(chkfile)
+
+                    //失败
+                    return AgentResponse<TSourceTypeCheckStatus>().also {
+                        it.code = AgentCode.FAIL
+                        it.agentMsg = chkfile.remark
+                        it.payload = sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus.apply {
+                            this.remark = chkfile.remark
+                        })
+                    }
+                }
+            }
+        } catch (et: TransactionException) {
+            return AgentResponse<TSourceTypeCheckStatus>().also {
+                it.code = AgentCode.FAIL
+                it.agentMsg = et.message
+                it.agentCode = "${et.code()}"
+                it.payload = sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus.apply {
+                    this.remark = et.message
+                })
+            }
+        }
+
+    }
+
+    override fun queryCheckFile(checkStatus: TSourceTypeCheckStatus?): AgentResponse<TSourceTypeCheckStatus> {
+        return AgentResponse<TSourceTypeCheckStatus>().also {
+            it.code = AgentCode.SUCCESS
+            it.agentMsg = "OK"
+            it.payload = checkStatus
+        }
+    }
+
+    override fun downloadCheckFile(checkStatus: TSourceTypeCheckStatus?): AgentResponse<TSourceTypeCheckStatus> {
+        return AgentResponse<TSourceTypeCheckStatus>().also {
+            it.code = AgentCode.SUCCESS
+            it.agentMsg = "OK"
+            it.payload = checkStatus
+        }
+    }
+
+    private fun reinitCheckFile(chkfile: TTransactionChkfile): TTransactionChkfile {
+        transactionReconciliationService.deleteTransactionChkdtls(chkfile.id) //删除明细
+        return transactionReconciliationService.saveOrUpdateTransactionChkfile(chkfile.apply {
+            this.status = ConstantUtil.CHKFILE_STATUS_INIT
+            this.result = ConstantUtil.CHKFILE_RESULT_NONE
+            this.remark = null
+            this.othercnt = 0
+            this.otheramt = 0.00
+            this.localcnt = 0
+            this.localamt = 0.00
+        }) //初始化chkfile
+    }
+
+    private fun successDownload(message: String, checkStatus: TSourceTypeCheckStatus): AgentResponse<TSourceTypeCheckStatus> {
+        return AgentResponse<TSourceTypeCheckStatus>().also {
+            it.code = AgentCode.SUCCESS
+            it.agentMsg = message
+            it.payload = sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus.apply {
+                this.checkFileOk = true
+                this.remark = message
+            })
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
index 1fda9f0..17d1d2e 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
@@ -48,6 +48,7 @@
                     .exception(undeclared.code(), undeclared, "业务处理错误"))
         }
 
+        ex.printStackTrace()
         return ResponseEntity.ok().body(ResponseBodyBuilder.create()
                 .exception(TradeErrorCode.BUSINESS_DEAL_ERROR, undeclared, "业务处理报错"))
     }
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 16ceadb..c9a6945 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
@@ -983,4 +983,37 @@
                 .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在"))
     }
 
+    /**
+     * 直接调第三方查询流水结果 （方便测试）
+     * */
+    @PostMapping("/thirdquery")
+    fun thirdToQueryResult(refno: String): ResponseEntity<Any> {
+        consumePayService.getTransactionMainDtl(refno, null, null)?.let {
+            agentQueryResultTask.queryResult(it, 0)
+            return ResponseEntity.ok(
+                ResponseBodyBuilder.create()
+                    .success("已成功进入查询异步查询队列")
+            )
+        } ?: return ResponseEntity.ok(
+            ResponseBodyBuilder.create()
+                .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在")
+        )
+    }
+
+    /**
+     * ============================================================================
+     *                           农商行网关快捷支付【第三方开放能力】
+     * ============================================================================
+     * */
+    @PostMapping("/ynrccpay/thirdAuth")
+    fun ynrccPayThirdAuth(@Valid @RequestBody param: YnrccPayThirdAuthParam): ResponseEntity<Any> {
+        val ret = ynrccNetPayBusinessService.doYnrccPayThirdAuth(param.thirdservice,param.bankcardno,param.userid)
+        return if (ret.retcode == 0) {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                .success(ret, "成功"))
+        } else {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                .fail(ret.retcode, ret.retmsg))
+        }
+    }
 }
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 1c6750c..8d8fb8f 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,7 +2,6 @@
 
 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.*
@@ -13,9 +12,11 @@
 import com.supwisdom.dlpay.mobile.service.MobileApiService
 import com.supwisdom.dlpay.system.bean.LevelBean
 import com.supwisdom.dlpay.system.service.PointsService
+import com.supwisdom.dlpay.system.service.UserMessageService
 import org.apache.commons.beanutils.BeanUtils
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
+import org.springframework.validation.annotation.Validated
 import org.springframework.web.bind.annotation.*
 import java.net.URLDecoder
 import javax.validation.Valid
@@ -41,6 +42,8 @@
     private lateinit var qrcodeService: QRCodeService
     @Autowired
     private lateinit var ynrccNetPayBusinessService: YnrccNetPayBusinessService
+    @Autowired
+    private lateinit var userMessageService: UserMessageService
 
     @PostMapping("/open")
     fun openAccount(@RequestBody param: OpenUserParam): ResponseEntity<Any> {
@@ -447,6 +450,26 @@
     }
 
     /**
+     * 查询用户消息
+     * */
+    @PostMapping("/queryMessage")
+    fun queryUserMessage(@Valid @RequestBody param: UserQueryMessageParam): ResponseEntity<Any> {
+        val userid = param.userid ?: throw RequestParamCheckException("用户ID不能为空")
+        val pageNo = param.pageNo ?: 1
+        val pageSize = param.pageSize ?: 10
+        val page = userMessageService.queryMessageByUserid(userid, pageNo, pageSize)
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+            .success(UserQueryMessageResponse().apply {
+                this.pageNo = page.pageNo
+                this.pageSize = page.pageSize
+                this.totalCount = page.totalCount
+                this.totalPages = page.totalPages
+                this.data = page.data
+            }, "success")
+        )
+    }
+
+    /**
      * ============================================================================
      *                           农商行快捷支付【签约状态查询】
      * ============================================================================
@@ -460,14 +483,36 @@
 
     /**
      * ============================================================================
+     *                           农商行快捷支付【签约列表查询】
+     * ============================================================================
+     * */
+    @PostMapping("/ynrccpaySignList")
+    fun queryYnrccPaySignList(@Valid @RequestBody param: YnrccPaySignListQueryParam): ResponseEntity<Any> {
+        val resp = ynrccNetPayBusinessService.doQueryYnrccPaySignList(param.userid, param.bankcardno)
+        return if (0 == resp.retcode) {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                .success(resp, "success"))
+        } else {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                .fail(resp.retcode, resp.retmsg))
+        }
+    }
+
+    /**
+     * ============================================================================
      *                           农商行快捷支付【签约申请】
      * ============================================================================
      * */
     @PostMapping("/ynrccpaySignApply")
     fun applyYnrccPaySign(@Valid @RequestBody param: YnrccPaySignApplyParam): ResponseEntity<Any> {
         val resp = ynrccNetPayBusinessService.applyUserYnrccPaySign(param)
-        return ResponseEntity.ok(ResponseBodyBuilder.create()
+        return if (0 == resp.retcode) {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
                 .success(resp, "success"))
+        } else {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                .fail(resp.retcode, resp.retmsg))
+        }
     }
 
     /**
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 61e590b..da5f5ac 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
@@ -1,10 +1,13 @@
 package com.supwisdom.dlpay.api.service.impl
 
+import com.csii.ynrcc.open.api.service.User
+import com.csii.ynrcc.open.api.service.YNRCCOpenServiceApi
 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.YnrccPayResp
 import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayUtil
 import com.supwisdom.dlpay.api.bean.*
 import com.supwisdom.dlpay.api.dao.CardDao
@@ -28,6 +31,7 @@
 import com.supwisdom.dlpay.util.ConstantUtil
 import mu.KotlinLogging
 import org.springframework.stereotype.Service
+import java.util.ArrayList
 
 @Service
 class YnrccNetPayBusinessServiceImpl(val personDao: PersonDao,
@@ -42,6 +46,7 @@
     private val logger = KotlinLogging.logger { }
 
     override fun checkUserYnrccPaySignStatus(userid: String, bankcardno: String, shopaccno: String): Boolean {
+        logger.info("查询签约状态：userid=[$userid],bankcardno=[$bankcardno],shopaccno=[$shopaccno]")
         val person = personDao.findByUserid(userid)
                 ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "用户<$userid>不存在")
         val shopacc = shopaccDao.findByShopaccno(shopaccno)
@@ -60,21 +65,26 @@
     }
 
     override fun applyUserYnrccPaySign(param: YnrccPaySignApplyParam): YnrccPaySignApplyResponse {
+        logger.info("申请签约参数：" + YnrccPayUtil.toJson(param))
+        val resp = YnrccPaySignApplyResponse()
         val person = personDao.findByUserid(param.userid?.trim())
                 ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "用户<${param.userid}>不存在")
         val shopacc = shopaccDao.findByShopaccno(param.shopaccno?.trim())
                 ?: 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, "银行卡持有人错误！")
+            resp.retcode = 99
+            resp.retmsg = "银行卡持有人错误！"
+            return resp
         }
         val idType = IDTypes.findByValue(person.idtype)
         if (idType < 0) {
-            throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "证件类型未识别[${person.idtype}]！")
+            resp.retcode = 99
+            resp.retmsg = "证件类型未识别[${person.idtype}]！"
+            return resp
         }
         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.shopaccno = shopacc.shopaccno
@@ -84,20 +94,38 @@
             this.createtime = systemUtilService.sysdatetime.hostdatetime
         }
         if (person.userid != userSign.userid) {
-            throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "银行卡持有人不匹配！")
+            resp.retcode = 99
+            resp.retmsg = "银行卡持有人不匹配！"
+            return resp
         } else if (userSign.isSignFlag) {
-            throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "该卡已签约！")
+            resp.retcode = 99
+            resp.retmsg = "该卡已签约！"
+            return resp
         }
+
+        var isAuthSign = false
+        var signDataResp = YnrccPayResp()
+        val existSigns = ynrccPaySignDao.queryOtherShopSign(param.bankcardno, shopacc.shopaccno)
+        if (null != existSigns && existSigns.size > 0) {
+            //已签约过，则是授权签约
+            logger.info("进入授权签约申请！")
+            isAuthSign = true
+            val oldCustomerSignNo = existSigns[0].customerSignNo
+            signDataResp = ynrccNetPayService.doApplyAuthYnrccPaySign(shopacc.shopaccno, oldCustomerSignNo) //授权签约
+        } else {
+            //首次签约
+            signDataResp = ynrccNetPayService.doApplyYnrccPaySign(shopacc.shopaccno) //初次签约
+        }
+        if (YnrccPayUtil.SUCCESS != signDataResp.code) {
+            resp.retcode = 99
+            resp.retmsg = signDataResp.message
+            return resp
+        }
+
         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
@@ -115,6 +143,7 @@
     }
 
     override fun confirmUserYnrccPaySign(param: YnrccPaySignConfirmParam): YnrccPaySignConfirmResponse {
+        logger.info("确认签约参数：" + YnrccPayUtil.toJson(param))
         val userSign = ynrccPaySignDao.getById(param.signNo.toString())
                 ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "签约申请记录<${param.signNo}>不存在！")
 
@@ -129,9 +158,10 @@
         }
 
         //签约成功
-        if (data["CustomerAcNo"] != userSign.bankcardno) {
-            throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "支付账号与签约号不匹配！")
-        } else if (userSign.isSignFlag && data["CustomerSignNo"] != userSign.customerSignNo) {
+//        if (data["CustomerAcNo"] != userSign.bankcardno) {
+//            throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "支付账号与签约号不匹配！")  // CustomerAcNo 是脱敏返回的，不判断。 6210****6743
+//        }
+        if (userSign.isSignFlag && data["CustomerSignNo"] != userSign.customerSignNo) {
             throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "用户已签约且快捷支付协议号不一致！")
         }
 
@@ -151,6 +181,7 @@
     }
 
     override fun cancelUserYnrccPaySign(param: YnrccPaySignCancelParam): YnrccPaySignCancelResponse {
+        logger.info("申请解约参数：" + YnrccPayUtil.toJson(param))
         val userSign = ynrccPaySignDao.getUserSign(param.bankcardno.trim(), param.shopaccno)
                 ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "签约记录不存在或已解约！")
         if (userSign.userid != param.userid) {
@@ -196,7 +227,8 @@
         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 hosttime = systemUtilService.sysdatetime.hosttime
+        val transDateTime = "${transdtl.shopDtl.accdate}$hosttime" //下单日期(记账日期，退款时用到)+下单时间
         val billno = transdtl.outTradeNo //billno放附加信息
         val productInfo = "农商行网关快捷支付[${transdtl.shopDtl.transdesc}]"; //商品描述
         val person = personDao.findByUserid(userSign.userid)
@@ -222,6 +254,7 @@
     }
 
     override fun doYnrccPayConfirm(transaction: TTransactionMain, plain: String, signature: String): AgentResponse<DtlStatus> {
+        logger.info("支付确认参数: refno=[${transaction.refno}],plain=[$plain],signature=[$signature]")
         if (TradeDict.DTL_STATUS_SUCCESS == transaction.status) {
             throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水已入账！")
         }
@@ -252,5 +285,64 @@
         }
     }
 
+    override fun doQueryYnrccPaySignList(userid: String?, bankcardno: String?): YnrccPaySignListQueryResponse {
+        val resp = YnrccPaySignListQueryResponse()
+        val signList = when (userid.isNullOrBlank()) {
+            true -> ynrccPaySignDao.queryActiveSignsByBankcardno(bankcardno?.trim())
+            false -> when (bankcardno.isNullOrBlank()) {
+                true -> ynrccPaySignDao.queryActiveSignsByUserid(userid?.trim())
+                false -> ynrccPaySignDao.queryActiveSignsByUseridAndBankcardno(userid?.trim(), bankcardno?.trim())
+            }
+        }
+        if (signList.isNullOrEmpty()) {
+            resp.retcode = 99
+            resp.retmsg = "无签约信息"
+            return resp
+        }
 
+        val data = ArrayList<YnrccPaySignInfo>()
+        for (sign in signList) {
+            data.add(YnrccPaySignInfo().apply {
+                this.signNo = sign.id
+                this.bankcardno = sign.bankcardno
+                this.shopaccno = sign.shopaccno
+                this.shopname = shopaccDao.getByShopaccno(sign.shopaccno)?.shopname ?: ""
+                this.signtime = sign.signTime
+                this.userid = sign.userid
+            })
+        }
+
+        resp.retcode = 0
+        resp.retmsg = "success"
+        resp.data = data
+        return resp
+    }
+
+    override fun doYnrccPayThirdAuth(thirdSrv: String, bankcardno: String, userid: String): YnrccPayThirdAuthResponse {
+        val resp = YnrccPayThirdAuthResponse()
+        resp.retcode = 99
+
+        //TODO: 根据第三方服务标识thirdSrv获取配置信息
+        val mchId = ""
+        val appId = ""
+        val token = ""
+        val pubKey = ""
+        val handler = YNRCCOpenServiceApi.getInstance(mchId, appId, token, pubKey)
+
+        //获取客户端sdk配置信息
+        val sdkConfigData = handler.getSDKConfigData()
+
+        //获取客户端SDK访问开放服务所需参数
+        val person = personDao.findByUserid(userid)
+            ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "用户不存在！")
+        //TODO: 判断bankcard是否该userid所有
+        val user = User(person.name, person.idno, person.mobile, bankcardno)
+        val access2ServiceData = handler.getAccess2ServiceData(user)
+
+        resp.retcode = 0
+        resp.retmsg = "success"
+        resp.sdkConfigData = sdkConfigData
+        resp.access2ServiceData = access2ServiceData
+        return resp
+    }
 }
\ 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
index ad3527c..aa2ddec 100644
--- 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
@@ -28,4 +28,10 @@
 
     @Transactional(rollbackFor = [Exception::class])
     fun doYnrccPayConfirm(transaction: TTransactionMain, plain: String, signature: String): AgentResponse<DtlStatus>
+
+    @Transactional(rollbackFor = [Exception::class])
+    fun doQueryYnrccPaySignList(userid: String?, bankcardno: String?): YnrccPaySignListQueryResponse
+
+    @Transactional(rollbackFor = [Exception::class])
+    fun doYnrccPayThirdAuth(thirdSrv: String, bankcardno: String, userid: String): YnrccPayThirdAuthResponse
 }
\ 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 6429383..a55845f 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,13 +1,8 @@
 package com.supwisdom.dlpay.framework.controller
 
-import com.google.gson.Gson
 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.util.DateUtil
-import com.supwisdom.dlpay.framework.util.RandomUtils
-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
@@ -17,9 +12,6 @@
 @RestController
 @RequestMapping("/api/common")
 class AboutController {
-    @Autowired
-    private lateinit var ynrccNetPayService: YnrccNetPayService
-
     @GetMapping("/version")
     fun version(): ResponseEntity<Any> {
         return try {
@@ -32,31 +24,4 @@
                     .success(ApiVersionResponse("unknown")))
         }
     }
-
-    @GetMapping("/resttest")
-    fun test(): ResponseEntity<Any> {
-        return try {
-            val shopaccno="2000000013"
-            val transDateTime = DateUtil.getNow("yyyyMMddHHmmss")
-            val refno = transDateTime + RandomUtils.randomNumber(6)
-            val amount = 1
-            val productInfo = "农商行快捷支付测试"
-            val extData = refno
-            val custname = ""
-            val email=""
-            val customerSignNo="12345678"
-
-            val resp = ynrccNetPayService.doApplyYnrccPaySign(shopaccno)
-
-//            val resp = ynrccNetPayService.doYnrccPayInit(shopaccno,refno,amount,transDateTime,
-//            productInfo,extData,custname,email,customerSignNo);
-
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .success(Gson().toJson(resp)))
-        } catch (e: Exception) {
-            e.printStackTrace()
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .success(e.message ?: "error!"))
-        }
-    }
 }
\ No newline at end of file
diff --git a/payapi/src/main/resources/payment_merchant.properties b/payapi/src/main/resources/payment_merchant.properties
index f07cdea..6a10fe5 100644
--- a/payapi/src/main/resources/payment_merchant.properties
+++ b/payapi/src/main/resources/payment_merchant.properties
@@ -1,11 +1,13 @@
 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
+cafile=D:/ynrcc_test/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
+#key_alias=merchant_key
+key_alias=ynrcc
 # \u79D8\u94A5\u5BC6\u7801
-key_password=881220
+#key_password=881220
+key_password=111111
 # \u9A8C\u7B7E\u79D8\u94A5\u522B\u540D
 alias_paygate=alias_paygate
\ No newline at end of file
