diff --git a/backend/build.gradle b/backend/build.gradle
index b1e80f4..655b7ee 100644
--- a/backend/build.gradle
+++ b/backend/build.gradle
@@ -74,7 +74,7 @@
     compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.9.1'
     compile group: 'log4j', name: 'log4j', version: '1.2.17'
 
-    compile group: 'com.supwisdom', name: 'payapi-sdk', version: '1.0.29'
+    compile group: 'com.supwisdom', name: 'payapi-sdk', version: '1.0.30-1-g0f6aba8'
     
     implementation 'org.hamcrest:hamcrest:2.1'
 }
diff --git a/backend/src/main/java/com/supwisdom/dlpay/framework/util/DataUtil.java b/backend/src/main/java/com/supwisdom/dlpay/framework/util/DataUtil.java
index ad2368d..8bbf1cb 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/framework/util/DataUtil.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/framework/util/DataUtil.java
@@ -14,6 +14,14 @@
     return prefix + repeat("*", length - start - end) + suffix;
   }
 
+  public static String nameDesensitization(String name) {
+    if (StringUtil.isEmpty(name)) {
+      return "";
+    }
+    String prefix = name.substring(1);
+    return prefix + repeat("*", name.length() - 1);
+  }
+
   public static String repeat(String str, int length) {
     StringBuilder sb = new StringBuilder(str);
     for (int i = 0; i < length - 1; i++) {
diff --git a/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBHospital.java b/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBHospital.java
index 00881d0..085f13a 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBHospital.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBHospital.java
@@ -38,6 +38,8 @@
   private String picid;
   @Column(name = "minpicid", length = 32)
   private String minpicid;
+  @Column(name = "shopaccno", length = 20)
+  private String shopaccno;
 
   public String getId() {
     return id;
@@ -118,4 +120,12 @@
   public void setMinpicid(String minpicid) {
     this.minpicid = minpicid;
   }
+
+  public String getShopaccno() {
+    return shopaccno;
+  }
+
+  public void setShopaccno(String shopaccno) {
+    this.shopaccno = shopaccno;
+  }
 }
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/MedicalApi.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/MedicalApi.kt
index e71bb2c..da3986c 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/MedicalApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/MedicalApi.kt
@@ -1,18 +1,19 @@
 package com.supwisdom.dlpay.medical
 
-import com.supwisdom.dlpay.api.bean.JsonResult
-import com.supwisdom.dlpay.api.bean.QueryCardParam
-import com.supwisdom.dlpay.api.bean.QueryUserParam
+import com.supwisdom.dlpay.api.bean.*
 import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.framework.util.DataUtil
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.medical.bean.AddPatientBean
 import com.supwisdom.dlpay.medical.bean.ConfirmRequestBean
 import com.supwisdom.dlpay.medical.bean.PaymentRequestBean
+import com.supwisdom.dlpay.medical.bean.YnrccPayRequestBean
 import com.supwisdom.dlpay.medical.exception.MedicineException
 import com.supwisdom.dlpay.medical.service.MedicalService
 import com.supwisdom.dlpay.medical.task.NotifyHISAsyncTask
 import com.supwisdom.dlpay.medical.util.MedicalConstant
 import com.supwisdom.dlpay.mobile.domain.TBMobileUser
+import com.supwisdom.dlpay.mobile.exception.UserLoginFailException
 import com.supwisdom.dlpay.mobile.service.MobileApiService
 import com.supwisdom.dlpay.paysdk.proxy.UserProxy
 import com.supwisdom.dlpay.util.ConstantUtil
@@ -48,6 +49,12 @@
      */
     @GetMapping("/hospital/list")
     fun getHospitalList(pageno: Int, pagesize: Int, name: String?): JsonResult? {
+        val p = SecurityContextHolder.getContext().authentication
+        val user = mobileApiService.findUserById(p.name)
+                ?: return JsonResult.error("用户不存在，请注册")
+        if (user.userid.isNullOrEmpty()) {
+            return JsonResult.error("用户未签约，请先签约")
+        }
         val data = medicalService.getHospitalList(pageno, pagesize, name)
         return JsonResult.ok().put("data", data)
     }
@@ -227,6 +234,9 @@
             val p = SecurityContextHolder.getContext().authentication
             val user = mobileApiService.findUserById(p.name)
                     ?: return JsonResult.error("用户不存在，请注册")
+            if (user.userid.isNullOrEmpty()) {
+                return JsonResult.error("用户未签约，请先签约")
+            }
             if (user.paypwd.isNullOrEmpty()) {
                 return JsonResult.error("支付密码未设置，请先设置")
             }
@@ -487,4 +497,186 @@
             return JsonResult.error("系统异常，请稍后重试")
         }
     }
