diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentCode.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentCode.java
index 0d56cc1..a805886 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentCode.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentCode.java
@@ -1,6 +1,8 @@
 package com.supwisdom.dlpay.agent;
 
 public enum AgentCode {
+  PAYINITSUCCESS("SUCCESS", "成功"),
+  PAYINITFAIL("FAIL", "成功"),
   SUCCESS("success", "成功"),
   FAIL("fail", "交易失败"),
   REFNO_NOT_EXISTS("refno_not_exists", "指定流水不存在"),
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/InAppPayService.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/InAppPayService.java
index 47f51d9..88aec26 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/InAppPayService.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/InAppPayService.java
@@ -3,6 +3,8 @@
 import com.supwisdom.dlpay.api.domain.TTransactionMain;
 import org.springframework.http.HttpRequest;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * 微信、支付宝、银联等第三方支付平台 H5 , JSAPI , Native , 小程序等手机端支付接口
  *
@@ -25,7 +27,7 @@
    * @param request     - 第三方平台通知请求的 HttpRequest
    * @return
    */
-  AgentResponse<T> notify(TTransactionMain transaction, HttpRequest request);
+  AgentResponse<T> notify(TTransactionMain transaction, HttpServletRequest request);
 
   /**
    * 由服务端主动发起的查询第三方支付平交易情况
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 61fa734..25a10ba 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
@@ -9,6 +9,8 @@
 import com.supwisdom.dlpay.api.bean.BaseResp
 import com.supwisdom.dlpay.api.bean.WechatReqResp
 import com.supwisdom.dlpay.api.dao.PersonIdentityDao
+import com.supwisdom.dlpay.api.dao.ShopSourceTypeConfigDao
+import com.supwisdom.dlpay.api.dao.SourceTypeConfigDao
 import com.supwisdom.dlpay.api.domain.TTransactionMain
 import com.supwisdom.dlpay.api.service.ConsumePayService
 import com.supwisdom.dlpay.api.service.SourceTypeService
@@ -22,12 +24,15 @@
 import org.springframework.stereotype.Service
 import org.springframework.web.client.RestTemplate
 import java.nio.charset.StandardCharsets
+import java.util.HashMap
 
 
 @Service
 class WechatServiceImpl(val sourceTypeService: SourceTypeService,
                         val agentServiceProxy: AgentServiceProxy,
                         val personIdentityDao: PersonIdentityDao,
+                        val sourceTypeConfigDao: SourceTypeConfigDao,
+                        var shopSourceTypeConfigDao: ShopSourceTypeConfigDao,
                         val consumePayService: ConsumePayService,
                         val transactionService: TransactionServiceProxy,
                         val restTemplate: RestTemplate) : WechatService {
@@ -354,4 +359,100 @@
         return agentResponse
     }
 
+    override fun dopayInit(transaction: TTransactionMain): AgentResponse<QrcodePayTrans> {
+        val agentResponse = AgentResponse<QrcodePayTrans>()
+            //H5 支付
+         //   val trans = agentServiceProxy.qrcodePayTransFindByRefno(transaction.refno)
+           // agentResponse.payload = trans
+            val bean = WechatReqResp().apply {
+                this.appid = "wx03d12be843cdadd9"
+                this.mch_id = "1513444041"
+                this.key = "3VVhvjD2F0kHzayrjgLM81qcz39FgAv1"
+                this.out_trade_no = transaction.refno
+                this.total_fee = 1
+                this.spbill_create_ip = "14.23.150.211"
+                this.body = "充值测试"
+                this.notify_url = "http://ykt.supwisdom.com:10201/payapi/api/notify/inapp/wechat/100010"
+                this.trade_type = "MWEB"
+                this.scene_info = "{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \" https://pay.qq.com\",\"wap_name\": \"微信支付\"}}"
+            }
+            bean.generaSign()
+            val xml = bean.generaXML()
+            restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8)
+            val res = restTemplate.postForEntity(PaytypeUtil.CFG_WECHAT_UNIONPAY, xml, String::class.java)
+            val eleMap = XmlUtils.parseXml(res.body)
+            val retcode = eleMap["return_code"]
+            val resultCode = eleMap["result_code"]
+
+            if (!retcode.isNullOrEmpty() && "SUCCESS" == retcode
+                    && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode) {
+                agentResponse.code = AgentCode.REQUIRE_QUERY
+                agentResponse.agentCode = resultCode
+                agentResponse.agentMsg = eleMap["return_msg"]
+                when {
+                    transaction.transCode == TradeCode.TRANSCODE_H5PAY -> agentResponse.agentBody = eleMap["mweb_url"]
+                    transaction.transCode == TradeCode.TRANSCODE_APPPAY -> {
+                        bean.prepay_id = eleMap["prepay_id"]
+                        bean.timestamp = DateUtil.getNowSecond().toString()
+                        bean.nonce_str = getRandomString(30)
+                        bean.wpackage = "Sign=WXPay"
+                        bean.generaAPPSign()
+                        agentResponse.agentBody = bean.generaAPPParamters()
+                    }
+                    transaction.transCode == TradeCode.TRANSCODE_JSPAY || transaction.transCode == TradeCode.TRANSCODE_SMPAY -> {
+                        bean.prepay_id = eleMap["prepay_id"]
+                        bean.timestamp = DateUtil.getNowSecond().toString()
+                        bean.nonce_str = getRandomString(30)
+                        bean.generaJSAPISign()
+                        agentResponse.agentBody = bean.generaJSAPIParamters()
+                    }
+                }
+                agentResponse.agentRefno = eleMap["prepay_id"]
+            } else {
+                logger.error { "code=${eleMap["err_code"]},des=${eleMap["err_code_des"]}" }
+                agentResponse.code = AgentCode.FAIL
+                agentResponse.agentCode = eleMap["err_code"]
+                agentResponse.agentMsg = eleMap["err_code_des"]
+            }
+
+        return agentResponse
+    }
+
+    override fun doPayQuery(transaction: TTransactionMain): AgentResponse<QrcodePayTrans> {
+        val agentResponse = AgentResponse<QrcodePayTrans>()
+            //H5 支付
+            val bean = WechatReqResp().apply {
+                this.appid = "wx03d12be843cdadd9"
+                this.mch_id = "1513444041"
+                this.key = "3VVhvjD2F0kHzayrjgLM81qcz39FgAv1"
+                this.out_trade_no = transaction.refno
+            }
+            bean.generalQuerySign()
+            val xml = bean.generalQueryXML()
+            restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8)
+            val res = restTemplate.postForEntity(PaytypeUtil.CFG_WECHAT_QUERY, xml, String::class.java)
+            val eleMap = XmlUtils.parseXml(res.body)
+            val retcode = eleMap["return_code"]
+            val resultCode = eleMap["result_code"]
+            val tradeState = eleMap["trade_state"]
+            if (!retcode.isNullOrEmpty() && "SUCCESS" == retcode
+                    && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode) {
+                agentResponse.code = AgentCode.REQUIRE_QUERY
+                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"]}" }
+                agentResponse.code = AgentCode.FAIL
+                agentResponse.agentCode = eleMap["err_code"]
+                agentResponse.agentMsg = eleMap["err_code_des"]
+            }
+        return agentResponse
+    }
+
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_alipay.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_alipay.kt
index b0bcc31..b116675 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_alipay.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_alipay.kt
@@ -5,6 +5,7 @@
 import com.supwisdom.dlpay.api.domain.TTransactionMain
 import org.springframework.http.HttpRequest
 import org.springframework.stereotype.Component
+import javax.servlet.http.HttpServletRequest
 
 class AlipayInAppResponse {
 
@@ -16,7 +17,7 @@
         TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
     }
 
-    override fun notify(transaction: TTransactionMain?, request: HttpRequest?): AgentResponse<AlipayInAppResponse> {
+    override fun notify(transaction: TTransactionMain?, request: HttpServletRequest?): AgentResponse<AlipayInAppResponse> {
         TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
     }
 
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_wechatpay.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_wechatpay.kt
index 494e134..d531da1 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_wechatpay.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_wechatpay.kt
@@ -1,12 +1,18 @@
 package com.supwisdom.dlpay.agent.service
 
+import com.supwisdom.dlpay.agent.AgentCode
 import com.supwisdom.dlpay.agent.AgentResponse
 import com.supwisdom.dlpay.agent.InAppPayService
 import com.supwisdom.dlpay.agent.domain.QrcodePayTrans
+import com.supwisdom.dlpay.api.domain.TShopdtl
 import com.supwisdom.dlpay.api.domain.TTransactionMain
 import com.supwisdom.dlpay.api.service.SourceTypeService
+import org.dom4j.Element
+import org.dom4j.io.SAXReader
 import org.springframework.http.HttpRequest
 import org.springframework.stereotype.Component
+import java.util.HashMap
+import javax.servlet.http.HttpServletRequest
 
 class WechatPayResponse {
     var preId: String = "";
@@ -20,17 +26,56 @@
 
     override fun init(transation: TTransactionMain): AgentResponse<WechatPayResponse> {
         val wechatPayResponse =  AgentResponse<WechatPayResponse>();
-        val agentResponse =  wechatService.doPrepay(transation);
-        System.err.println("++++++++++++++++");
+        System.err.println("#########");
+        val shopDtlTemp =  TShopdtl();
+        transation.shopDtl = shopDtlTemp;               //transaction.shopDtl must not be null
+        val agentResponse =  wechatService.dopayInit(transation);
         System.err.println(agentResponse);
+        wechatPayResponse.agentBody = agentResponse.agentBody;
+        wechatPayResponse.agentCode = agentResponse.agentCode;
+        wechatPayResponse.agentMsg = agentResponse.agentMsg;
+        wechatPayResponse.agentRefno = agentResponse.agentRefno;
+        wechatPayResponse.code = agentResponse.code;
+        wechatPayResponse.dtlStatus = agentResponse.dtlStatus;
         return wechatPayResponse;
     }
 
-    override fun notify(transaction: TTransactionMain?, request: HttpRequest?): AgentResponse<WechatPayResponse> {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    override fun notify(transaction: TTransactionMain?, request: HttpServletRequest): AgentResponse<WechatPayResponse> {
+        val wechatPayResponse =  AgentResponse<WechatPayResponse>();
+        // 解析结果存储在HashMap
+        var map: MutableMap<String, String> = HashMap()
+        val inputStream = request.inputStream
+        // 读取输入流
+        val reader = SAXReader()
+        val document = reader.read(inputStream)
+        // 得到xml根元素
+        val root = document.rootElement
+        // 得到根元素的所有子节点
+        val elementList = root.elements() as MutableList<Element>
+        // 遍历所有子节点
+        for (e in elementList) {
+            map[e.name] = e.text
+        }
+        // 释放资源
+        inputStream.close()
+        val resp = wechatService.doNotify(map)
+         if (resp.code == AgentCode.SUCCESS) {
+             wechatPayResponse.agentBody = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"
+        } else {
+             wechatPayResponse.agentBody = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[" + resp.agentMsg + "]]></return_msg></xml>"
+        }
+        return wechatPayResponse;
     }
 
-    override fun query(transation: TTransactionMain?): AgentResponse<WechatPayResponse> {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    override fun query(transation: TTransactionMain): AgentResponse<WechatPayResponse> {
+        val wechatPayResponse =  AgentResponse<WechatPayResponse>();
+        val agentResponse = wechatService.doPayQuery(transation);
+        wechatPayResponse.agentMsg = agentResponse.agentMsg;
+        wechatPayResponse.agentCode = agentResponse.agentCode;
+        wechatPayResponse.agentBody = agentResponse.agentBody;
+        wechatPayResponse.agentRefno = agentResponse.agentRefno;
+        wechatPayResponse.code = agentResponse.code;
+        wechatPayResponse.dtlStatus = agentResponse.dtlStatus;
+        return wechatPayResponse;
     }
 }
\ No newline at end of file
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 683d186..30c8850 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
@@ -23,6 +23,9 @@
 
     fun doNotify(param: Map<String, String>): AgentResponse<QrcodePayTrans>
 
+    fun dopayInit(transaction: TTransactionMain): AgentResponse<QrcodePayTrans>
+
+    fun doPayQuery(transaction: TTransactionMain): AgentResponse<QrcodePayTrans>
 }
 
 @Component("wechatAgent")
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/transaction_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/transaction_controller.kt
index b895284..30e5a91 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/transaction_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/transaction_controller.kt
@@ -28,6 +28,7 @@
 import org.springframework.http.ResponseEntity
 import org.springframework.validation.annotation.Validated
 import org.springframework.web.bind.annotation.*
+import javax.servlet.http.HttpServletRequest
 import javax.validation.ConstraintViolationException
 import javax.validation.Valid
 import kotlin.math.roundToInt
@@ -103,7 +104,7 @@
 
         val agent = agentPayServiceContext.findInAppPayService<Any>(sourceType.sourceType)
                 ?: return ResponseBodyBuilder.badRequest("不支持支付方式<${sourceType.sourceType}>")
-
+        sourceType.depositeSubjno = "112211";
         val subject = accountUtilServcie.readSubject(sourceType.depositeSubjno)
 
         val tradeCode = when (param.inAppType) {
@@ -116,7 +117,9 @@
                 .setTransInfo(param.transDate, param.transTime, tradeCode, sourceType.sourceType)
                 .setOutTransInfo(TenantContextHolder.getContext().tenant.id, param.billno)
                 .apply {
+                    param.description = "描述不能为空";
                     description = param.description
+                    dtltype = "recharge"   //必须的参数
                 }
         val amount = param.totalAmount / 100.0
         when (param.recipientType) {
@@ -164,7 +167,7 @@
         transactionServiceProxy.wip(transaction.refno)
         transactionContainer.add(transaction.refno)
         val agentResponse = agent.init(transaction)
-        if (agentResponse.code != AgentCode.SUCCESS) {
+        if (agentResponse.agentCode != AgentCode.PAYINITSUCCESS.value()) {
             return ResponseBodyBuilder
                     .internalServerError("请求第三方支付平台失败,${agentResponse.agentMsg}")
         }
@@ -177,6 +180,8 @@
             this.refno = transaction.refno
             this.status = transaction.status
             this.message = "初始化成功"
+            this.callbackUrl =  agentResponse.agentBody
+            this.externalRefno = agentResponse.agentRefno
         }
         return ResponseBodyBuilder.successEntity(response)
     }
@@ -221,27 +226,14 @@
     @PostMapping("/inapp/{sourcetype}/{tenant}")
     fun inAppPayCallback(@PathVariable("sourcetype") sourcetype: String,
                          @PathVariable("tenant") tenant: String,
-                         refno: String,
-                         request: HttpRequest): ResponseEntity<*> {
+                         request: HttpServletRequest): String {
         val tenantDetails = tenantDetailsRegistrar.getTenantDetailsById(tenant)
-                ?: return ResponseBodyBuilder.notFound("请求租户 <$tenant> 不存在")
+                ?: return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[请求租户<$tenant>不存在]]></return_msg></xml>"
         val agent = agentPayServiceContext.findInAppPayService<Any>(sourcetype)
-                ?: return ResponseBodyBuilder.badRequest("请求支付类型错误 <$sourcetype> 不存在")
+                ?: return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[请求支付类型错误 <$sourcetype> 不存在]]></return_msg></xml>"
         TenantContextHolder.getContext().tenant = tenantDetails.get()
-        val transaction = transactionServiceProxy.findTransactionByRefno(refno)
-        val agentResponse = agent.notify(transaction, request)
-        if (agentResponse.code == AgentCode.SUCCESS) {
-            transactionServiceProxy.success(refno)
-        } else if (agentResponse.code == AgentCode.REQUIRE_QUERY) {
-            transaction
-        } else {
-            transactionServiceProxy.fail(refno, agentResponse.agentMsg)
-        }?.let {
-            return ResponseBodyBuilder.successEntity(InAppPayResponse().apply {
-                this.refno = it.refno
-                this.status = it.status
-            })
-        }
-        return ResponseBodyBuilder.internalServerError("请求参数错误")
+        val agentResponse = agent.notify(null,request)
+
+        return agentResponse.agentBody;
     }
 }
\ No newline at end of file
