diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayReq.java b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayReq.java
index 3678cc0..0af068f 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayReq.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayReq.java
@@ -1,48 +1,282 @@
 package com.supwisdom.dlpay.api.bean;
 
+import com.supwisdom.dlpay.framework.util.MD5;
+
 public class DlpayReq {
   private static final String prefix = "<?xml version=\"1.0\" encoding=\"GBK\"?>";
+  private static final String BANKCARD_BIND_TRANSCODE = "BC5510";
+  private static final String BANKCARD_SIGN_TRANSCODE = "BC5511";
+  private static final String BANKCARD_PAY_TRANSCODE = "BC5512";
+  private static final String BANKCARD_PAYREFUND_TRANSCODE = "BC5513";
+  private static final String BANKCARD_QUERYRESULT_TRANSCODE = "BC5514";
+  private static final String BANKCARD_CHKFILE_TRANSCODE = "BC5515";
 
-  //HEAD
-  private String jkdm; //<JKDM>接口代码</JKDM>
-  private String jgdm; //<JGDM>结果代码</JGDM>
-  private String fsdw; //<FSDW>发送单位</FSDW>
-  private String jsdw; //<JSDW>接收单位</JSDW>
-  private String czyh; //<CZYH>操作员号</CZYH>
-  private String jyxh; //<JYXH>交易序号</JYXH>
-  private String jyqd; //<JYQD>交易渠道</JYQD>
-  private String yhxx; //<YHXX>安全用户信息</YHXX>
-  private String klxx; //<KLXX>安全口令信息</KLXX>
+  public static final String DLPAY_CATEGORIE = "C001"; //消费类别
 
-  //DATA业务参数  <KEY>key值</KEY>
+  private String transdate; //交易日期
+  private String transtime; //交易时间
+  private String sn; //应用系统唯一流水号
+  private String bcNo; //银行卡卡号
+  private String name; //户名
+  private String idType; //证件类型
+  private String idNo; //证件号码
+  private String phone; //手机号
 
+  private String categorie; //消费类别
+  private String transType; //交易类型 签约1，解约2
 
-  private String getPayXml() {
+  private String merchantBcno; //商户卡号
+  private String merchantName; //商户户名
+  private Integer amount; //消费金额
+  private String description; //描述交易内容
+
+  private String oriSn; //原应用系统唯一流水号
+  private String chkdate; //对账日期
+
+  /**
+   * 市民卡绑定请求XML
+   * */
+  public String getBindCardXml() {
     StringBuffer xml = new StringBuffer();
     xml.append(prefix)
-        .append("<FORMDATA>")
-        //HEAD
-        .append("<HEAD>")
-        .append("<JKDM>").append(jkdm).append("</JKDM>")
-        .append("<JGDM>").append("000000").append("</JGDM>") //发送时填充000000
-        .append("<FSDW>").append(fsdw).append("</FSDW>")
-        .append("<JSDW>").append(jsdw).append("</JSDW>")
-        .append("<CZYH>").append(czyh).append("</CZYH>")
-        .append("<JYXH>").append(jyxh).append("</JYXH>")
-        .append("<JYQD>").append(jyqd).append("</JYQD>")
-        .append("<YHXX>").append(yhxx).append("</YHXX>")
-        .append("<KLXX>").append(klxx).append("</KLXX>")
-        .append("</HEAD>")
-        //DATA
-        .append("<DATA>")
-//        .append("<REFNO>").append("201906211124000011").append("</REFNO>")
-        .append("</DATA>")
-        .append("</FORMDATA>");
+        .append("<root>")
+        .append("<TRANSCODE>").append(BANKCARD_BIND_TRANSCODE).append("</TRANSCODE>")
+        .append("<TRANSDATE>").append(transdate).append("</TRANSDATE>")
+        .append("<TRANSTIME>").append(transtime).append("</TRANSTIME>")
+        .append("<SN>").append(sn).append("</SN>")
+        .append("<BC_NO>").append(bcNo).append("</BC_NO>")
+        .append("<NAME>").append(name).append("</NAME>")
+        .append("<ID_TYPE>").append(idType).append("</ID_TYPE>")
+        .append("<ID_NO>").append(idNo).append("</ID_NO>")
+        .append("<PHONE>").append(phone).append("</PHONE>")
+        .append("</root>");
     return String.format("%08d", xml.toString().length()) + xml.toString();
   }
 
 
+  /**
+   * 市民卡签约/解约请求XML
+   * */
+  public String getSignXml(){
+    StringBuffer xml = new StringBuffer();
+    xml.append(prefix)
+        .append("<root>")
+        .append("<TRANSCODE>").append(BANKCARD_SIGN_TRANSCODE).append("</TRANSCODE>")
+        .append("<TRANSDATE>").append(transdate).append("</TRANSDATE>")
+        .append("<TRANSTIME>").append(transtime).append("</TRANSTIME>")
+        .append("<SN>").append(sn).append("</SN>")
+        .append("<CATEGORIE>").append(categorie).append("</CATEGORIE>")
+        .append("<BC_NO>").append(bcNo).append("</BC_NO>")
+        .append("<NAME>").append(name).append("</NAME>")
+        .append("<ID_TYPE>").append(idType).append("</ID_TYPE>")
+        .append("<ID_NO>").append(idNo).append("</ID_NO>")
+        .append("<PHONE>").append(phone).append("</PHONE>")
+        .append("<TRANS_TYPE>").append(transType).append("</TRANS_TYPE>")
+        .append("</root>");
+    return String.format("%08d", xml.toString().length()) + xml.toString();
+  }
 
+  /**
+   * 市民卡代扣消费接口请求报文
+   * */
+  public String getCardpayXml(){
+    StringBuffer xml = new StringBuffer();
+    xml.append(prefix)
+        .append("<root>")
+        .append("<TRANSCODE>").append(BANKCARD_PAY_TRANSCODE).append("</TRANSCODE>")
+        .append("<TRANSDATE>").append(transdate).append("</TRANSDATE>")
+        .append("<TRANSTIME>").append(transtime).append("</TRANSTIME>")
+        .append("<SN>").append(sn).append("</SN>")
+        .append("<CATEGORIE>").append(categorie).append("</CATEGORIE>")
+        .append("<BC_NO>").append(bcNo).append("</BC_NO>")
+        .append("<NAME>").append(name).append("</NAME>")
+//        .append("<ID_TYPE>").append(idType).append("</ID_TYPE>")
+        .append("<ID_NO>").append(idNo).append("</ID_NO>")
+        .append("<MERCHANT_BCNO>").append(merchantBcno).append("</MERCHANT_BCNO>")
+        .append("<MERCHANT_NAME>").append(merchantName).append("</MERCHANT_NAME>")
+        .append("<AMOUNT>").append(amount).append("</AMOUNT>")
+        .append("<DESCRIPTION>").append(description).append("</DESCRIPTION>")
+        .append("<MAC>").append(MD5.encodeByMD5ForDlpay(merchantBcno + bcNo + amount)).append("</MAC>")
+        .append("</root>");
+    return String.format("%08d", xml.toString().length()) + xml.toString();
+  }
 
+  /**
+   * 市民卡退款接口请求报文
+   * */
+  public String getPayRefundXml(){
+    StringBuffer xml = new StringBuffer();
+    xml.append(prefix)
+        .append("<root>")
+        .append("<TRANSCODE>").append(BANKCARD_PAYREFUND_TRANSCODE).append("</TRANSCODE>")
+        .append("<TRANSDATE>").append(transdate).append("</TRANSDATE>")
+        .append("<TRANSTIME>").append(transtime).append("</TRANSTIME>")
+        .append("<SN>").append(sn).append("</SN>")
+        .append("<ORI_SN>").append(oriSn).append("</ORI_SN>")
+        .append("<AMOUNT>").append(amount).append("</AMOUNT>")
+        .append("<DESCRIPTION>").append(description).append("</DESCRIPTION>")
+        .append("</root>");
+    return String.format("%08d", xml.toString().length()) + xml.toString();
+  }
 
+  /**
+   * 市民卡交易查询接口请求报文
+   * */
+  public String getQueryResultXml(){
+    StringBuffer xml = new StringBuffer();
+    xml.append(prefix)
+        .append("<root>")
+        .append("<TRANSCODE>").append(BANKCARD_QUERYRESULT_TRANSCODE).append("</TRANSCODE>")
+        .append("<TRANSDATE>").append(transdate).append("</TRANSDATE>")
+        .append("<TRANSTIME>").append(transtime).append("</TRANSTIME>")
+        .append("<SN>").append(sn).append("</SN>")
+        .append("<ORI_SN>").append(oriSn).append("</ORI_SN>")
+        .append("</root>");
+    return String.format("%08d", xml.toString().length()) + xml.toString();
+  }
+
+  /**
+   * 市民卡对账接口请求报文
+   * */
+  public String getChkfileXml(){
+    StringBuffer xml = new StringBuffer();
+    xml.append(prefix)
+        .append("<root>")
+        .append("<TRANSCODE>").append(BANKCARD_CHKFILE_TRANSCODE).append("</TRANSCODE>")
+        .append("<TRANSDATE>").append(transdate).append("</TRANSDATE>")
+        .append("<TRANSTIME>").append(transtime).append("</TRANSTIME>")
+        .append("<SN>").append(sn).append("</SN>")
+        .append("<DZDATE>").append(chkdate).append("</DZDATE>")
+        .append("<MERCHANT_BCNO>").append("</MERCHANT_BCNO>")
+        .append("</root>");
+    return String.format("%08d", xml.toString().length()) + xml.toString();
+  }
+
+  public String getTransdate() {
+    return transdate;
+  }
+
+  public void setTransdate(String transdate) {
+    this.transdate = transdate;
+  }
+
+  public String getTranstime() {
+    return transtime;
+  }
+
+  public void setTranstime(String transtime) {
+    this.transtime = transtime;
+  }
+
+  public String getSn() {
+    return sn;
+  }
+
+  public void setSn(String sn) {
+    this.sn = sn;
+  }
+
+  public String getBcNo() {
+    return bcNo;
+  }
+
+  public void setBcNo(String bcNo) {
+    this.bcNo = bcNo;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getIdType() {
+    return idType;
+  }
+
+  public void setIdType(String idType) {
+    this.idType = idType;
+  }
+
+  public String getIdNo() {
+    return idNo;
+  }
+
+  public void setIdNo(String idNo) {
+    this.idNo = idNo;
+  }
+
+  public String getPhone() {
+    return phone;
+  }
+
+  public void setPhone(String phone) {
+    this.phone = phone;
+  }
+
+  public String getCategorie() {
+    return categorie;
+  }
+
+  public void setCategorie(String categorie) {
+    this.categorie = categorie;
+  }
+
+  public String getTransType() {
+    return transType;
+  }
+
+  public void setTransType(String transType) {
+    this.transType = transType;
+  }
+
+  public String getMerchantBcno() {
+    return merchantBcno;
+  }
+
+  public void setMerchantBcno(String merchantBcno) {
+    this.merchantBcno = merchantBcno;
+  }
+
+  public String getMerchantName() {
+    return merchantName;
+  }
+
+  public void setMerchantName(String merchantName) {
+    this.merchantName = merchantName;
+  }
+
+  public Integer getAmount() {
+    return amount;
+  }
+
+  public void setAmount(Integer amount) {
+    this.amount = amount;
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public void setDescription(String description) {
+    this.description = description;
+  }
+
+  public String getOriSn() {
+    return oriSn;
+  }
+
+  public void setOriSn(String oriSn) {
+    this.oriSn = oriSn;
+  }
+
+  public String getChkdate() {
+    return chkdate;
+  }
+
+  public void setChkdate(String chkdate) {
+    this.chkdate = chkdate;
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayResp.java b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayResp.java
new file mode 100644
index 0000000..ba5e113
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayResp.java
@@ -0,0 +1,88 @@
+package com.supwisdom.dlpay.api.bean;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "root")
+public class DlpayResp {
+  private String code;
+  private String message;
+  private String transdate;
+  private String transtime;
+  private String bankjourno;
+  private String captcha;
+  private String status;
+  private String filename;
+
+  @XmlElement(name = "CODE")
+  public String getCode() {
+    return code;
+  }
+
+  public void setCode(String code) {
+    this.code = code;
+  }
+
+  @XmlElement(name = "MESSAGE")
+  public String getMessage() {
+    return message;
+  }
+
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+  @XmlElement(name = "TRANSDATE")
+  public String getTransdate() {
+    return transdate;
+  }
+
+  public void setTransdate(String transdate) {
+    this.transdate = transdate;
+  }
+
+  @XmlElement(name = "TRANSTIME")
+  public String getTranstime() {
+    return transtime;
+  }
+
+  public void setTranstime(String transtime) {
+    this.transtime = transtime;
+  }
+
+  @XmlElement(name = "BANKJOURNO")
+  public String getBankjourno() {
+    return bankjourno;
+  }
+
+  public void setBankjourno(String bankjourno) {
+    this.bankjourno = bankjourno;
+  }
+
+  @XmlElement(name = "CAPTCHA")
+  public String getCaptcha() {
+    return captcha;
+  }
+
+  public void setCaptcha(String captcha) {
+    this.captcha = captcha;
+  }
+
+  @XmlElement(name = "STATUS")
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  @XmlElement(name = "FILENAME")
+  public String getFilename() {
+    return filename;
+  }
+
+  public void setFilename(String filename) {
+    this.filename = filename;
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPaytypeConfig.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPaytypeConfig.java
index b310480..4a239dd 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPaytypeConfig.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPaytypeConfig.java
@@ -24,6 +24,9 @@
   @Column(name = "CONFIG_NAME", length = 200)
   private String configName;
 
+  @Column(name = "GLOBALFLAG", length = 200)
+  private Boolean globalflag = false;
+
   @Column(name = "tenantid", length = 20)
   @NotNull
   private String tenantid = "";
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java
index 75fa85a..9e31db8 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java
@@ -26,7 +26,7 @@
   @NotNull
   private String status;
 
-  @Column(name = "IDTYPE", length = 20)
+  @Column(name = "IDTYPE", length = 60)
   private String idtype;
 
   @Column(name = "IDNO", length = 30)
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/MD5.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/MD5.java
index 4d5ba84..91abab4 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/MD5.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/MD5.java
@@ -67,4 +67,21 @@
         return hexDigits[d1] + hexDigits[d2];  
     }
 
+    public static String encodeByMD5ForDlpay(String originString) {
+        if (originString != null) {
+            try {
+                //创建具有指定算法名称的信息摘要
+                MessageDigest md = MessageDigest.getInstance("MD5");
+                //使用指定的字节数组对摘要进行最后更新，然后完成摘要计算
+                byte[] results = md.digest(originString.getBytes("GBK"));
+                //将得到的字节数组变成字符串返回
+                String resultString = byteArrayToHexString(results);
+                return resultString;
+            } catch (Exception ex) {
+                ex.printStackTrace();
+            }
+        }
+        return null;
+    }
+
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java
index 66deb65..996af8e 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java
@@ -7,8 +7,8 @@
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
+import javax.xml.bind.Unmarshaller;
+import java.io.*;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -38,56 +38,30 @@
     return xmlContent;
   }
 
-  /*
-    public static <T> T getXmlToObject(String xmlContent, Class clazz) {
+  public static <T> T getXmlToObject(String xmlContent, String charset, Class clazz) {
+    try {
+      JAXBContext context = JAXBContext.newInstance(clazz);
+      // xml转换为对象 XML------Object
+      InputStream inputStream;
       try {
-        JAXBContext context = JAXBContext.newInstance(clazz);
-        // xml转换为对象 XML------Object
-        InputStream inputStream;
-        try {
-          inputStream = new ByteArrayInputStream(
-              xmlContent.getBytes("GBK"));
-          Unmarshaller um = context.createUnmarshaller();
+        inputStream = new ByteArrayInputStream(
+            xmlContent.getBytes(charset));
+        Unmarshaller um = context.createUnmarshaller();
 
-          @Suppress("UNCHECKED_CAST")
-          return (T) um.unmarshal(inputStream);
-        } catch (UnsupportedEncodingException e) {
-          // TODO Auto-generated catch block
-          e.printStackTrace();
-        }catch (Exception e) {
-          e.printStackTrace();
-        }
-      } catch (JAXBException e) {
-
+        return (T) um.unmarshal(inputStream);
+      } catch (UnsupportedEncodingException e) {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+      } catch (Exception e) {
         e.printStackTrace();
       }
-      return null;
+    } catch (JAXBException e) {
+
+      e.printStackTrace();
     }
+    return null;
+  }
 
-    public static <T> T getXmlToObject(String xmlContent,String charset, Class clazz) {
-      try {
-        JAXBContext context = JAXBContext.newInstance(clazz);
-        // xml转换为对象 XML------Object
-        InputStream inputStream;
-        try {
-          inputStream = new ByteArrayInputStream(
-              xmlContent.getBytes(charset));
-          Unmarshaller um = context.createUnmarshaller();
-
-          return (T) um.unmarshal(inputStream);
-        } catch (UnsupportedEncodingException e) {
-          // TODO Auto-generated catch block
-          e.printStackTrace();
-        }catch (Exception e) {
-          e.printStackTrace();
-        }
-      } catch (JAXBException e) {
-
-        e.printStackTrace();
-      }
-      return null;
-    }
-  */
   public static Map<String, String> parseXml(String xml) throws Exception {
     Map<String, String> map = new HashMap<String, String>();
     Document document = DocumentHelper.parseText(xml);
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/util/DlpayUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/util/DlpayUtil.java
index 5aa25fb..7f8bf3f 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/util/DlpayUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/util/DlpayUtil.java
@@ -13,6 +13,30 @@
 import java.util.Random;
 
 public class DlpayUtil {
+  public static final Map<String, String> errcode = new HashMap<>(0);
+
+  static {
+    errcode.put("0000", "成功");
+    errcode.put("0101", "手机号不一致");
+    errcode.put("0102", "无预留手机号");
+    errcode.put("0103", "证件类型不一致");
+    errcode.put("0104", "证件号码不一致");
+    errcode.put("0105", "户名不符");
+    errcode.put("0106", "卡状态异常");
+    errcode.put("0107", "无此卡号");
+    errcode.put("0201", "未进行银行卡绑定");
+    errcode.put("0202", "无效的交易类型");
+    errcode.put("0301", "未签约");
+    errcode.put("0302", "余额不足");
+    errcode.put("0303", "MD5校验失败");
+    errcode.put("0401", "原始流水不存在");
+    errcode.put("0402", "原始流水未成功");
+    errcode.put("0403", "原始流水已退款");
+    errcode.put("4004", "商户账户余额不足");
+    errcode.put("0405", "不在退款时间范围内");
+    errcode.put("0406", "当日无交易明细");
+  }
+
   /**
    * socket方式请求农商行
    */
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt
index 3b5bd5e..430499c 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt
@@ -3,14 +3,14 @@
 import com.google.gson.Gson
 import com.sun.jersey.api.client.Client
 import com.sun.jersey.api.client.ClientResponse
-import com.supwisdom.dlpay.api.bean.BaseResp
-import com.supwisdom.dlpay.api.bean.SupStatusRevResp
-import com.supwisdom.dlpay.api.bean.SupYktResp
-import com.supwisdom.dlpay.api.bean.WechatReqResp
+import com.supwisdom.dlpay.api.bean.*
 import com.supwisdom.dlpay.api.domain.TPersondtl
 import com.supwisdom.dlpay.api.domain.TShopdtl
+import com.supwisdom.dlpay.api.util.IDTypes
 import com.supwisdom.dlpay.framework.util.*
 import com.supwisdom.dlpay.util.Code
+import com.supwisdom.dlpay.util.DlpayUtil
+import mu.KotlinLogging
 
 class CallBackResp {
     var retcode: String = "99"
@@ -24,6 +24,8 @@
 class CallService {
 
     companion object {
+        private val logger = KotlinLogging.logger { }
+
         fun callYktPay(config: Map<String, String?>, paydtl: TPersondtl, time: String, stuempno: String, yktshopid: String, devphyid: String?): CallBackResp {
             val code = CallBackResp()
             val appid = config["appid"]
@@ -235,6 +237,214 @@
             }
         }
 
+
+        /**
+         * 大理农商行银行卡绑定
+         * */
+        fun CallCitizenCardBind(config: Map<String, String?>, transdate: String, transtime: String, refno: String, bankcardno: String, name: String, idtype: String, idno: String, phone: String): CallBackResp {
+            val resp = CallBackResp()
+            val ip = config["socket.ip"]
+            val port = config["socket.port"]
+            val idType = IDTypes.findByValue(idtype)
+            if (ip.isNullOrEmpty() || port.isNullOrEmpty()) {
+                resp.retcode = "99"
+                resp.retmsg = "市民卡socket的IP和端口未配置"
+                return resp
+            }
+            if (idType < 0) {
+                resp.retcode = "99"
+                resp.retmsg = "证件类型未识别[$idtype]"
+                return resp
+            }
+
+            val req = DlpayReq().apply {
+                this.transdate = transdate
+                this.transtime = transtime
+                this.sn = refno
+                this.bcNo = bankcardno
+                this.name = name
+                this.idType = "$idType"
+                this.idNo = idno
+                this.phone = phone
+            }
+            logger.info("请求绑定银行卡发送报文：\n${req.bindCardXml}")
+            try {
+                val returnXml = DlpayUtil.send(ip, port.toInt(), 10, req.bindCardXml)
+                logger.info("请求绑定银行卡返回报文[$refno]：\n$returnXml")
+                if (returnXml.isNullOrEmpty()) {
+                    resp.retcode = "99"
+                    resp.retmsg = "请求绑定银行卡返回报文为空"
+                    return resp
+                }
+                val returnResp = XmlUtils.getXmlToObject<DlpayResp>(returnXml.substring(8), "GBK", DlpayResp::class.java)
+                if (null == returnResp) {
+                    resp.retcode = "99"
+                    resp.retmsg = "解析返回报文错误！"
+                    return resp
+                }
+
+                if ("0000" == returnResp.code) {
+                    resp.retcode = "0"
+                    resp.retmsg = "success"
+                    resp.add("outtradeno", returnResp.bankjourno) //银行流水号
+                    resp.add("verifycode", returnResp.captcha) //fixme:短信验证码！！
+                } else {
+                    resp.retcode = "99"
+                    resp.retmsg = returnResp.message
+                }
+                return resp
+            } catch (e: Exception) {
+                e.printStackTrace()
+                resp.retcode = "99"
+                resp.retmsg = "请求绑定银行卡异常！e:${e.message}"
+                return resp
+            }
+        }
+
+        /**
+         * 大理农商行银行卡签约/解约
+         * transtype:1-签约，2-解约
+         * */
+        fun CallCitizenCardSigned(config: Map<String, String?>, transdate: String, transtime: String, refno: String, bankcardno: String, name: String, idtype: String, idno: String, phone: String, transtype: String): CallBackResp {
+            val resp = CallBackResp()
+            val ip = config["socket.ip"]
+            val port = config["socket.port"]
+            val idType = IDTypes.findByValue(idtype)
+            if (ip.isNullOrEmpty() || port.isNullOrEmpty()) {
+                resp.retcode = "99"
+                resp.retmsg = "市民卡socket的IP和端口未配置"
+                return resp
+            }
+            if (idType < 0) {
+                resp.retcode = "99"
+                resp.retmsg = "证件类型未识别[$idtype]"
+                return resp
+            }
+            if ("1" != transtype && "2" != transtype) {
+                resp.retcode = "99"
+                resp.retmsg = "请求操作类型错误[$transtype]"
+                return resp
+            }
+
+            val req = DlpayReq().apply {
+                this.transdate = transdate
+                this.transtime = transtime
+                this.sn = refno
+                this.categorie = DlpayReq.DLPAY_CATEGORIE  //业务类别
+                this.bcNo = bankcardno
+                this.name = name
+                this.idType = "$idType"
+                this.idNo = idno
+                this.phone = phone
+                this.transType = transtype  //1-签约，2-解约
+            }
+            logger.info("代扣签(解)约发送报文：\n${req.signXml}")
+            try {
+                val returnXml = DlpayUtil.send(ip, port.toInt(), 10, req.signXml)
+                logger.info("请求代扣签(解)约返回报文[$refno]：\n$returnXml")
+                if (returnXml.isNullOrEmpty()) {
+                    resp.retcode = "99"
+                    resp.retmsg = "请求代扣签(解)约返回报文为空"
+                    return resp
+                }
+                val returnResp = XmlUtils.getXmlToObject<DlpayResp>(returnXml.substring(8), "GBK", DlpayResp::class.java)
+                if (null == returnResp) {
+                    resp.retcode = "99"
+                    resp.retmsg = "解析返回报文错误！"
+                    return resp
+                }
+
+                if ("0000" == returnResp.code) {
+                    resp.retcode = "0"
+                    resp.retmsg = "success"
+                    resp.add("outtradeno", returnResp.bankjourno) //银行流水号
+                } else {
+                    resp.retcode = "99"
+                    resp.retmsg = returnResp.message
+                }
+                return resp
+            } catch (e: Exception) {
+                e.printStackTrace()
+                resp.retcode = "99"
+                resp.retmsg = "请求代扣签(解)约异常！e:${e.message}"
+                return resp
+            }
+        }
+
+        /**
+         * 大理农商行银行卡代扣消费
+         * */
+        fun callCitizenCardPay(config: Map<String, String?>, transdate: String, transtime: String, refno: String, amount:Double, bankcardno: String, name: String, idtype: String, idno: String, phone: String): CallBackResp {
+            val resp = CallBackResp()
+            val ip = config["socket.ip"]
+            val port = config["socket.port"]
+            val merchantBankCardno = config["bankcardno"] //商户银行账号
+            val merchantBankAccname = config["bankaccname"] //商户银行开户名
+            val idType = IDTypes.findByValue(idtype)
+            if (ip.isNullOrEmpty() || port.isNullOrEmpty()) {
+                resp.retcode = "99"
+                resp.retmsg = "市民卡socket的IP和端口未配置"
+                return resp
+            }else if(merchantBankCardno.isNullOrEmpty() || merchantBankAccname.isNullOrEmpty()){
+                resp.retcode = "99"
+                resp.retmsg = "商户银行收款参数未配置"
+                return resp
+            }
+
+            if (idType < 0) {
+                resp.retcode = "99"
+                resp.retmsg = "证件类型未识别[$idtype]"
+                return resp
+            }
+
+            val req = DlpayReq().apply {
+                this.transdate = transdate
+                this.transtime = transtime
+                this.sn = refno
+                this.categorie = DlpayReq.DLPAY_CATEGORIE //业务代码
+                this.bcNo = bankcardno
+                this.name = name
+                this.idType = "$idType"
+                this.idNo = idno
+                this.merchantBcno = merchantBankCardno
+                this.merchantName = merchantBankAccname
+                this.amount = MoneyUtil.YuanToFen(amount)
+                this.description="市民卡代扣消费"
+            }
+            logger.info("请求代扣消费发送报文：\n${req.cardpayXml}")
+            try {
+                val returnXml = DlpayUtil.send(ip, port.toInt(), 10, req.cardpayXml)
+                logger.info("请求代扣消费返回报文[$refno]：\n$returnXml")
+                if (returnXml.isNullOrEmpty()) {
+                    resp.retcode = "99"
+                    resp.retmsg = "请求代扣消费返回报文为空"
+                    return resp
+                }
+                val returnResp = XmlUtils.getXmlToObject<DlpayResp>(returnXml.substring(8), "GBK", DlpayResp::class.java)
+                if (null == returnResp) {
+                    resp.retcode = "99"
+                    resp.retmsg = "解析返回报文错误！"
+                    return resp
+                }
+
+                if ("0000" == returnResp.code) {
+                    resp.retcode = "0"
+                    resp.retmsg = "success"
+                    resp.add("outtradeno", returnResp.bankjourno) //银行流水号
+                } else {
+                    resp.retcode = "99"
+                    resp.retmsg = returnResp.message
+                }
+                return resp
+            } catch (e: Exception) {
+                e.printStackTrace()
+                //fixme: 查询逻辑？
+                resp.retcode = "99"
+                resp.retmsg = "请求代扣消费异常！e:${e.message}"
+                return resp
+            }
+        }
+
         fun CallCitizenCardPay(config: Map<String, String?>, paydtl: TShopdtl): CallBackResp {
             val resp = CallBackResp()
             resp.retcode = "0"
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
index d373525..739b2c3 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
@@ -2,10 +2,8 @@
 
 import com.google.gson.Gson
 import com.google.gson.reflect.TypeToken
-import com.supwisdom.dlpay.api.APIRequestParam
 import com.supwisdom.dlpay.api.exception.RequestParamCheckException
 import com.supwisdom.dlpay.framework.util.*
-import com.supwisdom.dlpay.util.ConstantUtil
 import com.supwisdom.dlpay.util.DESedeUtil
 
 class DaliDatasyncParam {
@@ -45,7 +43,7 @@
 
     fun decData(deskey: String): ArrayList<DaliDatasyncDetail> {
         try {
-            val listType = object : TypeToken<ArrayList<ConsumeFeetype>>() {}.type
+            val listType = object : TypeToken<ArrayList<DaliDatasyncDetail>>() {}.type
             val decstr = DESedeUtil.getInstance(deskey).decode(data)
             return Gson().fromJson(decstr, listType)
         } catch (e: Exception) {
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index 37daf22..fdec8f7 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -452,32 +452,38 @@
 VALUES ('wechat', 't', '微信支付', 't', 't', 't', 't', 'f', '{tenantid}');
 
 -- 支付方式
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('yktpay','appid',null,'100005', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('yktpay','appkey',null,'adc4ac6822fd462780f878b86cb94688', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('yktpay','orderurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/pay', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('yktpay','reverseurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/payreverse', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'alipay.gateway', '支付宝网关地址', 'https://openapi.alipay.com/gateway.do', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'enable.paymethod', '支付渠道', 'balance,moneyFund,debitCardExpress,bankPay,pcredit', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'notify.url', '异步通知地址', 'http://ykt.supwisdom.com:9116/epay/zfb/newnotify', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'timeout.express', '支付超时时间', '5m', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'alipay.public.key', '支付宝商户应用的支付宝公钥', NULL, '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'alipay.rsa.private.key', '支付宝商户应用RSA私钥', NULL, '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'alipay.rsa.public.key', '支付宝商户应用RSA公钥', NULL, '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'appid', '支付宝应用APPID', NULL, '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('citizenCard', 'bankcardno', NULL, NULL, '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('yktpay','appid',null,'100005', 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('yktpay','appkey',null,'adc4ac6822fd462780f878b86cb94688', 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('yktpay','orderurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/pay', 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('yktpay','reverseurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/payreverse', 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'alipay.gateway', '支付宝网关地址', 'https://openapi.alipay.com/gateway.do', 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'enable.paymethod', '支付渠道', 'balance,moneyFund,debitCardExpress,bankPay,pcredit', 'f', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'notify.url', '异步通知地址', 'http://ykt.supwisdom.com:9116/epay/zfb/newnotify', 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'timeout.express', '支付超时时间', '5m', 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'alipay.public.key', '支付宝商户应用的支付宝公钥', NULL, 'f', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'alipay.rsa.private.key', '支付宝商户应用RSA私钥', NULL, 'f', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'alipay.rsa.public.key', '支付宝商户应用RSA公钥', NULL, 'f', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'appid', '支付宝应用APPID', NULL, 'f', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('citizenCard', 'socket.ip', 'socket的IP', NULL, 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('citizenCard', 'socket.port', 'socket的端口', NULL, 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('citizenCard', 'bankcardno', '商户银行卡号', NULL, 'f', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('citizenCard', 'bankaccname', '银行开户名', NULL, 'f', '{tenantid}');
 
 INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype", "tenantid")
 VALUES (1, 'yes', 1, '20190514165658', '账户最大余额默认值', '元', '10001', '账户开户时的默认账户最大余额', 'amount', '{tenantid}');
@@ -511,18 +517,27 @@
 VALUES ('cancel','dtlStatusList', '交易取消', '流水状态', '{tenantid}');
 
 INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
-VALUES ('1', 'idtypeList', '身份证', '证件类型', '{tenantid}');
+VALUES ('idcard', 'idtypeList', '身份证', '证件类型', '{tenantid}');
 INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
-VALUES ('2', 'idtypeList', '护照', '证件类型', '{tenantid}');
+VALUES ('residence_booklet', 'idtypeList', '户口簿', '证件类型', '{tenantid}');
 INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
-VALUES ('3', 'idtypeList', '驾照', '证件类型', '{tenantid}');
+VALUES ('passport', 'idtypeList', '护照', '证件类型', '{tenantid}');
 INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
-VALUES ('4', 'idtypeList', '港澳通行证', '证件类型', '{tenantid}');
+VALUES ('hk_macau_pass', 'idtypeList', '港澳居民来往内地通行证', '证件类型', '{tenantid}');
 INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
-VALUES ('5', 'idtypeList', '学工号', '证件类型', '{tenantid}');
+VALUES ('taiwan_pass', 'idtypeList', '港澳通行证', '台湾同胞来往内地通行证', '{tenantid}');
 INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
-VALUES ('9', 'idtypeList', '其他', '证件类型', '{tenantid}');
-
+VALUES ('foreigner_residence_permit', 'idtypeList', '港澳通行证', '外国人居留证', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('military_idcard', 'idtypeList', '港澳通行证', '军官证', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('soldier_idcard', 'idtypeList', '港澳通行证', '士兵证', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('driving_license', 'idtypeList', '驾照', '证件类型', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('student_idcard', 'idtypeList', '学工号', '证件类型', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('unknown', 'idtypeList', '其他', '证件类型', '{tenantid}');
 
 INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
 VALUES ('male', 'sexList', '男', '性别', '{tenantid}');
