diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/BindCardParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/BindCardParam.java
new file mode 100644
index 0000000..92428f0
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/BindCardParam.java
@@ -0,0 +1,34 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.annotation.Sign;
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotEmpty;
+
+@Getter
+@Setter
+public class BindCardParam extends APIRequestParam {
+  @Sign
+  @NotEmpty(message = "卡号不能为空")
+  private String cardno;
+  @Sign
+  @NotEmpty(message = "姓名不能为空")
+  private String name;
+  @Sign
+  @NotEmpty(message = "证件类型不能为空")
+  private String idtype;
+  @Sign
+  @NotEmpty(message = "证件号不能为空")
+  private String idno;
+  @Sign
+  @NotEmpty(message = "手机号不能为空")
+  private String phone;
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    return true;
+  }
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QrcodeParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QrcodeParam.java
new file mode 100644
index 0000000..cca7278
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QrcodeParam.java
@@ -0,0 +1,31 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.annotation.Sign;
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotEmpty;
+
+@Getter
+@Setter
+public class QrcodeParam extends APIRequestParam {
+  @Sign
+  @NotEmpty(message = "用户id不能为空")
+  private String userid;
+  @Sign
+  @NotEmpty(message = "手机用户id不能为空")
+  private String uid;
+  @Sign
+  @NotEmpty(message = "secertkey不能为空")
+  private String secertkey;
+  @Sign
+  @NotEmpty(message = "rsapublic不能为空")
+  private String rsapublic;
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    return true;
+  }
+}
\ No newline at end of file
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
index 55aa02e..39a759e 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
@@ -55,4 +55,15 @@
   @PostMapping("/api/user/updateCardTransStatus")
   ApiResponse updateCardTransStatus(@RequestParam("cardno") String cardno,@RequestParam("status") String status);
 
+  @PostMapping("/api/user/bindcard")
+  Map<String, Object> bindCard(@RequestBody BindCardParam param);
+
+  @PostMapping("/api/user/signbxy")
+  ApiResponse signbxy(@RequestParam("userid") String userid,@RequestParam("code") String code,@RequestParam("phone") String phone);
+
+  @PostMapping("/api/user/unsignbxy")
+  ApiResponse unsignbxy(@RequestParam("userid") String userid,@RequestParam("phone") String phone);
+
+  @PostMapping("/api/user/qrcode")
+  Map<String, Object> qrcode(@RequestBody QrcodeParam param);
 }
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 14a7bf8..d20d616 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
@@ -1,13 +1,18 @@
 package com.supwisdom.dlpay.api.controller
 
+import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
+import com.supwisdom.dlpay.agent.service.CitizencardPayService
 import com.supwisdom.dlpay.api.bean.*
 import com.supwisdom.dlpay.api.exception.RequestParamCheckException
 import com.supwisdom.dlpay.api.service.CardService
 import com.supwisdom.dlpay.api.service.KafkaSendMsgService
+import com.supwisdom.dlpay.api.service.QRCodeService
 import com.supwisdom.dlpay.api.service.UserService
 import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
+import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import com.supwisdom.dlpay.mobile.service.MobileApiService
 import com.supwisdom.dlpay.system.bean.LevelBean
 import com.supwisdom.dlpay.system.service.PointsService
 import org.apache.commons.beanutils.BeanUtils
@@ -27,6 +32,15 @@
     private lateinit var kafkaSendMsgService: KafkaSendMsgService
     @Autowired
     private lateinit var pointsService: PointsService
+    @Autowired
+    private lateinit var mobileApiService: MobileApiService
+    @Autowired
+    private lateinit var userService: UserService
+    @Autowired
+    private lateinit var citizencardPayService: CitizencardPayService
+    @Autowired
+    private lateinit var qrcodeService: QRCodeService
+
 
 
     @PostMapping("/open")
@@ -263,4 +277,101 @@
                     .fail(ret.retcode, ret.retmsg))
         }
     }
+
+    /**
+     * 用户绑卡
+     */
+    @PostMapping("/bindcard")
+    fun bindCard(@RequestBody param: BindCardParam):ResponseEntity<Any>{
+        val card = mobileApiService.findCardByNo(param.cardno)
+                ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(400, "银行卡号有误"))
+        if (card.userid.isNullOrEmpty() || card.status != TradeDict.STATUS_NORMAL) {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(500, "银行卡号信息有误"))
+        }
+        val person = userService.findOnePersonByUserid(card.userid)
+        if (person.name != param.name) {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(400, "绑定信息有误[姓名]"))
+        }
+        if (person.idtype != param.idtype || person.idno != param.idno) {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(400, "绑定信息有误[证件类型/证件号]"))
+        }
+        var signed = ""
+        //call api
+        val resp = citizencardPayService.bindCard(param.cardno, param.name, param.idtype, param.idno, param.phone)
+        if (resp.code != "0000") {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(500, resp.message))
+        }
+        if (resp.sinstatus == YnrccUtil.TRANSTYPE_SIGNCARD ) {
+            signed = TradeDict.STATUS_YES
+            if(!card.signed){
+                card.signed = true
+                mobileApiService.saveCard(card)
+            }
+        }
+        return  ResponseEntity.ok(ResponseBodyBuilder.create().data("signed", signed)
+                .success("ok"))
+    }
+
+    /**
+     * 签约银行协议
+     */
+    @PostMapping("/signbxy")
+    fun signbxy(userid: String, code: String, phone: String): ResponseEntity<Any> {
+        val card = mobileApiService.findCardByUserid(userid)
+                ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(400, "卡片不存在，请重新绑定"))
+        //call sign api
+        val person = userService.findOnePersonByUserid(card.userid)
+        val resp = citizencardPayService.signCard(card.cardno, person.name, person.idtype, person.idno, phone, YnrccUtil.TRANSTYPE_SIGNCARD, code)
+        if (resp.code != "0000") {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(500, resp.message))
+        }
+        card.signed = true
+        mobileApiService.saveCard(card)
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .success("ok"))
+    }
+
+    /**
+     * 用户解约
+     */
+    @PostMapping("/unsignbxy")
+    fun unsignbxy(userid: String,phone:String): ResponseEntity<Any> {
+        val card = mobileApiService.findCardByUserid(userid)
+                ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(400, "银行卡不存在，不能解除代扣协议"))
+        //call sign api
+        val person = userService.findOnePersonByUserid(card.userid)
+        val captcha = ""//此处为验证码，暂由此参数代替
+        var resp = citizencardPayService.signCard(card.cardno, person.name, person.idtype, person.idno, phone, YnrccUtil.TRANSTYPE_UNSIGNCARD, captcha)
+        if (resp.code != "0000") {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(500, resp.message))
+        }
+        card.signed = false
+        mobileApiService.saveCard(card)
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .success("ok"))
+    }
+
+    /**
+     * 二维码
+     */
+    @PostMapping("/qrcode")
+    fun qrcode(@RequestBody param: QrcodeParam): ResponseEntity<Any> {
+        val resp = qrcodeService.encodeCode(param)
+        return if (resp.retcode == 0) {
+            ResponseEntity.ok(ResponseBodyBuilder.create().data("qrcode", resp.retmsg)
+                    .success("ok"))
+        } else {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(500, resp.retmsg))
+        }
+    }
 }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt
