diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QrcodePayParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QrcodePayParam.java
index d8e4f13..600d773 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QrcodePayParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QrcodePayParam.java
@@ -47,11 +47,22 @@
   @Sign
   @NotNull(message = "必须指定是否匿名支付", groups = ConfirmAction.class)
   private Boolean anonymous;
+  @Sign
+  @NotEmpty(message = "流水类型不能为空", groups = {InitAction.class, ConfirmAction.class})
+  private String dtltype;
 
   /**请求IP*/
   @Sign
   private String spip;
 
+  public String getDtltype() {
+    return dtltype;
+  }
+
+  public void setDtltype(String dtltype) {
+    this.dtltype = dtltype;
+  }
+
   public String getSpip() {
     return spip;
   }
diff --git a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
index 2d09e9d..937e116 100644
--- a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
+++ b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
@@ -154,20 +154,22 @@
 
     QrcodePayParam param = new QrcodePayParam();
     param.setAmount(1);
-    param.setAnonymous(true);
+    param.setAnonymous(false);
     param.setBillno(DateUtil.getNow());
     param.setQrcodeFormat("origin");
     param.setTransdate(DateUtil.getNow("yyyyMMdd"));
     param.setTranstime(DateUtil.getNow("HHmmss"));
-    param.setTenantid("default");
+    //param.setTenantid("default");
     param.setShopaccno("2000000012");
-    param.setQrcode("286972142340737770");
+    param.setQrcode("134869374484110144");
+    param.setDtltype("canteen");
+    param.setSpip("172.28.43.3");
     QrcodePayResponse response = consumePropxy.qrcodePayInit(param);
     assertThat("qrcodeInit " + response.getRetmsg() + response.getException(),
             response.getRetcode(), equalTo(0));
 
     response = consumePropxy.qrcodePayConfirm(param);
