diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
index 4278bf0..ba072cc 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
@@ -14,11 +14,12 @@
 import org.springframework.stereotype.Component
 
 interface CitizencardPayService {
-    fun bindCard(bankcardno: String, username: String, idtype: String, idno: String, phone: String): DlpayResp
+    fun bindCard(bankcardno: String, username: String, idtype: String, idno: String,
+            phone: String): DlpayResp
 
-    fun signCard(bankcardno: String, username: String, idtype: String, idno: String, phone: String, transtype: String): DlpayResp
+    fun signCard(bankcardno: String, username: String, idtype: String, idno: String, phone: String, transtype: String,captcha:String): DlpayResp
 
-    fun cardPay(shopaccno: String, userid: String, accdate: String, amount: Int, refno: String): DlpayResp
+    fun cardPay(shopaccno: String, userid: String, accdate: String, amount: Int, scenario: String, refno: String): DlpayResp
 
     fun cardPayRefund(refno: String, accdate: String, orignRefno: String, amount: Int): DlpayResp
 
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
index 0601599..aa5c0ae 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
@@ -101,7 +101,7 @@
         }
     }
 
-    override fun signCard(bankcardno: String, username: String, idtype: String, idno: String, phone: String, transtype: String): DlpayResp {
+    override fun signCard(bankcardno: String, username: String, idtype: String, idno: String, phone: String, transtype: String,captcha:String): DlpayResp {
         var resp = DlpayResp()
         val config = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true)
         if (!checkCitizencardConfig(config, resp)) {
@@ -135,6 +135,7 @@
         params["idtype"] = idType.toString()
         params["idno"] = idno
         params["phone"] = phone
+        params["captcha"] = captcha
         params["sign_type"] = "MD5"
         val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
         params["sign"] = sign
@@ -161,7 +162,7 @@
         }
     }
 
-    override fun cardPay(shopaccno: String, userid: String, accdate: String, amount: Int, refno: String): DlpayResp {
+    override fun cardPay(shopaccno: String, userid: String, accdate: String, amount: Int, scenario: String, refno: String): DlpayResp {
         var resp = DlpayResp()
         val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, shopaccno, false, false)
         if (!checkCitizencardConfig(config, resp)) {
@@ -216,6 +217,7 @@
         params["merchant_bankcardno"] = merchantBankcardno!!
         params["merchant_bankaccname"] = merchantBankaccname!!
         params["amount"] = amount.toString()
+        params["scenario"] = scenario
         params["description"] = "市民卡代扣消费"
         params["sign_type"] = "MD5"
         val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
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 0f6f5d6..b977881 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -550,7 +550,8 @@
                     ?: 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_SIGNCARD)
+            val captcha = ""//此处为验证码，暂由此参数代替
+            var resp = citizencardPayService.signCard(card.cardno, person.name, person.idtype, person.idno, user.phone!!, YnrccUtil.TRANSTYPE_SIGNCARD,captcha)
             if (resp.code != "0000") {
                 return JsonResult.error(resp.message)
             }
@@ -783,7 +784,8 @@
                     ?: 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)
+            val captcha = ""//此处为验证码，暂由此参数代替
+            var resp = citizencardPayService.signCard(card.cardno, person.name, person.idtype, person.idno, user.phone!!, YnrccUtil.TRANSTYPE_UNSIGNCARD,captcha)
             if (resp.code != "0000") {
                 return JsonResult.error(resp.message)
             }
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java
index 7fae31a..ed96db6 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java
@@ -35,6 +35,8 @@
 
   private String oriSn; //原应用系统唯一流水号
   private String chkdate; //对账日期
+  private String captcha; //签约验证码
+  private String scenario;//消费场景
 
   /**
    * 市民卡绑定请求XML
@@ -49,9 +51,9 @@
         .append("<CATEGORIE>").append(categorie).append("</CATEGORIE>")
         .append("<SN>").append(sn).append("</SN>")
         .append("<BC_NO>").append(bcNo).append("</BC_NO>")
-        .append("<NAME>").append(name).append("</NAME>")
+       /* .append("<NAME>").append(name).append("</NAME>")
         .append("<ID_TYPE>").append(idType).append("</ID_TYPE>")
-        .append("<ID_NO>").append(idNo).append("</ID_NO>")
+        .append("<ID_NO>").append(idNo).append("</ID_NO>")*/
         .append("<PHONE>").append(phone).append("</PHONE>")
         .append("</root>");
     return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
