diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java b/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java
index c44f94e..ec075b6 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java
@@ -52,6 +52,11 @@
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
   TSourceTypeCheckStatus saveOrUpdateSourceTypeCheckStatus(TSourceTypeCheckStatus s);
 
+  /**
+   * 根据支付类型获取参数配置
+   */
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+  Map<String, String> getConfigByPaytype(String paytype) throws Exception;
 
 
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java
index 1d618fa..f950b06 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java
@@ -211,4 +211,23 @@
     return sourceTypeCheckDao.save(s);
   }
 
+
+  @Override
+  public Map<String, String> getConfigByPaytype(String paytype) throws Exception {
+    //step1: 判断系统支付能力是否启用
+    TSourceType tSourceType = sourceTypeDao.getBySourceType(paytype);
+    if (null == tSourceType) {
+      throw new TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "系统不支持支付方式[" + paytype + "]");
+    }
+    Map<String, String> result = new HashMap<>(0);
+    List<TSourceTypeConfig> list = sourceTypeConfigDao.getBySourceType(paytype);
+    if (!StringUtil.isEmpty(list)) {
+      for (TSourceTypeConfig config : list) {
+        if (config.getGlobalflag()) {
+          result.put(config.getConfigid(), config.getConfigValue()); //统用参数
+        }
+      }
+    }
+    return result;
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/util/PaytypeUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/util/PaytypeUtil.java
index 045e54c..e32d2f8 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/util/PaytypeUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/util/PaytypeUtil.java
@@ -24,6 +24,8 @@
 
     public static final String CFG_ALIPAY_RETURNURL = "alipay.returnurl";
 
+    public static final String CFG_ALIPAY_RETURN = "return.url";
+
     /**
      * 微信支付，配置的KEY值
      */
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/alipay_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/alipay_service.kt
index 553f157..a167c2e 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/alipay_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/alipay_service.kt
@@ -22,6 +22,11 @@
 
     fun doNotify(param: Map<String, String>): AgentResponse<QrcodePayTrans>
 
+    fun doPayPrepay(transaction: TTransactionMain): AgentResponse<QrcodePayTrans>
+
+    fun doPayNotify(transaction: TTransactionMain?,param: Map<String, String>): AgentResponse<QrcodePayTrans>
+
+    fun doPayQuery(transaction: TTransactionMain): AgentResponse<QrcodePayTrans>
 }
 
 @Component("alipayAgent")
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 9dadacd..34cb902 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
@@ -9,6 +9,7 @@
 import com.alipay.api.request.AlipayTradeAppPayRequest
 import com.alipay.api.request.AlipayTradePayRequest
 import com.alipay.api.request.AlipayTradeQueryRequest
+import com.alipay.api.request.AlipayTradeWapPayRequest
 import com.supwisdom.dlpay.RestTemplateConfig
 import com.supwisdom.dlpay.agent.AgentCode
 import com.supwisdom.dlpay.agent.AgentResponse
@@ -26,6 +27,7 @@
 import com.supwisdom.dlpay.util.PaytypeUtil
 import mu.KotlinLogging
 import org.springframework.stereotype.Service
+import java.util.*
 
 
 @Service
@@ -282,4 +284,119 @@
             }
         }
     }