+
+    /**
+     * 快捷支付签约查询用户信息
+     */
+    @PostMapping("/quickpay/signinfo")
+    fun quickPaySignInfo(): JsonResult? {
+        try {
+            val p = SecurityContextHolder.getContext().authentication
+            val user = mobileApiService.findUserById(p.name)
+                    ?: return JsonResult.error("用户不存在，请注册")
+            if (user.userid.isNullOrEmpty()) {
+                return JsonResult.error("请先签约大理市民卡")
+            }
+            val personResponse = userProxy.queryPerson(user.userid)
+            if (personResponse.retcode != MedicalConstant.PAYAPI_SUCCESS_RETCODE) {
+                logger.error { "查询用户[${user.userid}]信息失败:${personResponse.retmsg}" }
+                return JsonResult.error("签约失败：查询用户信息失败")
+            }
+            val person = personResponse.person
+            val bankCardResponse = userProxy.queryCard(QueryCardParam().apply {
+                this.userid = user.userid
+                this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
+            })
+            if (bankCardResponse.retcode != MedicalConstant.PAYAPI_SUCCESS_RETCODE) {
+                logger.error { "查询用户[${user.userid}]银行卡失败:${bankCardResponse.retmsg}" }
+                return JsonResult.error("签约失败：查询用户银行卡失败")
+            }
+            return JsonResult.ok().put("name", DataUtil.nameDesensitization(person.name))
+                    ?.put("idno", DataUtil.desensitization(person.idno, 3, 4))
+                    ?.put("bankcardno", DataUtil.desensitization(bankCardResponse.card.cardno, 4, 4))
+        } catch (e: Exception) {
+            logger.error("系统异常", e)
+            if (e is MedicineException) {
+                return JsonResult.error(e.message)
+            }
+            return JsonResult.error("系统异常，查询签约信息失败")
+        }
+    }
+
+    /**
+     * 快捷支付签约初始化
+     */
+    @PostMapping("/quickpay/signinit")
+    fun quickPaySignInit(hospitalcode: String, bankcardno: String): JsonResult? {
+        try {
+            val p = SecurityContextHolder.getContext().authentication
+            val user = mobileApiService.findUserById(p.name)
+                    ?: return JsonResult.error("用户不存在，请注册")
+            if (user.userid.isNullOrEmpty()) {
+                return JsonResult.error("请先签约大理市民卡")
+            }
+            val hospital = medicalService.getHospitalByCode(hospitalcode)
+                    ?: return JsonResult.error("未找到该医院")
+
+            val signResponse = userProxy.applyYnrccPaySign(YnrccPaySignApplyParam().apply {
+                this.bankcardno = bankcardno
+                this.shopaccno = hospital.shopaccno
+                this.userid = user.userid
+            })
+            if (signResponse.retcode != MedicalConstant.PAYAPI_SUCCESS_RETCODE) {
+                logger.error("快捷支付签约初始化失败:${signResponse.retcode},${signResponse.retmsg}")
+                return JsonResult.error("签约失败：${signResponse.retmsg}")
+            }
+            return JsonResult.ok().put("data", signResponse)
+        } catch (e: Exception) {
+            logger.error("系统异常", e)
+            if (e is MedicineException) {
+                return JsonResult.error(e.message)
+            }
+            return JsonResult.error("系统异常，签约失败")
+        }
+    }
+
+    /**
+     * 快捷支付签约确认
+     */
+    @PostMapping("/quickpay/signconfirm")
+    fun quickPaySignConfirm(signno: String, plain: String, signature: String): JsonResult? {
+        try {
+            val p = SecurityContextHolder.getContext().authentication
+            val user = mobileApiService.findUserById(p.name)
+                    ?: return JsonResult.error("用户不存在，请注册")
+            if (user.userid.isNullOrEmpty()) {
+                return JsonResult.error("请先签约大理市民卡")
+            }
+            val confirmResponse = userProxy.confirmYnrccPaySign(YnrccPaySignConfirmParam().apply {
+                this.signNo = signno
+                this.plain = plain
+                this.signature = signature
+            })
+            if (confirmResponse.retcode != MedicalConstant.PAYAPI_SUCCESS_RETCODE) {
+                logger.error("快捷支付签约确认失败:${confirmResponse.retcode},${confirmResponse.retmsg}")
+                return JsonResult.error("签约失败：${confirmResponse.retmsg}")
+            }
+            return JsonResult.ok()
+        } catch (e: Exception) {
+            logger.error("系统异常", e)
+            if (e is MedicineException) {
+                return JsonResult.error(e.message)
+            }
+            return JsonResult.error("系统异常，签约失败")
+        }
+    }
+
+    /**
+     * 快捷支付解约
+     */
+    @PostMapping("/quickpay/signcancel")
+    fun quickPaySignCancel(hospitalcode: String, bankcardno: String): JsonResult? {
+        try {
+            val p = SecurityContextHolder.getContext().authentication
+            val user = mobileApiService.findUserById(p.name)
+                    ?: return JsonResult.error("用户不存在，请注册")
+            if (user.userid.isNullOrEmpty()) {
+                return JsonResult.error("请先签约大理市民卡")
+            }
+            val hospital = medicalService.getHospitalByCode(hospitalcode)
+                    ?: return JsonResult.error("未找到该医院")
+            val cancelResponse = userProxy.cancelYnrccPaySign(YnrccPaySignCancelParam().apply {
+                this.bankcardno = bankcardno
+                this.shopaccno = hospital.shopaccno
+                this.userid = user.userid
+            })
+            if (cancelResponse.retcode != MedicalConstant.PAYAPI_SUCCESS_RETCODE) {
+                logger.error("快捷支付解约失败:${cancelResponse.retcode},${cancelResponse.retmsg}")
+                return JsonResult.error("解约失败：${cancelResponse.retmsg}")
+            }
+            return JsonResult.ok()
+        } catch (e: Exception) {
+            logger.error("系统异常", e)
+            if (e is MedicineException) {
+                return JsonResult.error(e.message)
+            }
+            return JsonResult.error("系统异常，解约失败")
+        }
+    }
+
+    /**
+     * 快捷支付支付功能
+     */
+    @PostMapping("/quickpay/payinit")
+    fun quickPayInit(@RequestBody bean: YnrccPayRequestBean): JsonResult? {
+        try {
+            val p = SecurityContextHolder.getContext().authentication
+            val user = mobileApiService.findUserById(p.name)
+                    ?: return JsonResult.error("用户不存在，请注册")
+            if (user.userid.isNullOrEmpty()) {
+                return JsonResult.error("用户未签约，请先签约")
+            }
+            if (user.paypwd.isNullOrEmpty()) {
+                return JsonResult.error("支付密码未设置，请先设置")
+            }
+            val paypwdtimes = user.checkPaypwdtime()
+            if (paypwdtimes == -1) {
+                return JsonResult.error("支付密码错误次数过多，请30分钟后再试")
+            } else if (paypwdtimes == 1) {
+                mobileApiService.saveUser(user)
+            }
+            val encoder = BCryptPasswordEncoder()
+            if (!encoder.matches(bean.paypwd, user.paypwd)) {
+                user.updatePaypwderror(false).also {
+                    if (it) mobileApiService.saveUser(user)
+                }
+                return JsonResult.error("支付密码错误")
+            } else {
+                user.updatePaypwderror(true).also {
+                    if (it) mobileApiService.saveUser(user)
+                }
+            }
+            if (TradeDict.STATUS_NORMAL != user.status) {
+                return JsonResult.error("用户状态异常")
+            }
+            medicalService.medicalYnrccPayInit(bean)
+            return JsonResult.ok()
+        } catch (e: Exception) {
+            logger.error("系统异常", e)
+            if (e is MedicineException) {
+                return JsonResult.error(e.message)
+            }
+            return JsonResult.error("系统异常，解约失败")
+        }
+    }
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/bean/YnrccPayRequestBean.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/bean/YnrccPayRequestBean.kt
new file mode 100644
index 0000000..970625d
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/bean/YnrccPayRequestBean.kt
@@ -0,0 +1,8 @@
+package com.supwisdom.dlpay.medical.bean
+
+class YnrccPayRequestBean {
+    var billno: String = ""
+    var paypwd: String = ""
+    var uid: String = ""
+    var userid: String = ""
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/MedicalService.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/MedicalService.kt
index d8197ab..d0fad00 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/MedicalService.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/MedicalService.kt
@@ -2,6 +2,7 @@
 
 import com.supwisdom.dlpay.framework.jpa.page.Pagination
 import com.supwisdom.dlpay.medical.bean.*
+import com.supwisdom.dlpay.medical.domain.TBHospital
 import com.supwisdom.dlpay.medical.domain.TBMedicalCard
 import com.supwisdom.dlpay.medical.domain.TBMedicalDtl
 import org.springframework.transaction.annotation.Transactional
@@ -81,4 +82,10 @@
 
     @Transactional
     fun queryRefundResult(bean: PayRefundRequestBean): TBMedicalDtl
+
+    @Transactional
+    fun getHospitalByCode(code: String): TBHospital?
+
+    @Transactional
+    fun medicalYnrccPayInit(bean: YnrccPayRequestBean)
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/impl/MedicalServiceImpl.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/impl/MedicalServiceImpl.kt
index 499ca0d..4c609a1 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/impl/MedicalServiceImpl.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/impl/MedicalServiceImpl.kt
@@ -1,9 +1,6 @@
 package com.supwisdom.dlpay.medical.service.impl
 
-import com.supwisdom.dlpay.api.bean.CitizenCardPayfinishParam
-import com.supwisdom.dlpay.api.bean.CitizenCardPayinitParam
-import com.supwisdom.dlpay.api.bean.ConsumePayCancelParam
-import com.supwisdom.dlpay.api.bean.QueryDtlResultParam
+import com.supwisdom.dlpay.api.bean.*
 import com.supwisdom.dlpay.framework.jpa.page.Pagination
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.MoneyUtil
@@ -17,8 +14,11 @@
 import com.supwisdom.dlpay.medical.util.MedicalClient
 import com.supwisdom.dlpay.medical.util.MedicalConstant
 import com.supwisdom.dlpay.paysdk.proxy.CitizenCardPayProxy
+import com.supwisdom.dlpay.paysdk.proxy.ConsumePropxy
 import com.supwisdom.dlpay.paysdk.proxy.TransactionProxy
+import com.supwisdom.dlpay.paysdk.proxy.UserProxy
 import com.supwisdom.dlpay.portal.util.PortalConstant
+import com.supwisdom.dlpay.util.ConstantUtil
 import mu.KotlinLogging
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.data.domain.PageRequest
@@ -48,6 +48,10 @@
     @Autowired
     lateinit var transactionProxy: TransactionProxy
     @Autowired
+    lateinit var consumePropxy: ConsumePropxy
+    @Autowired
+    lateinit var userProxy: UserProxy
+    @Autowired
     lateinit var labReportDao: LabReportDao
     @Autowired
     lateinit var labDetailDao: LabDetailDao
@@ -484,7 +488,7 @@
             }
             val payInit = citizenCardPayProxy.citizencardPayinit(initParam)
             if (payInit.retcode != MedicalConstant.PAYAPI_SUCCESS_RETCODE) {
-                logger.error("支付初始化失败:[$payInit.retmsg]")
+                logger.error("支付初始化失败:[${payInit.retmsg}]")
                 throw MedicineException("系统异常，支付失败")
             }
             medicalDtl.refno = payInit.refno