-    assertThat("qrcodeConfirm " + response.getRetmsg() + response.getException(),
+    assertThat("qrcodeConfirm:" + response.getRetmsg() + response.getException()+",query="+response.isRequireQuery(),
             response.getRetcode(), equalTo(0));
   }
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java
index 4da560f..c14ee51 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java
@@ -13,36 +13,36 @@
 
 @Service
 public class QrcodePatternServiceImpl implements QrcodePatternService {
-  private final QrcodePatternDao qrcodePatternDao;
+    private final QrcodePatternDao qrcodePatternDao;
 
-  public QrcodePatternServiceImpl(QrcodePatternDao qrcodePatternDao) {
-    this.qrcodePatternDao = qrcodePatternDao;
-  }
-
-  @Override
-  @Cacheable(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern')")
-  public List<QrcodePattern> getAllQrcodePattern() {
-    return qrcodePatternDao.findByTenantid(TenantContext.getTenantSchema());
-  }
-
-  @Override
-  @CacheEvict(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern') + '.*'")
-  public void deleteAllQrcodePattern() {
-    qrcodePatternDao.deleteByTenantid(TenantContext.getTenantSchema());
-  }
-
-  @Override
-  @CacheEvict(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern') + '.*'")
-  public QrcodePattern saveOrUpdateQrcodePattern(@NotNull QrcodePattern pattern) {
-    if (pattern.getTenantid() == null || pattern.getTenantid().isEmpty()) {
-      pattern.setTenantid(TenantContext.getTenantSchema());
+    public QrcodePatternServiceImpl(QrcodePatternDao qrcodePatternDao) {
+        this.qrcodePatternDao = qrcodePatternDao;
     }
-    return qrcodePatternDao.save(pattern);
-  }
 
-  @Override
-  @Cacheable(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern', #sourceType)")
-  public List<QrcodePattern> findAllBySourcetype(String sourceType) {
-    return qrcodePatternDao.findBySourceTypeAndTenantid(sourceType, TenantContext.getTenantSchema());
-  }
+    @Override
+    @Cacheable(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern')")
+    public List<QrcodePattern> getAllQrcodePattern() {
+        return qrcodePatternDao.findByTenantid(TenantContext.getTenantSchema());
+    }
+
+    @Override
+    @CacheEvict(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern') + '.*'", allEntries = true)
+    public void deleteAllQrcodePattern() {
+        qrcodePatternDao.deleteByTenantid(TenantContext.getTenantSchema());
+    }
+
+    @Override
+    @CacheEvict(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern') + '.*'", allEntries = true)
+    public QrcodePattern saveOrUpdateQrcodePattern(@NotNull QrcodePattern pattern) {
+        if (pattern.getTenantid() == null || pattern.getTenantid().isEmpty()) {
+            pattern.setTenantid(TenantContext.getTenantSchema());
+        }
+        return qrcodePatternDao.save(pattern);
+    }
+
+    @Override
+    @Cacheable(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern', #sourceType)")
+    public List<QrcodePattern> findAllBySourcetype(String sourceType) {
+        return qrcodePatternDao.findBySourceTypeAndTenantid(sourceType, TenantContext.getTenantSchema());
+    }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
index a4767f2..c961f32 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
@@ -23,7 +23,6 @@
   private String accdate; //记账日期
 
   @Column(name = "USERID", length = 32)
-  @NotNull
   private String userid;  //用户ID，或账号
 
   @Column(name = "ACCNO", length = 32)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/alipay_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/alipay_service_impl.kt
index cc19440..ccae15f 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/alipay_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/alipay_service_impl.kt
@@ -66,24 +66,27 @@
                 val response = alipayClient.execute(request)
                 if ("10000" == response.code) {
                     if (response.isSuccess) {
-                        agentResponse.agentRefno = response.tradeNo
                         agentResponse.code = AgentCode.SUCCESS
-                        agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+                        agentResponse.agentRefno = response.tradeNo
+                        agentResponse.agentMsg = response.msg
+                        agentResponse.agentCode = response.code
+                        qrcodePayTrans.agentRefno = response.tradeNo
+                        agentServiceProxy.qrcodePayTransSaveOrUpdate(qrcodePayTrans)
                     } else {
                         agentResponse.code = AgentCode.FAIL
-                        agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                        agentResponse.agentMsg = response.subMsg
+                        agentResponse.agentMsg = response.msg
+                        agentResponse.agentCode = response.code
                         logger.error { "支付宝:${response.code},${response.msg},${response.subCode},${response.subMsg}" }
                     }
                 } else if ("10003" == response.code || "20000" == response.code) {
                     agentResponse.code = AgentCode.REQUIRE_QUERY
-                    agentResponse.agentMsg = "支付请求已提交，等待用户支付"
-                    agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
+                    agentResponse.agentMsg = response.msg
+                    agentResponse.agentCode = response.code
                     logger.error { "支付宝:${response.code},${response.msg},${response.subCode},${response.subMsg}" }
                 } else {
                     agentResponse.code = AgentCode.FAIL
                     agentResponse.agentMsg = response.msg
-                    agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
+                    agentResponse.agentCode = response.code
                     logger.error { "支付宝:${response.code},${response.msg},${response.subCode},${response.subMsg}" }
                 }
             } catch (e: AlipayApiException) {
@@ -132,21 +135,19 @@
                 val response = alipayClient.sdkExecute(request)
                 if (response.isSuccess) {
                     agentResponse.agentRefno = response.tradeNo
-                    agentResponse.code = AgentCode.REQUIRE_QUERY
-                    agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+                    agentResponse.agentMsg = response.msg
+                    agentResponse.agentCode = response.code
                     //body 为APP
                     agentResponse.agentBody = response.body
                 } else {
                     agentResponse.code = AgentCode.FAIL
-                    agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                    agentResponse.agentMsg = response.subMsg
+                    agentResponse.agentMsg = response.msg
+                    agentResponse.agentCode = response.code
                     logger.error { "支付宝:${response.code},${response.msg},${response.subCode},${response.subMsg}" }
                 }
             } catch (e: AlipayApiException) {
                 logger.error { "支付宝:${e.message}" }
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentMsg = "调用支付宝异常"
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
             }
         }
         return agentResponse
@@ -169,12 +170,13 @@
             val response = alipayClient.execute(request)
             if (response.isSuccess) {
                 agentResponse.code = AgentCode.SUCCESS
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+                agentResponse.agentMsg = response.msg
+                agentResponse.agentCode = response.code
                 agentResponse.dtlStatus = DtlStatus.REFUND
             } else {
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                agentResponse.agentMsg = "支付宝退款失败"
+                agentResponse.agentMsg = response.msg
+                agentResponse.agentCode = response.code
             }
         }
         return agentResponse
@@ -197,7 +199,8 @@
             if (response.isSuccess) {
                 //check response.totalAmount
                 agentResponse.code = AgentCode.SUCCESS
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+                agentResponse.agentMsg = response.msg
+                agentResponse.agentCode = response.code
                 when (response.tradeStatus) {
                     "TRADE_SUCCESS", "TRADE_FINISHED" -> agentResponse.dtlStatus = DtlStatus.SUCCESS
                     "TRADE_CLOSED" -> agentResponse.dtlStatus = DtlStatus.REFUND
@@ -205,8 +208,8 @@
                 }
             } else {
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                agentResponse.agentMsg = "支付宝查询失败"
+                agentResponse.agentMsg = response.msg
+                agentResponse.agentCode = response.code
             }
         }
         return agentResponse
@@ -217,27 +220,20 @@
         var agentResponse = AgentResponse()
         if (refno.isNullOrEmpty()) {
             agentResponse.code = AgentCode.FAIL
-            agentResponse.agentMsg = "返回流水号为空"
-            agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
             return agentResponse
         }
         var transaction = consumePayService.getTransactionMainDtl(refno, null, null)
         if (transaction == null) {
             agentResponse.code = AgentCode.REFNO_NOT_EXISTS
-            agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
             return agentResponse
         }
         if (transaction.status == TradeDict.DTL_STATUS_SUCCESS) {
             agentResponse.code = AgentCode.SUCCESS
-            agentResponse.agentMsg = "流水已成功，不能重复入账"
-            agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
             return agentResponse
         }
         val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_ALIPAY, transaction.shopDtl.shopaccno, false, false)
         if (config[PaytypeUtil.CFG_ALIPAY_PUBLICKEY].isNullOrEmpty()) {
             agentResponse.code = AgentCode.CONFIG_ERROR
-            agentResponse.agentMsg = "商户公钥未配置"
-            agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
             return agentResponse
         }
         var flag = AlipaySignature.rsaCheckV1(param, config[PaytypeUtil.CFG_ALIPAY_PUBLICKEY], "UTF-8", "RSA2")
@@ -245,20 +241,17 @@
             true -> {
                 //total amt 校验 map["total_amount"]
                 var tradeno = param["trade_no"]
-                if(tradeno.isNullOrEmpty()){
+                if (tradeno.isNullOrEmpty()) {
                     transactionService.success(transaction.refno)
-                }else{
-                    transactionService.success(transaction.refno,tradeno, true)
+                } else {
+                    transactionService.success(transaction.refno, tradeno, true)
                 }
                 agentResponse.code = AgentCode.SUCCESS
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
                 agentResponse
             }
             false -> {
                 logger.error { "支付宝签名校验错误" }
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentMsg = "签名校验错误"
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
                 agentResponse
             }
         }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/wechat_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/wechat_service_impl.kt
index 94cd031..1f3b6d1 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/wechat_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/wechat_service_impl.kt
@@ -16,8 +16,10 @@
 import com.supwisdom.dlpay.util.PaytypeUtil
 import mu.KotlinLogging
 import org.apache.commons.lang.StringUtils
+import org.springframework.http.converter.StringHttpMessageConverter
 import org.springframework.stereotype.Service
 import org.springframework.web.client.RestTemplate
+import java.nio.charset.StandardCharsets
 
 
 @Service
@@ -61,6 +63,7 @@
             }
             bean.generalCheckSign()
             var xml = bean.generalCheckXML()
+            restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8)
             var res = restTemplate.postForEntity(PaytypeUtil.CFG_WECHAT_OAUTHCODE, xml, String::class.java)
             var eleMap = XmlUtils.parseXml(res.body)
             var retcode = eleMap["return_code"]
@@ -71,16 +74,17 @@
                 qrcodeTrans.agentUserId = openid
                 var ip = personIdentityDao.getByThirdUid(openid)
                 if (ip != null) {
-                    qrcodeTrans.agentUserId = ip.person.userid
+                    qrcodeTrans.userid = ip.person.userid
                 }
                 agentServiceProxy.qrcodePayTransSaveOrUpdate(qrcodeTrans)
                 agentResponse.code = AgentCode.SUCCESS
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+                agentResponse.agentCode = retcode
+                agentResponse.agentMsg = eleMap["return_msg"]
             } else {
                 logger.error { "code=${eleMap["err_code"]},des=${eleMap["err_code_des"]}" }
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                agentResponse.agentMsg = "二维码身份查询失败"
+                agentResponse.agentCode = eleMap["err_code"]
+                agentResponse.agentMsg = eleMap["err_code_des"]
             }
         }
         return agentResponse
@@ -104,25 +108,40 @@
                 this.out_trade_no = transaction.refno
                 this.total_fee = MoneyUtil.YuanToFen(transaction.shopDtl.amount)
                 this.spbill_create_ip = qrcodeTrans.spip
+                this.body = "POS扫微信二维码支付"
             }
 
             bean.generalPaySign()
             var xml = bean.generaPayXML()