index f26dafa..31da5df 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt
@@ -3,6 +3,7 @@
 import com.google.gson.Gson
 import com.supwisdom.dlpay.api.bean.ApiResponse
 import com.supwisdom.dlpay.api.bean.DoorQrcodeResponse
+import com.supwisdom.dlpay.api.bean.QrcodeParam
 import com.supwisdom.dlpay.api.service.QRCodeService
 import com.supwisdom.dlpay.api.service.UserService
 import com.supwisdom.dlpay.framework.service.SystemUtilService
@@ -30,8 +31,9 @@
 
     val logger = KotlinLogging.logger { }
 
-    override fun encodeCode(uid:String): ApiResponse {
+    override fun encodeCode(param: QrcodeParam): ApiResponse {
         var resp = ApiResponse()
+        val uid = param.uid
         val rootkey = systemUtilService.getBusinessValue("aes.cfb.rootkey")
         val iv = systemUtilService.getBusinessValue("aes.cfb.iv")
         if (rootkey.isNullOrEmpty()||iv.isNullOrEmpty()) {
@@ -39,23 +41,12 @@
             resp.retmsg = "秘钥未配置"
             return resp
         }
-        val muser = mobileApiService.findUserById(uid)
-        if(muser==null||TradeDict.STATUS_NORMAL!=muser.status){
-            resp.retcode = 1
-            resp.retmsg = "用户不存在或状态异常"
-            return resp
-        }
-        if(muser.userid.isNullOrEmpty()){
-            resp.retcode = 1
-            resp.retmsg = "用户未绑定身份"
-            return resp
-        }
-        val totp = QrCodeTotpUtil.generateTOTP(muser.secertkey)
+        val totp = QrCodeTotpUtil.generateTOTP(param.secertkey)
         val rowdata = QrcodeRawData()
-        rowdata.userid = muser.userid
+        rowdata.userid = param.userid
         rowdata.setTotp(totp)
         val orgData = Gson().toJson(rowdata)
-        val publicKey = RSAKeysGenerate.getPublicKey(muser.rsapublic)
+        val publicKey = RSAKeysGenerate.getPublicKey(param.rsapublic)
         val encdata = org.apache.commons.codec.binary.Base64.encodeBase64String(RSAKeysGenerate.encryptbyte(publicKey, orgData))
         val qrcode = AesUtil.encryptCFB("$uid:$encdata", rootkey, iv, "AES/CFB/NoPadding")
 
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt
index 029f6a8..b5facd8 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt
@@ -2,8 +2,9 @@
 
 import com.supwisdom.dlpay.api.bean.ApiResponse
 import com.supwisdom.dlpay.api.bean.DoorQrcodeResponse
+import com.supwisdom.dlpay.api.bean.QrcodeParam
 
 interface QRCodeService {
-    fun encodeCode(uid: String): ApiResponse
+    fun encodeCode(param: QrcodeParam): ApiResponse
     fun decodeCode(qrcode: String): DoorQrcodeResponse
 }
\ No newline at end of file
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 299fd7f..417e852 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -857,18 +857,18 @@
      *
      * 二维码在线生成
      * */
-    @RequestMapping("/qrcode")
-    fun qrcode(): JsonResult {
-        val p = SecurityContextHolder.getContext().authentication
-        val user = mobileApiService.findUserById(p.name)
-                ?: return JsonResult.error("用户不存在，请注册")
-        val resp = qrcodeService.encodeCode(user.uid)
-        return if(resp.retcode==0){
-            JsonResult.ok("ok").put("qrcode", resp.retmsg)!!
-        }else{
-            JsonResult.error(resp.retmsg)
-        }
-    }
+//    @RequestMapping("/qrcode")
+//    fun qrcode(): JsonResult {
+//        val p = SecurityContextHolder.getContext().authentication
+//        val user = mobileApiService.findUserById(p.name)
+//                ?: return JsonResult.error("用户不存在，请注册")
+//        val resp = qrcodeService.encodeCode(user.uid)
+//        return if(resp.retcode==0){
+//            JsonResult.ok("ok").put("qrcode", resp.retmsg)!!
+//        }else{
+//            JsonResult.error(resp.retmsg)
+//        }
+//    }
 
     /**
      *