@@ -75,7 +77,8 @@
         .append("<ID_NO>").append(idNo).append("</ID_NO>")
         .append("<PHONE>").append(phone).append("</PHONE>")
         .append("<TRANS_TYPE>").append(transType).append("</TRANS_TYPE>")
-        .append("</root>");
+        .append("<CAPTCHA>").append(captcha).append("<CAPTCHA>")
+            .append("</root>");
     return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
   }
 
@@ -290,4 +293,20 @@
   public void setTranscode(String transcode) {
     this.transcode = transcode;
   }
+
+  public String getCaptcha() {
+    return captcha;
+  }
+
+  public void setCaptcha(String captcha) {
+    this.captcha = captcha;
+  }
+
+  public String getScenario() {
+    return scenario;
+  }
+
+  public void setScenario(String scenario) {
+    this.scenario = scenario;
+  }
 }
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java
index 56e4d60..d7dfcb4 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java
@@ -77,10 +77,12 @@
                                 @FormParam("transtime") String transtime, @FormParam("categorie") String categorie,
                                 @FormParam("refno") String refno, @FormParam("bankcardno") String bankcardno,
                                 @FormParam("username") String username, @FormParam("idtype") String idtype,
-                                @FormParam("idno") String idno, @FormParam("phone") String phone,
+                                @FormParam("idno") String idno,
+                                @FormParam("phone") String phone,
                                 @FormParam("sign_type") String sign_type, @FormParam("sign") String sign) {
     DlpayResp resp = new DlpayResp();
-    if (!ynrccParamCheckService.checkBindCardParam(transcode, transdate, transtime, refno, bankcardno, username, idtype, idno, phone, categorie, sign_type, sign, resp)) {
+    if (!ynrccParamCheckService.checkBindCardParam(transcode, transdate, transtime, refno, bankcardno, username, idtype, idno,
+            phone, categorie, sign_type, sign, resp)) {
       logger.error(resp.errPrint());
       return resp;
     }
@@ -136,10 +138,11 @@
                                 @FormParam("bankcardno") String bankcardno, @FormParam("username") String username,
                                 @FormParam("idtype") String idtype, @FormParam("idno") String idno,
                                 @FormParam("phone") String phone,
+                                @FormParam("captcha")String captcha,
                                 @FormParam("sign_type") String sign_type, @FormParam("sign") String sign) {
     DlpayResp resp = new DlpayResp();
     if (!ynrccParamCheckService.checkSignCardParam(transcode, transdate, transtime, refno, categorie, bankcardno,
-        username, idtype, idno, phone, transtype, sign_type, sign, resp)) {
+        username, idtype, idno, phone, captcha,transtype, sign_type, sign, resp)) {
       logger.error(resp.errPrint());
       return resp;
     }
@@ -156,6 +159,7 @@
     params.put("idno", idno);
     params.put("phone", phone);
     params.put("transtype", transtype);
+    params.put("captcha",captcha);
     params.put("sign_type", sign_type);
     params.put("sign", sign);
     if (!checkYnrccSign(params, resp)) {
@@ -175,6 +179,7 @@
       req.setIdNo(idno);
       req.setPhone(phone);
       req.setTransType(transtype);
+      req.setCaptcha(captcha);
       return ynrccApiService.sendToYnrcc(DlpayUtil.OPTYPE_SIGNCARD, req);
     } catch (BussinessException be) {
       resp.setCode(ErrorCode.BUSSINESS_ERROR);
@@ -199,11 +204,12 @@
                            @FormParam("merchant_bankcardno") String merchant_bankcardno,
                            @FormParam("merchant_bankaccname") String merchant_bankaccname,
                            @FormParam("amount") Integer amount,
+                           @FormParam("scenario") String scenario,
                            @FormParam("description") String description,
                            @FormParam("sign_type") String sign_type, @FormParam("sign") String sign) {
     DlpayResp resp = new DlpayResp();
     if (!ynrccParamCheckService.checkCardPayParam(transcode, transdate, transtime, refno, categorie, bankcardno,
-        username, idtype, idno, merchant_bankcardno, merchant_bankaccname, amount, description, sign_type, sign, resp)) {
+        username, idtype, idno, merchant_bankcardno, merchant_bankaccname, amount,scenario, description, sign_type, sign, resp)) {
       logger.error(resp.errPrint());
       return resp;
     }
@@ -216,11 +222,12 @@
     params.put("categorie", categorie);
     params.put("bankcardno", bankcardno);
     params.put("username", username);
-    params.put("idtype", idtype);
+    //params.put("idtype", idtype);
     params.put("idno", idno);
     params.put("merchant_bankcardno", merchant_bankcardno);
     params.put("merchant_bankaccname", merchant_bankaccname);
     params.put("amount", String.valueOf(amount));
+    params.put("scenario",scenario);
     params.put("description", description);
     params.put("sign_type", sign_type);
     params.put("sign", sign);
@@ -242,6 +249,7 @@
       req.setMerchantBcno(merchant_bankcardno);
       req.setMerchantName(merchant_bankaccname);
       req.setAmount(amount);
+      req.setScenario(scenario);
       req.setDescription(description);
       return ynrccApiService.sendToYnrcc(DlpayUtil.OPTYPE_CARDPAY, req);
     } catch (BussinessException be) {
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java
index 4eb674b..9673aff 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java
@@ -12,10 +12,10 @@
   boolean checkSign(Map<String, String> param);
 
   boolean checkSignCardParam(String transcode, String transdate, String transtime, String refno, String categorie, String bankcardno, String username,
-                             String idtype, String idno, String phone, String transtype, String sign_type, String sign, DlpayResp resp);
+                             String idtype, String idno, String phone, String captcha,String transtype, String sign_type, String sign, DlpayResp resp);
 
   boolean checkCardPayParam(String transcode, String transdate, String transtime, String refno, String categorie, String bankcardno, String username,
-                            String idtype, String idno, String merchant_bankcardno, String merchant_bankaccname, Integer amount, String description,
+                            String idtype, String idno, String merchant_bankcardno, String merchant_bankaccname, Integer amount,String scenario, String description,
                             String sign_type, String sign, DlpayResp resp);
 
   boolean checkPayRefundParam(String transcode, String transdate, String transtime, String refno, String refundRefno, Integer amount, String description,
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java
index 069bf8f..bea60e8 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java
@@ -58,7 +58,8 @@
   }
 
   @Override