+            restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8)
             var res = restTemplate.postForEntity(PaytypeUtil.CFG_WECHAT_QRCODEPAY, xml, String::class.java)
             var eleMap = XmlUtils.parseXml(res.body)
             var retcode = eleMap["return_code"]
             var resultCode = eleMap["result_code"]
             var openid = eleMap["openid"]
+            var errorCode = eleMap["err_code"]
             if (!retcode.isNullOrEmpty() && "SUCCESS" == retcode
                     && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode && !openid.isNullOrEmpty()) {
                 agentResponse.code = AgentCode.SUCCESS
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+                agentResponse.agentCode = resultCode
                 agentResponse.dtlStatus = DtlStatus.SUCCESS
-            } else {
-                logger.error { "code=${eleMap["err_code"]},des=${eleMap["err_code_des"]}" }
+                agentResponse.agentMsg = eleMap["return_msg"]
+                agentResponse.agentRefno = eleMap["transaction_id"]
+                qrcodeTrans.agentRefno =  eleMap["transaction_id"]
+                agentServiceProxy.qrcodePayTransSaveOrUpdate(qrcodeTrans)
+            } else if("SYSTEMERROR"==errorCode||"BANKERROR"==errorCode||"USERPAYING"==errorCode){
+                logger.error { "code=${errorCode},des=${eleMap["err_code_des"]}" }
                 agentResponse.code = AgentCode.REQUIRE_QUERY
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                agentResponse.agentMsg = "请查询支付结果"
+                agentResponse.agentCode = eleMap["err_code"]
+                agentResponse.agentMsg = eleMap["err_code_des"]
+                agentResponse.agentRefno = eleMap["transaction_id"]
+                qrcodeTrans.agentRefno =  eleMap["transaction_id"]
+                agentServiceProxy.qrcodePayTransSaveOrUpdate(qrcodeTrans)
+            }else{
+                agentResponse.code = AgentCode.FAIL
+                agentResponse.agentCode = eleMap["err_code"]
+                agentResponse.agentMsg = eleMap["err_code_des"]
+                logger.error { "code=${errorCode},des=${eleMap["err_code_des"]}" }
             }
         }
         return agentResponse