+
+    override fun doPayPrepay(transaction: TTransactionMain): AgentResponse<QrcodePayTrans> {
+        val config = sourceTypeService.getConfigByPaytype(TradeDict.PAYTYPE_ALIPAY);
+        val agentResponse = AgentResponse<QrcodePayTrans>()
+        if (checkCfg(config, agentResponse)) {
+            if (config[PaytypeUtil.CFG_ALIPAY_NOTIFY].isNullOrEmpty()) {
+                agentResponse.code = AgentCode.CONFIG_ERROR
+                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
+                agentResponse.agentMsg = "支付宝相关配置为空"
+                logger.error { "支付宝异步通知地址未配置:${PaytypeUtil.CFG_ALIPAY_NOTIFY}" }
+            }
+            val alipayClient = createAlipayClient(config)
+            val request = AlipayTradeWapPayRequest();
+            var productCode = ""
+            //判断是否为H5
+            if (transaction.transCode == TradeCode.TRANSCODE_H5PAY) productCode = "QUICK_WAP_WAY"
+            request.bizModel = AlipayTradePayModel().apply {
+                this.outTradeNo = transaction.refno
+                this.subject = "点餐充值"
+                this.totalAmount = transaction.personDtl.amount.toString()
+                this.productCode = productCode
+            }
+            request.notifyUrl = config[PaytypeUtil.CFG_ALIPAY_NOTIFY] + transaction.refno
+            request.returnUrl = config[PaytypeUtil.CFG_ALIPAY_RETURN]
+            try {
+                /**
+                 * h5 支付方式
+                 * */
+                if (transaction.transCode == TradeCode.TRANSCODE_H5PAY) {
+                    val form = alipayClient.pageExecute(request).body
+                    //body 为Html
+                    agentResponse.agentBody = form
+                    agentResponse.code = AgentCode.REQUIRE_QUERY
+                } else {
+                    val response = alipayClient.sdkExecute(request)
+                    if (response.isSuccess) {
+                        agentResponse.agentRefno = response.tradeNo
+                        agentResponse.agentMsg = response.msg
+                        agentResponse.agentCode = response.code
+                        //body 为APP
+                        agentResponse.agentBody = response.body
+                    } else {
+                        agentResponse.code = AgentCode.FAIL
+                        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
+            }
+        }
+        return agentResponse
+    }
+
+    override fun doPayNotify(transaction: TTransactionMain?,param: Map<String, String>): AgentResponse<QrcodePayTrans> {
+        val agentResponse = AgentResponse<QrcodePayTrans>()
+        if (transaction == null) {
+            agentResponse.code = AgentCode.REFNO_NOT_EXISTS
+            return agentResponse
+        }
+        if (transaction.status == TradeDict.DTL_STATUS_SUCCESS) {
+            agentResponse.code = AgentCode.SUCCESS
+            return agentResponse
+        }
+        val config = sourceTypeService.getConfigByPaytype(TradeDict.PAYTYPE_ALIPAY);
+        if (config[PaytypeUtil.CFG_ALIPAY_PUBLICKEY].isNullOrEmpty()) {
+            agentResponse.code = AgentCode.CONFIG_ERROR
+            return agentResponse
+        }
+        return when (AlipaySignature.rsaCheckV1(param,
+                config[PaytypeUtil.CFG_ALIPAY_PUBLICKEY], "UTF-8", "RSA2")) {
+            true -> {
+                //total amt 校验 map["total_amount"]
+                agentResponse.code = AgentCode.SUCCESS
+                agentResponse
+            }
+            false -> {
+                logger.error { "支付宝签名校验错误" }
+                agentResponse.code = AgentCode.FAIL
+                agentResponse
+            }
+        }
+    }
+
+    override fun doPayQuery(transaction: TTransactionMain): AgentResponse<QrcodePayTrans> {
+        val agentResponse = AgentResponse<QrcodePayTrans>()
+        val config = sourceTypeService.getConfigByPaytype(TradeDict.PAYTYPE_ALIPAY);
+        if (checkCfg(config, agentResponse)) {
+            val alipayClient = createAlipayClient(config)
+            val request = AlipayTradeQueryRequest()
+            request.bizModel = AlipayTradeQueryModel().apply {
+                this.outTradeNo = transaction.refno
+            }
+            val response = alipayClient.execute(request)
+            if (response.isSuccess) {
+                //check response.totalAmount
+                agentResponse.code = 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
+                    "WAIT_BUYER_PAY" -> agentResponse.dtlStatus = DtlStatus.WAIT
+                }
+            } else {
+                agentResponse.code = AgentCode.FAIL
+                agentResponse.agentMsg = response.msg
+                agentResponse.agentCode = response.code
+            }
+        }
+        return agentResponse
+    }
+
 }
\ No newline at end of file
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 50288b9..6084118 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
@@ -6,11 +6,8 @@
 import com.supwisdom.dlpay.agent.domain.QrcodePayTrans
 import com.supwisdom.dlpay.agent.service.AgentServiceProxy
 import com.supwisdom.dlpay.agent.service.WechatService
-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
@@ -24,7 +21,6 @@
 import org.springframework.stereotype.Service
 import org.springframework.web.client.RestTemplate
 import java.nio.charset.StandardCharsets
-import java.util.HashMap
 
 
 @Service
@@ -166,7 +162,7 @@
                 this.mch_id = config[PaytypeUtil.CFG_WECHAT_MECHID]
                 this.key = config[PaytypeUtil.CFG_WECHAT_MECHKEY]
                 this.out_trade_no = transaction.refno
