diff --git a/backend/build.gradle b/backend/build.gradle
index 61a4f10..ff5ab0b 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.26-1-g9a9f482'
+    compile group: 'com.supwisdom', name: 'payapi-sdk', version: '1.0.26-3-gde708e9'
     
     implementation 'org.hamcrest:hamcrest:2.1'
 }
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
index 45f42cd..f9a7808 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -566,46 +566,18 @@
         if (user.phone.isNullOrEmpty()) {
             return JsonResult.error("手机号不存在，请注册")
         }
-        val cardResponse = userProxy.queryCard(QueryCardParam().apply {
-            this.userid = user.userid
-            this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
-        })
-        if (cardResponse.retcode != 0) {
-            logger.error { "查询用户[${user.userid}]卡片信息失败:${cardResponse.retmsg}" }
-            return JsonResult.error("卡片不存在，请重新绑定")
+        val bindCardCodeResult = userProxy.bindCardCode(user.userid!!,user.phone)
+        if (bindCardCodeResult["retcode"] != 0) {
+            logger.error { "获取绑卡验证码失败，${bindCardCodeResult["retmsg"]}" }
+            return JsonResult.error("获取验证码失败，${bindCardCodeResult["retmsg"]}")
         }
-        val card = cardResponse.card
-        //call sign api
-        val personResponse = userProxy.queryPerson(card.userid)
-        if (personResponse.retcode != 0) {
-            logger.error { "查询用户[${card.userid}]信息失败:${personResponse.retmsg}" }
-            return JsonResult.error("查询用户信息失败，请稍后重试")
-        }
-        val person = personResponse.person
-        var signed = ""
-        //call api
-        var resp = citizencardPayService.bindCard(card.cardno, person.name, person.idtype, person.idno, user.phone!!)
-        if (resp.code != "0000") {
-            return JsonResult.error(resp.message)
-        }
-
-        if (resp.sinstatus == YnrccUtil.TRANSTYPE_SIGNCARD) {
-            signed = TradeDict.STATUS_YES
-            if (!card.signed) {
-                card.signed = true
-                val response = userProxy.updateCardSign(card.cardno, true)
-                if (response.retcode != 0) {
-                    logger.error { "更新卡片签约状态失败:${response.retmsg}" }
-                    return JsonResult.error("绑卡失败，请稍后重试")
-                }
-            }
-            user.signedtime = DateUtil.getNow();
+        val signed = bindCardCodeResult["signed"] as String
+        if (TradeDict.STATUS_YES == signed) {
+            user.signedtime = DateUtil.getNow()
             mobileApiService.saveUser(user)
         }
-
         return JsonResult.ok("OK")
                 ?.put("signed", signed)!!
-
     }
 
     /**