@@ -148,22 +167,24 @@
             //TODO IP 问题
             bean.generaSign()
             val xml = bean.generaXML()
+            restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8)
             var res = restTemplate.postForEntity(PaytypeUtil.CFG_WECHAT_UNIONPAY, xml, String::class.java)
             var eleMap = XmlUtils.parseXml(res.body)
             var retcode = eleMap["return_code"]
             var resultCode = eleMap["result_code"]
-            val mweb_url = eleMap["mweb_url"]
+            val mwebUrl = eleMap["mweb_url"]
             if (!retcode.isNullOrEmpty() && "SUCCESS" == retcode
-                    && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode && !mweb_url.isNullOrEmpty()) {
+                    && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode && !mwebUrl.isNullOrEmpty()) {
                 agentResponse.code = AgentCode.REQUIRE_QUERY
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
-                agentResponse.agentBody = mweb_url
+                agentResponse.agentCode =resultCode
+                agentResponse.agentMsg = eleMap["return_msg"]
+                agentResponse.agentBody = mwebUrl
                 agentResponse.agentRefno = eleMap["prepay_id"]
             } else {
                 logger.error { "code=${eleMap["err_code"]},des=${eleMap["err_code_des"]}" }
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                agentResponse.agentMsg = "预下单失败"
+                agentResponse.agentCode = eleMap["err_code"]
+                agentResponse.agentMsg = eleMap["err_code_des"]
             }
         }
         return agentResponse