-                this.total_fee = MoneyUtil.YuanToFen(transaction.shopDtl.amount)
+                this.total_fee = MoneyUtil.YuanToFen(transaction.personDtl.amount)
                 this.spbill_create_ip = trans.spip
                 this.body = transaction.shopDtl.payInfo
                 this.notify_url = StringUtil.urlAppend(config[PaytypeUtil.CFG_WECHAT_NOTIFY], transaction.tenantid)
@@ -359,20 +355,18 @@
 
     override fun dopayInit(transaction: TTransactionMain): AgentResponse<QrcodePayTrans> {
         val agentResponse = AgentResponse<QrcodePayTrans>()
-        //H5 支付
-        //   val trans = agentServiceProxy.qrcodePayTransFindByRefno(transaction.refno)
-        // agentResponse.payload = trans
+        val config = sourceTypeService.getConfigByPaytype(TradeDict.PAYTYPE_WECHAT);
         val bean = WechatReqResp().apply {
-            this.appid = "wx03d12be843cdadd9"
-            this.mch_id = "1513444041"
-            this.key = "3VVhvjD2F0kHzayrjgLM81qcz39FgAv1"
+            this.appid = config[PaytypeUtil.CFG_WECHAT_APPID]
+            this.mch_id = config[PaytypeUtil.CFG_WECHAT_MECHID]
+            this.key = config[PaytypeUtil.CFG_WECHAT_MECHKEY]
             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/${transaction.refno}"
+            this.total_fee = (Math.round(transaction.personDtl.amount * 100) as Number).toInt()
+            this.spbill_create_ip = "123.12.12.123"
+            this.body = transaction.personDtl.transdesc
+            this.notify_url = config[PaytypeUtil.CFG_WECHAT_NOTIFY] + transaction.refno
             this.trade_type = "MWEB"
-            this.scene_info = "{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \" https://pay.qq.com\",\"wap_name\": \"微信支付\"}}"
+            this.scene_info = "{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \"" + config[PaytypeUtil.CFG_WECHAT_NOTIFY] + "\",\"wap_name\": \"微信支付\"}}"
         }
         bean.generaSign()
         val xml = bean.generaXML()
@@ -418,11 +412,12 @@
 
     override fun doPayQuery(transaction: TTransactionMain): AgentResponse<QrcodePayTrans> {
         val agentResponse = AgentResponse<QrcodePayTrans>()
+        val config = sourceTypeService.getConfigByPaytype(TradeDict.PAYTYPE_WECHAT);
         //H5 支付
         val bean = WechatReqResp().apply {
-            this.appid = "wx03d12be843cdadd9"
-            this.mch_id = "1513444041"
-            this.key = "3VVhvjD2F0kHzayrjgLM81qcz39FgAv1"
+            this.appid = config[PaytypeUtil.CFG_WECHAT_APPID]
+            this.mch_id = config[PaytypeUtil.CFG_WECHAT_MECHID]
+            this.key = config[PaytypeUtil.CFG_WECHAT_MECHKEY]
             this.out_trade_no = transaction.refno
         }
         bean.generalQuerySign()
@@ -475,8 +470,8 @@
         }
         val temp = StringUtil.paraFilter(param)
         var signStr = StringUtil.createLinkString(temp)
-        //     val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_WECHAT, transaction.shopDtl.shopaccno, false, false)
-        val key = "3VVhvjD2F0kHzayrjgLM81qcz39FgAv1"
+        val config = sourceTypeService.getConfigByPaytype(TradeDict.PAYTYPE_WECHAT);
+        val key = config[PaytypeUtil.CFG_WECHAT_MECHKEY]
         signStr += "&key=$key"
         val signRet = MD5.encodeByMD5(signStr)
         logger.error("*******signStr=$signStr")
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 3066b64..6905ad9 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
@@ -1,8 +1,12 @@
 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.api.domain.TShopdtl
 import com.supwisdom.dlpay.api.domain.TTransactionMain
+import com.supwisdom.dlpay.api.service.TransactionServiceProxy
+import mu.KotlinLogging
 import org.springframework.stereotype.Component
 import javax.servlet.http.HttpServletRequest
 
@@ -11,16 +15,50 @@
 }
 
 @Component("alipayInAppAgent")