-  public boolean checkBindCardParam(String transcode, String transdate, String transtime, String refno, String bankcardno, String username, String idtype, String idno, String phone, String categorie, String sign_type, String sign, DlpayResp resp) {
+  public boolean checkBindCardParam(String transcode, String transdate, String transtime, String refno, String bankcardno, String username, String idtype, String idno,
+                                    String phone, String categorie, String sign_type, String sign, DlpayResp resp) {
     if (!checkYnrccBaseParam(transcode, transdate, transtime, refno, sign_type, sign, resp)) {
       return false;
     }
@@ -120,8 +121,9 @@
 
   @Override
   public boolean checkSignCardParam(String transcode, String transdate, String transtime, String refno, String categorie, String bankcardno, String username,
-                                    String idtype, String idno, String phone, String transtype, String sign_type, String sign, DlpayResp resp) {
-    if (!checkBindCardParam(transcode, transdate, transtime, refno, bankcardno, username, idtype, idno, phone, categorie, sign_type, sign, resp)) {
+                                    String idtype, String idno, String phone, String captcha,String transtype, String sign_type, String sign, DlpayResp resp) {
+    if (!checkBindCardParam(transcode, transdate, transtime, refno, bankcardno, username, idtype, idno,
+             phone, categorie, sign_type, sign, resp)) {
       return false;
     }
     if (StringUtil.isEmpty(transtype)) {
@@ -129,12 +131,17 @@
       resp.setMessage("请求参数错误[签约标志]");
       return false;
     }
+    if (StringUtil.isEmpty(captcha)) {
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[验证码为空]");
+      return false;
+    }
 
     return true;
   }
 
   @Override
-  public boolean checkCardPayParam(String transcode, String transdate, String transtime, String refno, String categorie, String bankcardno, String username, String idtype, String idno, String merchant_bankcardno, String merchant_bankaccname, Integer amount, String description, String sign_type, String sign, DlpayResp resp) {
+  public boolean checkCardPayParam(String transcode, String transdate, String transtime, String refno, String categorie, String bankcardno, String username, String idtype, String idno, String merchant_bankcardno, String merchant_bankaccname, Integer amount, String scenario,String description, String sign_type, String sign, DlpayResp resp) {
     if (!checkYnrccBaseParam(transcode, transdate, transtime, refno, sign_type, sign, resp)) {
       return false;
     }
@@ -179,6 +186,11 @@
       resp.setMessage("请求参数错误[交易金额为空]");
       return false;
     }
+    if (null == scenario) {
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[交易场景为空]");
+      return false;
+    }
 
     return true;
   }