@@ -182,26 +203,28 @@
             }
             bean.generalQuerySign()
             val xml = bean.generalQueryXML()
+            restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8)
             var res = restTemplate.postForEntity(PaytypeUtil.CFG_WECHAT_QUERY, xml, String::class.java)
             var eleMap = XmlUtils.parseXml(res.body)
             var retcode = eleMap["return_code"]
             var resultCode = eleMap["result_code"]
-            val trade_state = eleMap["trade_state"]
+            val tradeState = eleMap["trade_state"]
             if (!retcode.isNullOrEmpty() && "SUCCESS" == retcode
                     && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode) {
                 agentResponse.code = AgentCode.REQUIRE_QUERY
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
-                when (trade_state) {
+                agentResponse.agentCode = resultCode
+                agentResponse.agentMsg = eleMap["return_msg"]
+                when (tradeState) {
                     "SUCCESS" -> agentResponse.dtlStatus = DtlStatus.SUCCESS
                     "REFUND" -> agentResponse.dtlStatus = DtlStatus.REFUND
                     "NOTPAY", "CLOSED", "REVOKED", "PAYERROR" -> agentResponse.dtlStatus = DtlStatus.FAIL
                     "USERPAYING" -> agentResponse.dtlStatus = DtlStatus.WAIT
                 }
             } else {
-                logger.error { "code=${eleMap["err_code"]},des=${eleMap["err_code_des"]}" }
+                logger.error { "code=${eleMap["err_code"]}},des=${eleMap["err_code_des"]}" }
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                agentResponse.agentMsg = "查询失败"
+                agentResponse.agentCode = eleMap["err_code"]
+                agentResponse.agentMsg = eleMap["err_code_des"]
             }
         }
         return agentResponse
@@ -230,13 +253,14 @@
             if (!retcode.isNullOrEmpty() && "SUCCESS" == retcode
                     && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode ) {
                 agentResponse.code = AgentCode.REQUIRE_QUERY
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+                agentResponse.agentCode =resultCode
                 agentResponse.agentRefno = eleMap["refund_id"]
+                agentResponse.agentMsg = eleMap["return_msg"]
             } else {
                 logger.error { "code=${eleMap["err_code"]},des=${eleMap["err_code_des"]}" }
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                agentResponse.agentMsg = "退款申请失败失败：${eleMap["err_code_des"]}"
+                agentResponse.agentCode = eleMap["err_code"]
+                agentResponse.agentMsg = eleMap["err_code_des"]
             }
         }
         return agentResponse
@@ -287,11 +311,11 @@
                 transactionService.success(transaction.refno,transid, true)
             }
             agentResponse.code = AgentCode.SUCCESS
-            agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+            agentResponse.agentCode = resultCode
         } else {
             agentResponse.code = AgentCode.FAIL
-            agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-            agentResponse.agentMsg = "${param["err_code"]}:${param["err_code_des"]}"
+            agentResponse.agentCode = param["err_code"]
+            agentResponse.agentMsg = param["err_code_des"]
             logger.error { "code=${param["err_code"]},des=${param["err_code_des"]}" }
         }
         return agentResponse
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/wechat_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/wechat_service.kt
index 8de5cfe..f07cf84 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/wechat_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/wechat_service.kt
@@ -29,7 +29,7 @@
     fun downloadBill(shopacc:String,accdate:String):BaseResp
 }
 