-class AlipayInAppServcie : InAppPayService<AlipayInAppResponse> {
-    override fun init(transation: TTransactionMain?): AgentResponse<AlipayInAppResponse> {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+class AlipayInAppServcie(private val alipayService: AlipayService,
+                         private val transactionServiceProxy: TransactionServiceProxy) : InAppPayService<TTransactionMain> {
+    private val logger = KotlinLogging.logger { }
+    override fun init(transation: TTransactionMain): AgentResponse<TTransactionMain> {
+        val alipayInAppResponse = AgentResponse<TTransactionMain>()
+        val agentResponse = alipayService.doPayPrepay(transation)
+        logger.debug { agentResponse }
+        alipayInAppResponse.agentBody = agentResponse.agentBody
+        alipayInAppResponse.agentCode = AgentCode.PAYINITSUCCESS.value();
+        return alipayInAppResponse;
     }
 
-    override fun notify(refno: String, request: HttpServletRequest): AgentResponse<AlipayInAppResponse>? {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    override fun notify(refno: String, request: HttpServletRequest): AgentResponse<TTransactionMain>? {
+        val alipayInAppResponse = AgentResponse<TTransactionMain>()
+        val map = mutableMapOf<String, String>()
+        val paramNames = request.parameterNames
+        while (paramNames.hasMoreElements()) {
+            val paramName = paramNames.nextElement() as String
+            val paramValues = request.getParameterValues(paramName)
+            if (paramValues.size == 1) {
+                val paramValue = paramValues[0]
+                if (paramValue.isNotEmpty()) {
+                    map[paramName] = paramValue
+                    logger.error("$paramName=$paramValue")
+                }
+            }
+        }
+        val transation = transactionServiceProxy.findTransactionByRefno(refno)
+        val resp = alipayService.doPayNotify(transation,map)
+         if (resp.code == AgentCode.SUCCESS) {
+            alipayInAppResponse.payload = transactionServiceProxy.success(refno)
+            alipayInAppResponse.agentBody = "success"
+        } else {
+            alipayInAppResponse.payload = transactionServiceProxy.fail(refno, resp.agentMsg)
+            alipayInAppResponse.agentBody = "failure"
+        }
+        return alipayInAppResponse
     }
 
-    override fun query(transation: TTransactionMain?): AgentResponse<AlipayInAppResponse> {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    override fun query(transation: TTransactionMain): AgentResponse<TTransactionMain> {
+        val alipayInAppResponse = AgentResponse<TTransactionMain>()
+        val agentResponse = alipayService.doPayQuery(transation)
+        alipayInAppResponse.copyFrom(agentResponse)
+                .payload = transation
+        return alipayInAppResponse
     }
 }
\ No newline at end of file
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 5710c4a..09697b5 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
@@ -93,15 +93,15 @@
     @PostMapping("/inapp/payinit")
     fun inAppPayInit(@Valid @RequestBody param: InAppPayParam): ResponseEntity<*> {
         val response = InAppPayResponse()
-        if (transactionContainer.count() > 100) {
+       /* if (transactionContainer.count() > 100) {
             return ResponseBodyBuilder.internalServerError("第三方请求异常")
-        }
+        }*/
         val sourceType = sourceTypeService.getBySourceType(param.sourceType)
                 ?: return ResponseBodyBuilder.badRequest("source type <${param.sourceType}> 不存在")
 
         val agent = agentPayServiceContext.findInAppPayService<Any>(sourceType.sourceType)
                 ?: return ResponseBodyBuilder.badRequest("不支持支付方式<${sourceType.sourceType}>")
-        sourceType.depositeSubjno = "112211";
+        sourceType.depositeSubjno = "112211";  //缓存查询redis没值，暂时写死
         val subject = accountUtilServcie.readSubject(sourceType.depositeSubjno)
 
         val tradeCode = when (param.inAppType) {
@@ -109,14 +109,15 @@
             "native" -> TradeCode.TRANSCODE_APPPAY
             else -> return ResponseBodyBuilder.badRequest("app typ <${param.inAppType}> 不支持")
         }
-
+        if(param.description==null){
+            param.description = "描述为空"
+        }
         val builder = TransactionBuilder()
                 .setTransInfo(param.transDate, param.transTime, tradeCode, sourceType.sourceType)
                 .setOutTransInfo(TenantContextHolder.getContext().tenant.id, param.billno)
                 .apply {
-                    param.description = "H5充值";
                     description = param.description
-                    dtltype = "recharge"   //必须的参数
+                    dtltype = param.summary
                 }
         val amount = param.totalAmount / 100.0
         when (param.recipientType) {
