diff --git a/payapi-common/build.gradle b/payapi-common/build.gradle
index a1776a5..0b8b7dd 100644
--- a/payapi-common/build.gradle
+++ b/payapi-common/build.gradle
@@ -39,6 +39,7 @@
     implementation 'commons-codec:commons-codec:1.13'
     implementation('org.springframework.boot:spring-boot-starter-validation:2.1.6.RELEASE')
 
+    implementation 'com.fasterxml.jackson.core:jackson-annotations:2.10.1'
     implementation 'org.hibernate:hibernate-validator:6.0.2.Final'
     compile 'javax.el:javax.el-api:3.0.0'
     compile 'org.glassfish.web:javax.el:2.2.6'
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CitizenCardInfo.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CitizenCardInfo.java
index d99daf7..d32a42f 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CitizenCardInfo.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CitizenCardInfo.java
@@ -1,14 +1,17 @@
 package com.supwisdom.dlpay.api.bean;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
+import org.springframework.boot.jackson.JsonComponent;
 
 @Getter
 @Setter
 @AllArgsConstructor
 @NoArgsConstructor
+@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })
 public class CitizenCardInfo {
   private String cardno;
   private String cardphyid;
@@ -23,4 +26,5 @@
   private String idno;
   private String phone;
   private String bankcardno;
+  private String updtime;
 }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt
index 210c331..095115d 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt
@@ -110,7 +110,7 @@
     override fun getCardsByLastsaveDate(startdate: String, enddate: String): CardsResponse {
         var resp = CardsResponse()
 //        var ret = cardDao.findCitizencardByLastsaved(startdate,enddate)
-        val query = entityManager.createNativeQuery("select a.cardno,a.cardphyid,a.expiredate,a.status as cardstatus,a.trans_status as transstatus,a.userid,b.name as username,b.sex,b.idtype,b.idno,b.mobile as phone,c.cardno as bankcardno \n" +
+        val query = entityManager.createNativeQuery("select a.cardno,a.cardphyid,a.expiredate,a.status as cardstatus,a.trans_status as transstatus,a.userid,b.name as username,b.sex,b.idtype,b.idno,b.mobile as phone,c.cardno as bankcardno,a.lastsaved as updtime \n" +
                 "from tb_card a left join tb_person b on a.userid=b.userid left join tb_card c on a.userid=c.userid and a.cardphyid=c.cardphyid and c.cardtype='bankcard' \n" +
                 "where a.cardtype='citizencard' and a.lastsaved>:starttime and a.lastsaved<=:endtime order by a.lastsaved ")
         query.setParameter("starttime", startdate)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
index da66271..0f6f5d6 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -33,6 +33,7 @@
 import org.springframework.web.bind.annotation.RequestMapping
 import org.springframework.web.bind.annotation.RestController
 import org.springframework.web.bind.annotation.RequestParam
+import org.springframework.web.multipart.MultipartFile
 import java.time.Duration
 import java.util.*
 
@@ -400,7 +401,7 @@
         }
         val exsitUser = mobileApiService.findUserById(card.userid)
         if (exsitUser != null) {
-            return JsonResult.error("该银行卡号已被绑定，如有疑问，请联系客服")
+            return JsonResult.error("该银行卡号已被绑定，若您本人绑定，请先解除绑定，若非本人，请联系客服")
         }
         //call api
         var resp = citizencardPayService.bindCard(cardno, name, idtype, idno, phone)
@@ -766,4 +767,89 @@
             JsonResult.error(resp.retmsg)
         }
     }
+
+    /**
+     *
+     * 解除银行协议
+     * */
+    @RequestMapping("/unsignbxy")
+    fun unSignbxy(): JsonResult {
+        val p = SecurityContextHolder.getContext().authentication
+        val user = mobileApiService.findUserById(p.name)
+                ?: return JsonResult.error("用户不存在，请注册")
+        var signed: String
+        if (!user.userid.isNullOrEmpty()) {
+            var card = mobileApiService.findCardByUserid(user.userid!!)
+                    ?: return JsonResult.error("银行卡不存在，不能解除代扣协议")
+            //call sign api
+            val person = userService.findOnePersonByUserid(card.userid)
+            var resp = citizencardPayService.signCard(card.cardno, person.name, person.idtype, person.idno, user.phone!!, YnrccUtil.TRANSTYPE_UNSIGNCARD)
+            if (resp.code != "0000") {
+                return JsonResult.error(resp.message)
+            }
+            card.signed = false
+            mobileApiService.saveCard(card)
+            signed = TradeDict.STATUS_NO
+        } else {
+            return JsonResult.error("未绑定银行卡，不能解除代扣协议")
+        }
+        return JsonResult.ok("ok")
+                .put("signed", signed)!!
+    }
+
+    /**
+     * 解除绑定
+     * */
+    @RequestMapping("/unbindcard")
+    fun unbindcard(paypwd: String): JsonResult {
+        val p = SecurityContextHolder.getContext().authentication
+        val user = mobileApiService.findUserById(p.name)
+                ?: 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(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)
+            }
+        }
+        var card = mobileApiService.findCardByUserid(user.userid!!)
+                ?: return JsonResult.error(-1, "银行卡未绑定，无需解绑")
+        card.signed = false
+        user.userid = null
+        mobileApiService.saveCard(card)
+        mobileApiService.saveUser(user)
+        return JsonResult.ok("OK")
+                ?.put("signed", TradeDict.STATUS_NO)!!
+    }
+
+    /**
+     * 上传头像
+     * */
+    @RequestMapping("/uploadphoto")
+    fun uploadPhoto(file: MultipartFile): JsonResult {
+        val p = SecurityContextHolder.getContext().authentication
+        val user = mobileApiService.findUserById(p.name)
+                ?: return JsonResult.error("用户不存在，请注册")
+        /**
+         * TODO
+         * 1.已有头像更新
+         * 2.没有头像上传
+         * 3.返回图片ID
+         *
+        */
+        return JsonResult.ok("OK")
+    }
 }
\ No newline at end of file