-@Component("wechatpayAgent")
+@Component("wechatAgent")
 class WeChatPayAgentService(val consumePayService: ConsumePayService,
                             val wechatService: WechatService) : AgentPayService {
     override fun auth(shopaccno: String?, billno: String?): AgentResponse {
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
index 4e3c906..ecc5f3b 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
@@ -118,7 +118,7 @@
     fun logPostMethods(joinPoint: ProceedingJoinPoint, body: Any): Any {
         return try {
             if (body is APIRequestParam) {
-                TenantContext.setTenantSchema(body.tenantid)
+                //TenantContext.setTenantSchema(body.tenantid)
                 body.checkParam()
 
                 if (requestSignCheck &&
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index e47701b..483efd1 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -532,7 +532,7 @@
         val qrcodeTrans = agentServiceProxy.qrcodePayTransFindByMerchIdAndBillno(param.shopaccno,
                 param.billno) ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
                 .fail(apiResponse, TradeErrorCode.BUSINESS_DEAL_ERROR, "未找到billno"))
-        if (qrcodeTrans.refno.isNotEmpty()) {
+        if (!qrcodeTrans.refno.isNullOrEmpty()) {
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .fail(apiResponse, TradeErrorCode.BUSINESS_DEAL_ERROR, "该交易已确认，请查询结果"))
         }
@@ -558,7 +558,7 @@
                             "支付方式<${qrcodeTrans.sourceType}>不支持匿名支付"))
         }
         qrcodeTrans.spip = param.spip
-
+        val dtlType = consumePayService.getDtltypeDictionary(param.dtltype, Dictionary.DTLTYPES)
         //2. 初始化交易流水
         // sourcetype 资产类科目
         val stSubject = accountUtilServcie.readSubject(sourceType.paySubjno)
@@ -567,6 +567,8 @@
             setTransInfo(param.transdate, param.transtime, TradeCode.TRANSCODE_QRCODE, qrcodeTrans.sourceType)
             setOutTransInfo(qrcodeTrans.agentMerchId, qrcodeTrans.billno)
             payinfo = qrcodeSummary(sourceType)
+            description = dtlType.dictcaption
+            dtltype = param.dtltype
         }
 
         val shopacc = accountUtilServcie.readShopbyShopaccno(qrcodeTrans.agentMerchId)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
index a20638d..64f9033 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
@@ -34,11 +34,11 @@
     }
 
     fun oppositeAccNo(): String {
-        return this.oppAccno
+        return if (hasOpposite()) this.oppAccno else ""
     }
 
     fun oppositeAccName(): String {
-        return this.oppAccName
+        return if (hasOpposite()) this.oppAccName else ""
     }
 
     fun setOpposite(accno: String, accName: String) {
@@ -383,9 +383,11 @@
                     throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
                             "商户交易金额不正确")
                 }
-                if (!it.hasOpposite()) {
-                    throw  TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
-                            "商户交易对方账户未设置")
+                if (hasPerson()) {
+                    if (!person().isAnonymous() && !it.hasOpposite()) {
+                        throw  TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+                                "商户交易对方账户未设置")
+                    }
                 }
             }
         }
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index 7c5abc8..2bca5e2 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -588,6 +588,6 @@
 INSERT INTO TB_QRCODE_PATTERN(ID, PATTERN, SOURCETYPE, TENANTID)
 VALUES(1, '28\d{16}', 'alipay', '{tenantid}');
 INSERT INTO TB_QRCODE_PATTERN(ID, PATTERN, SOURCETYPE, TENANTID)
-VALUES(2, '13\d{16}', 'wechatpay', '{tenantid}');
+VALUES(2, '13\d{16}', 'wechat', '{tenantid}');
 ----------------------------------------------------
 commit;
\ No newline at end of file
