diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java
index 4dbd2bb..45b2ac5 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java
@@ -26,13 +26,13 @@
   public static String send(String ip, int port, int timeout, String data) throws UnknownHostException, IOException {
     Socket client = new Socket(ip, port);
     client.setSoTimeout(timeout * 1000); //timeout秒
-    PrintWriter printWriter = new PrintWriter(client.getOutputStream());
+    PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(client.getOutputStream(),"GBK"));
     // 发送消息
     printWriter.println(data);
     printWriter.flush();
 
     // 读取返回信息
-    InputStreamReader streamReader = new InputStreamReader(client.getInputStream());
+    InputStreamReader streamReader = new InputStreamReader(client.getInputStream(), "GBK");
     BufferedReader reader = new BufferedReader(streamReader);
     StringBuffer content = new StringBuffer(); //存返回信息
     int ch;
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 03f957f..7fae31a 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
@@ -2,6 +2,8 @@
 
 import com.supwisdom.agent.Util.MD5;
 
+import java.io.UnsupportedEncodingException;
+
 public class DlpayReq {
   private static final String prefix = "<?xml version=\"1.0\" encoding=\"GBK\"?>";
   private static final String BANKCARD_BIND_TRANSCODE = "BC5510";
@@ -36,8 +38,8 @@
 
   /**
    * 市民卡绑定请求XML
-   * */
-  public String getBindCardXml() {
+   */
+  public String getBindCardXml() throws UnsupportedEncodingException {
     StringBuffer xml = new StringBuffer();
     xml.append(prefix)
         .append("<root>")
@@ -52,14 +54,13 @@
         .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();
+    return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
   }
 
-
   /**
    * 市民卡签约/解约请求XML
-   * */
-  public String getSignXml(){
+   */
+  public String getSignXml() throws UnsupportedEncodingException {
     StringBuffer xml = new StringBuffer();
     xml.append(prefix)
         .append("<root>")
@@ -75,13 +76,13 @@
         .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();
+    return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
   }
 
   /**
    * 市民卡代扣消费接口请求报文
-   * */
-  public String getCardpayXml(){
+   */
+  public String getCardpayXml() throws UnsupportedEncodingException {
     StringBuffer xml = new StringBuffer();
     xml.append(prefix)
         .append("<root>")
@@ -100,13 +101,13 @@
         .append("<DESCRIPTION>").append(description).append("</DESCRIPTION>")
         .append("<MAC>").append(MD5.encodeByMD5ForYnrcc(merchantBcno + bcNo + amount)).append("</MAC>")
         .append("</root>");
-    return String.format("%08d", xml.toString().length()) + xml.toString();
+    return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
   }
 
   /**
    * 市民卡退款接口请求报文
-   * */
-  public String getPayRefundXml(){
+   */
+  public String getPayRefundXml() throws UnsupportedEncodingException {
     StringBuffer xml = new StringBuffer();
     xml.append(prefix)
         .append("<root>")
@@ -118,13 +119,13 @@
         .append("<AMOUNT>").append(amount).append("</AMOUNT>")
         .append("<DESCRIPTION>").append(description).append("</DESCRIPTION>")
         .append("</root>");
-    return String.format("%08d", xml.toString().length()) + xml.toString();
+    return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
   }
 
   /**
    * 市民卡交易查询接口请求报文
-   * */
-  public String getQueryResultXml(){
+   */
+  public String getQueryResultXml() throws UnsupportedEncodingException {
     StringBuffer xml = new StringBuffer();
     xml.append(prefix)
         .append("<root>")
@@ -134,13 +135,13 @@
         .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();
+    return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
   }
 
   /**
    * 市民卡对账接口请求报文
-   * */
-  public String getChkfileXml(){
+   */
+  public String getChkfileXml() throws UnsupportedEncodingException {
     StringBuffer xml = new StringBuffer();
     xml.append(prefix)
         .append("<root>")
@@ -151,7 +152,7 @@
         .append("<DZDATE>").append(chkdate).append("</DZDATE>")
         .append("<MERCHANT_BCNO>").append("</MERCHANT_BCNO>")
         .append("</root>");
-    return String.format("%08d", xml.toString().length()) + xml.toString();
+    return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
   }
 
   public String getTransdate() {
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java
index 4ae422e..1d492e0 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java
@@ -1,5 +1,6 @@
 package com.supwisdom.agent.api.service.impl;
 
+import com.google.gson.Gson;
 import com.supwisdom.agent.Util.BussinessException;
 import com.supwisdom.agent.Util.DlpayUtil;
 import com.supwisdom.agent.Util.StringUtil;
@@ -76,6 +77,7 @@
 
     try {
       DlpayResp resp = XmlUtils.getXmlToObject(returnXml.substring(8), "GBK", DlpayResp.class);
+      logger.info("==========refno=[" + req.getSn() + "]成功返回：" + new Gson().toJson(resp));
       return resp;
     } catch (Exception e) {
       throw new BussinessException("返回报文解析异常！");
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 52009b1..52c3228 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
@@ -221,7 +221,7 @@
       return false;
     }
 
-    if (StringUtil.checkDatetimeValid(checkdate,"yyyyMMdd")) {
+    if (!StringUtil.checkDatetimeValid(checkdate,"yyyyMMdd")) {
       resp.setCode(ErrorCode.REQ_PARAM_ERROR);
       resp.setMessage("请求参数错误[对账日期]");
       return false;