@@ -961,4 +965,24 @@
             throw MedicineException("该流水没有退款流水")
         }
     }
+
+    override fun getHospitalByCode(code: String): TBHospital? {
+        return hospitalDao.findByHospitalcodeAndStatus(code, TradeDict.STATUS_NORMAL)
+    }
+
+    override fun medicalYnrccPayInit(bean: YnrccPayRequestBean) {
+        val bankCardResponse = userProxy.queryCard(QueryCardParam().apply {
+            this.userid = bean.userid
+            this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
+        })
+        if (bankCardResponse.retcode != MedicalConstant.PAYAPI_SUCCESS_RETCODE) {
+            logger.error { "查询用户[${bean.userid}]银行卡失败:${bankCardResponse.retmsg}" }
+            throw MedicineException("支付失败：查询用户银行卡失败")
+        }
+        consumePropxy.ynrccPayOrder(YnrccPayOrderParam().apply {
+            this.userid = bean.userid
+            this.bankcardno = bankCardResponse.card.cardno
+            this.billno = bean.billno
+        })
+    }
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/service/YnrccPayService.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/service/YnrccPayService.kt
new file mode 100644
index 0000000..5e30724
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/service/YnrccPayService.kt
@@ -0,0 +1,5 @@
+package com.supwisdom.dlpay.mobile.service
+
+interface YnrccPayService {
+
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/YnrccPayServiceImpl.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/YnrccPayServiceImpl.kt
new file mode 100644
index 0000000..06ef58a
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/YnrccPayServiceImpl.kt
@@ -0,0 +1,9 @@
+package com.supwisdom.dlpay.mobile.service.impl
+
+import com.supwisdom.dlpay.mobile.service.YnrccPayService
+import org.springframework.stereotype.Service
+
+@Service
+class YnrccPayServiceImpl : YnrccPayService{
+
+}
\ No newline at end of file
