diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/ThirdPayfinishParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/ThirdPayfinishParam.java
index b7c1928..67622a9 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/ThirdPayfinishParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/ThirdPayfinishParam.java
@@ -16,6 +16,7 @@
   @NotNull(message = "交易参考号不能为空")
   private String refno;
 
+
   @Override
   public boolean checkParam() throws RequestParamCheckException {
     return true;
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/ThirdPayinitParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/ThirdPayinitParam.java
index fae16dc..fc8ebe9 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/ThirdPayinitParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/ThirdPayinitParam.java
@@ -42,6 +42,14 @@
   @NotNull(message = "支付方式不能为空")
   private String sourceType;
 
+  @Sign
+  @NotNull(message = "支付类型不能为空，包含:APP，H5，JS，SM")
+  private String subType;
+
+  @Sign
+  private String spip;
+
+
 
   @Override
   public boolean checkParam() throws RequestParamCheckException {
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ConsumePropxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ConsumePropxy.java
index 54975a5..b5e1f3b 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ConsumePropxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ConsumePropxy.java
@@ -1,7 +1,6 @@
 package com.supwisdom.dlpay.paysdk.proxy;
 
-import com.supwisdom.dlpay.api.bean.QrcodePayParam;
-import com.supwisdom.dlpay.api.bean.QrcodePayResponse;
+import com.supwisdom.dlpay.api.bean.*;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -17,4 +16,10 @@
     @PostMapping("/qrcode/confirm")
     QrcodePayResponse  qrcodePayConfirm(@RequestBody QrcodePayParam param);
 
+    @PostMapping("/thirdpay/init")
+    ThirdPayResponse thirdpayInit(@RequestBody ThirdPayinitParam param);
+
+    @PostMapping("/thirdpay/finish")
+    ThirdPayResponse thirdpayFinish(@RequestBody ThirdPayfinishParam param);
+
 }
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 5e5d9ef..36705fe 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
@@ -174,6 +174,11 @@
             response.getRetcode(), equalTo(0));
   }
 
+  @Test
+  public void thirdpay(){
+
+  }
+
   public static void main(String[] args) {
 
   }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/bean/WechatReqResp.java b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/WechatReqResp.java
index 40b62e5..9cc15b9 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/bean/WechatReqResp.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/WechatReqResp.java
@@ -483,6 +483,16 @@
         this.sign = MD5.encodeByMD5(signTemp);
         return sign;
     }
+    public String generaAPPParamters() {
+        String json = "{\"appid\":\"" + this.appid + "\","
+                + "\"nonceStr\":\"" + this.nonce_str + "\","
+                + "\"packages\":\"" + this.wpackage + "\","
+                + "\"nonceStr\":\"" + this.nonce_str + "\","
+                + "\"prepayid\":\"" + this.prepay_id+"\","
+                + "\"timeStamp\":\"" + this.timestamp + "\","
+                + "\"sign\":\"" + this.sign + "\"}";
+        return json;
+    }
 
     public String generaJSAPISign() {
         String signTemp = "appId=" + this.appid
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersonIdentityDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersonIdentityDao.java
index 6ee3e99..250a2ef 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersonIdentityDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersonIdentityDao.java
@@ -2,9 +2,13 @@
 
 import com.supwisdom.dlpay.api.domain.TPersonIdentity;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
 @Repository
 public interface PersonIdentityDao extends JpaRepository<TPersonIdentity, String> {
   TPersonIdentity getByThirdUid(String thirdUid);
+
+  @Query("select a from TPersonIdentity a where a.person.userid=?1 and a.sourcetype=?2 ")
+  TPersonIdentity getBySourcetype(String userid,String sourcetype);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
index 805a984..ec294cf 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
@@ -36,6 +36,12 @@
   @Column(name = "ISSIGNED", length = 20)
   private String issigned;
 
+  @Column(name = "SOURCETYPE", length = 20)
+  private String sourcetype;
+
+  @Column(name = "SOURCETYPEID", length = 64)
+  private String sourcetypeId;
+
   public TPersonIdentity() {
   }
 
@@ -112,4 +118,20 @@
   public void setTenantid(String tenantid) {
     this.tenantid = tenantid;
   }
+
+  public String getSourcetype() {
+    return sourcetype;
+  }
+
+  public void setSourcetype(String sourcetype) {
+    this.sourcetype = sourcetype;
+  }
+
+  public String getSourcetypeId() {
+    return sourcetypeId;
+  }
+
+  public void setSourcetypeId(String sourcetypeId) {
+    this.sourcetypeId = sourcetypeId;
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
index d5bebe9..2657b51 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
@@ -153,4 +153,17 @@
   }
 
 
+  public static String urlAppend(String url ,String path){
+    if(url.endsWith("/")){
+      if(path.startsWith("/")){
+        return url+path.substring(1);
+      }
+      return url+path;
+    }else{
+      if(path.startsWith("/")){
+        return url+path;
+      }
+      return url+"/"+path;
+    }
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java
index d55d345..b78049f 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java
@@ -16,6 +16,18 @@
   // QRcode 聚合支付
   public static final int TRANSCODE_QRCODE = 1002;
 
+  //APP 内支付
+  public static final int TRANSCODE_APPPAY = 1003;
+
+  //H5 支付
+  public static final int TRANSCODE_H5PAY = 1004;
+
+  //JS 支付
+  public static final int TRANSCODE_JSPAY = 1005;
+
+  //小程序 支付
+  public static final int TRANSCODE_SMPAY = 1006;
+
   public static final int TRANSCODE_ERCHARGE = 3500; //账户充值
 
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
index 85c2578..4676ca5 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
@@ -76,6 +76,10 @@
   public static final String PAYTYPE_YKT_CARD = "yktpay"; //一卡通
   public static final String PAYTYPE_OTHER_THIRDPART = "thirdpart"; //其他第三方
 
+  public static final String PAYTYPE_APP = "APP"; //app内支付
+  public static final String PAYTYPE_H5 = "H5"; //H5内支付
+  public static final String PAYTYPE_JS = "JS"; //JS内支付
+  public static final String PAYTYPE_SM = "SM"; //SM内支付
 
   /**
    * feetype
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 2ca8fef..4c9d1ed 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
@@ -24,6 +24,8 @@
 import com.alipay.api.domain.AlipayTradeRefundModel
 import com.supwisdom.dlpay.RestTemplateConfig
 import com.supwisdom.dlpay.api.bean.BaseResp
+import com.supwisdom.dlpay.framework.util.StringUtil
+import com.supwisdom.dlpay.framework.util.TradeCode
 
 
 @Service
@@ -82,7 +84,7 @@
             request.bizModel = AlipayTradePayModel().apply {
                 this.authCode = qrcodePayTrans.qrcode
                 this.outTradeNo = transaction.refno
-                this.subject = "POS扫支付宝二维码消费"
+                this.subject = transaction.shopDtl.payInfo
                 this.totalAmount = transaction.shopDtl.amount.toString()
             }
             try {
@@ -139,33 +141,38 @@
             val request = AlipayTradeAppPayRequest()
             val productCode = ""
             //判断是否为H5
-            //productCode = "QUICK_WAP_WAY"
+            if (transaction.transCode == TradeCode.TRANSCODE_H5PAY) productCode = "QUICK_WAP_WAY"
             request.bizModel = AlipayTradePayModel().apply {
                 this.outTradeNo = transaction.refno
-                this.subject = "支付宝支付"
+                this.subject = transaction.shopDtl.payInfo
                 this.totalAmount = transaction.shopDtl.amount.toString()
                 this.productCode = productCode
             }
-            request.notifyUrl = config[PaytypeUtil.CFG_ALIPAY_NOTIFY]
-            request.returnUrl = config[PaytypeUtil.CFG_ALIPAY_RETURNURL]
+            request.notifyUrl = StringUtil.urlAppend(config[PaytypeUtil.CFG_ALIPAY_NOTIFY],transaction.tenantid)
+            request.returnUrl = StringUtil.urlAppend(config[PaytypeUtil.CFG_ALIPAY_RETURNURL],transaction.tenantid)
             try {
                 /**
                  * h5 支付方式
-                 * String form = alipayClient.pageExecute(request).getBody();
-                 *
                  * */
-                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
+                if (transaction.transCode == TradeCode.TRANSCODE_H5PAY) {
+                    var form = alipayClient.pageExecute(request).body
+                    //body 为Html
+                    agentResponse.agentBody = form
+                    agentResponse.code = AgentCode.REQUIRE_QUERY
                 } else {
-                    agentResponse.code = AgentCode.FAIL
-                    agentResponse.agentMsg = response.msg
-                    agentResponse.agentCode = response.code
-                    logger.error { "支付宝:${response.code},${response.msg},${response.subCode},${response.subMsg}" }
+                    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}" }
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 1f3b6d1..460e113 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
@@ -13,6 +13,7 @@
 import com.supwisdom.dlpay.api.service.SourceTypeService
 import com.supwisdom.dlpay.api.service.TransactionServiceProxy
 import com.supwisdom.dlpay.framework.util.*
+import com.supwisdom.dlpay.framework.util.RandomUtils.getRandomString
 import com.supwisdom.dlpay.util.PaytypeUtil
 import mu.KotlinLogging
 import org.apache.commons.lang.StringUtils
@@ -108,7 +109,7 @@
                 this.out_trade_no = transaction.refno
                 this.total_fee = MoneyUtil.YuanToFen(transaction.shopDtl.amount)
                 this.spbill_create_ip = qrcodeTrans.spip
-                this.body = "POS扫微信二维码支付"
+                this.body = transaction.shopDtl.payInfo
             }
 
             bean.generalPaySign()
@@ -152,19 +153,28 @@
         val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_WECHAT, transaction.shopDtl.shopaccno, false, false)
         if (checkCfg(config, agentResponse)) {
             //H5 支付
+            val trans = agentServiceProxy.qrcodePayTransFindByRefno(transaction.refno)
             val bean = WechatReqResp().apply {
                 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 = MoneyUtil.YuanToFen(transaction.shopDtl.amount)
-                this.spbill_create_ip = ""
-                this.body = "微信支付"
-                this.trade_type = "MWEB"
-                this.notify_url = config[PaytypeUtil.CFG_WECHAT_NOTIFY]
+                this.spbill_create_ip = trans.spip
+                this.body = transaction.shopDtl.payInfo
+                this.notify_url = StringUtil.urlAppend(config[PaytypeUtil.CFG_WECHAT_NOTIFY],transaction.tenantid)
+                this.trade_type = when(transaction.transCode){TradeCode.TRANSCODE_H5PAY->"MWEB"
+                    TradeCode.TRANSCODE_JSPAY->"JSAPI"
+                    TradeCode.TRANSCODE_APPPAY->"APP"
+                    else->"JSAPI"}
                 this.scene_info = "{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \"" + config[PaytypeUtil.CFG_WECHAT_NOTIFY] + "\",\"wap_name\": \"微信支付\"}}"
             }
-            //TODO IP 问题
+            if( transaction.transCode==TradeCode.TRANSCODE_JSPAY || transaction.transCode==TradeCode.TRANSCODE_SMPAY){
+                var p = personIdentityDao.getBySourcetype(transaction.personDtl.userid,transaction.sourceType)
+                if(p!=null){
+                    bean.openid = p.sourcetypeId
+                }
+            }
             bean.generaSign()
             val xml = bean.generaXML()
             restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8)
@@ -172,13 +182,30 @@
             var eleMap = XmlUtils.parseXml(res.body)
             var retcode = eleMap["return_code"]
             var resultCode = eleMap["result_code"]
-            val mwebUrl = eleMap["mweb_url"]
+
             if (!retcode.isNullOrEmpty() && "SUCCESS" == retcode
-                    && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode && !mwebUrl.isNullOrEmpty()) {
+                    && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode  ) {
                 agentResponse.code = AgentCode.REQUIRE_QUERY
                 agentResponse.agentCode =resultCode
                 agentResponse.agentMsg = eleMap["return_msg"]
-                agentResponse.agentBody = mwebUrl
+                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"]}" }
@@ -242,7 +269,7 @@
                 this.total_fee = MoneyUtil.YuanToFen(transaction.shopDtl.amount)
                 this.refund_fee = MoneyUtil.YuanToFen(transaction.refundAmount)
                 this.out_refund_no = transaction.reverseRefno
-                this.notify_url = config[PaytypeUtil.CFG_WECHAT_NOTIFY]
+                this.notify_url = StringUtil.urlAppend(config[PaytypeUtil.CFG_WECHAT_NOTIFY],transaction.tenantid)
             }
             bean.generaReverseSign()
             val xml = bean.generaReverseXML()
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 ebcb63e..7c35683 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
@@ -618,7 +618,7 @@
         val response = service.pay(transaction)
         return when (response.code) {
             AgentCode.SUCCESS -> {
-                transactionService.success(transaction.refno,response.agentRefno)
+                transactionService.success(transaction.refno, response.agentRefno)
                 ResponseEntity.ok(ResponseBodyBuilder.create()
                         .success(apiResponse))
             }
@@ -642,8 +642,8 @@
      *                           第三方（支付宝、微信）支付【交易初始化】
      * ============================================================================
      * */
-    @PostMapping("/thirdpay/payinit")
-    fun thirdpayInit(@RequestBody param: ThirdPayinitParam): ResponseEntity<Any> {
+    @PostMapping("/thirdpay/init")
+    fun thirdpayInit(@RequestBody param: ThirdPayinitParam,request:HttpServletRequest): ResponseEntity<Any> {
         val dtlType = consumePayService.getDtltypeDictionary(param.dtltype, Dictionary.DTLTYPES)
         val sourceType = sourceTypeService.getBySourceType(param.sourceType)
                 ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
@@ -654,16 +654,20 @@
             val account = accountUtilServcie.readAccount(param.uid)
             val shopacc = accountUtilServcie.readShopbyShopaccno(param.shopaccno)
             val subject = accountUtilServcie.readSubject(sourceType.paySubjno)
-            var transcode=0
-            when(sourceType.sourceType){
-                TradeDict.PAYTYPE_ALIPAY ->transcode = TradeCode.TRANSCODE_ALIPAY
-                TradeDict.PAYTYPE_WECHAT ->transcode = TradeCode.TRANSCODE_WECHAT
+            var transcode = 0
+            var des = ""
+            when (param.subType) {
+                TradeDict.PAYTYPE_APP ->{transcode = TradeCode.TRANSCODE_APPPAY;des="APP内支付"}
+                TradeDict.PAYTYPE_JS -> {transcode = TradeCode.TRANSCODE_JSPAY;des="JS支付"}
+                TradeDict.PAYTYPE_H5 -> {transcode = TradeCode.TRANSCODE_H5PAY;des="H5支付"}
+                TradeDict.PAYTYPE_SM -> {transcode = TradeCode.TRANSCODE_SMPAY;des="小程序支付"}
             }
             val transaction = TransactionBuilder().apply {
-                setTransInfo(param.transdate, param.transtime,transcode,
+                setTransInfo(param.transdate, param.transtime, transcode,
                         sourceType.sourceType)
                 setOutTransInfo(shopacc.shopaccno, param.billno)
                 operator(param.shopaccno, TradeDict.OPERTYPE_SHOP)
+                payinfo=sourceType.paydesc+des
 
             }.person(account).apply {
                 setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_OUT)
@@ -681,10 +685,28 @@
                         }
                     }.init(transactionService)
 
+            var systime = systemUtilService.sysdatetime
+            if(param.spip.isNullOrEmpty()){
+                param.spip = request.remoteAddr
+            }
+            // 2. 记录 qrcode 交易明细表
+            agentServiceProxy.qrcodePayTransSaveOrUpdate(
+                    QrcodePayTrans().apply {
+                        this.agentMerchId = param.shopaccno
+                        this.billno = param.billno
+                        this.qrcode = "none"
+                        this.createTime = systime.sysdate
+                        this.hostdate = systime.hostdate
+                        this.sourceType = sourceType.sourceType
+                        this.isAnonymous = false
+                        this.updateTime = systime.sysdate
+                        this.refno = transaction.refno
+                        this.spip = param.spip
+                    })
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .success(ThirdPayResponse(transaction.refno,
                             transaction.outTradeNo,
-                            transaction.shopDtl.amount,null), "交易初始化成功"))
+                            transaction.shopDtl.amount, null), "交易初始化成功"))
         }
 
         return ResponseEntity.ok(ResponseBodyBuilder.create()
@@ -697,13 +719,13 @@
      *                            第三方（支付宝、微信）支付【交易确认】
      * ============================================================================
      * */
-    @PostMapping("/thirdpay/payfinish")
+    @PostMapping("/thirdpay/finish")
     fun thirdpayFinish(@RequestBody param: ThirdPayfinishParam): ResponseEntity<Any> {
         val dtl = transactionService.wip(param.refno)
-        var type=""
-        if(dtl.transCode== TradeCode.TRANSCODE_ALIPAY){
+        var type = ""
+        if (dtl.transCode == TradeCode.TRANSCODE_ALIPAY) {
             type = TradeDict.PAYTYPE_ALIPAY
-        }else if(dtl.transCode== TradeCode.TRANSCODE_WECHAT){
+        } else if (dtl.transCode == TradeCode.TRANSCODE_WECHAT) {
             type = TradeDict.PAYTYPE_WECHAT
         }
         val service = createAgentService(type)
@@ -714,7 +736,7 @@
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
                             .success(ThirdPayResponse(it.refno,
                                     it.outTradeNo,
-                                    it.shopDtl.amount,resp.agentBody), "交易确认成功"))
+                                    it.shopDtl.amount, resp.agentBody), "交易确认成功"))
 
                 }
             AgentCode.REQUIRE_QUERY -> {
@@ -722,12 +744,12 @@
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .fail(ThirdPayResponse(dtl.refno,
                                 dtl.outTradeNo,
-                                dtl.shopDtl.amount,resp.agentBody), TradeErrorCode.WAIT_QUERY_RESULT, "请查询支付结果"))
+                                dtl.shopDtl.amount, resp.agentBody), TradeErrorCode.WAIT_QUERY_RESULT, "请查询支付结果"))
             }
             else -> //失败
                 transactionService.fail(param.refno, resp.agentMsg).let {
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
-                            .fail(ThirdPayResponse(dtl.refno, dtl.outTradeNo, dtl.shopDtl.amount,resp.agentBody),
+                            .fail(ThirdPayResponse(dtl.refno, dtl.outTradeNo, dtl.shopDtl.amount, resp.agentBody),
                                     TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${resp.agentMsg}"))
                 }
         }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
index 51ed2ef..c4ae9b6 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
@@ -1,15 +1,12 @@
 package com.supwisdom.dlpay.api.controller
 
-import com.supwisdom.dlpay.api.service.AccountUtilServcie
-import com.supwisdom.dlpay.api.service.SourceTypeService
-import com.supwisdom.dlpay.api.service.TransactionService
-import com.supwisdom.dlpay.framework.util.MD5
-import com.supwisdom.dlpay.framework.util.StringUtil
-import com.supwisdom.dlpay.util.PaytypeUtil
+import com.supwisdom.dlpay.agent.AgentCode
+import com.supwisdom.dlpay.agent.service.AlipayService
+import com.supwisdom.dlpay.agent.service.WechatService
+import com.supwisdom.dlpay.framework.tenant.TenantContext
 import org.dom4j.io.SAXReader
 import org.slf4j.LoggerFactory
 import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.util.StringUtils
 import org.springframework.web.bind.annotation.PathVariable
 import org.springframework.web.bind.annotation.RequestMapping
 import org.springframework.web.bind.annotation.ResponseBody
@@ -26,17 +23,16 @@
 class NotifyController {
     private val logger = LoggerFactory.getLogger(NotifyController::class.java)
     @Autowired
-    lateinit var paytypeService: SourceTypeService
+    lateinit var alipayService: AlipayService
     @Autowired
-    lateinit var accountUtilServcie: AccountUtilServcie
+    lateinit var wechatService: WechatService
 
-    @Autowired
-    lateinit var transactionService: TransactionService
-
-    @RequestMapping(value = ["/wechat"])
+    @RequestMapping(value = ["/wechat/{schema}"])
     @ResponseBody
     fun index(@PathVariable schema: String, request: HttpServletRequest,
               response: HttpServletResponse): String {
+        logger.error("====================== 收到微信回调通知 wechat notify: ========================")
+        TenantContext.setTenantSchema(schema)
         try {
             // 解析结果存储在HashMap
             var map: MutableMap<String, String> = HashMap()
@@ -55,44 +51,49 @@
             }
             // 释放资源
             inputStream.close()
-
-            val sign = map["sign"]
-            if (StringUtils.isEmpty(sign)) {
-                logger.error("签名错误")
-                return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名错误]]></return_msg></xml>"
+            val resp = wechatService.doNotify(map)
+            return if (resp.code == AgentCode.SUCCESS) {
+                "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"
+            } else {
+                "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[" + resp.agentMsg + "]]></return_msg></xml>"
             }
-            map = StringUtil.paraFilter(map)
-            //TODO 校验签名
-            var signStr = StringUtil.createLinkString(map)
-            val config = paytypeService.getSourceTypeConfigBySourceType(PaytypeUtil.WECHAT)
-            if (config["appkey"].isNullOrEmpty()) {
-                logger.error("签名错误")
-                return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名错误]]></return_msg></xml>"
-            }
-            val key = config["appkey"]
-            signStr += "&key=$key"
-            val signRet = MD5.encodeByMD5(signStr)
-            logger.error("*******signStr=$signStr")
-            if (!signRet.equals(sign, ignoreCase = true)) {
-                return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名失败]]></return_msg></xml>"
-            }
-            logger.error("*******signRet=$signRet,sign=$sign*****************")
-            val return_code = map["return_code"]
-            val result_code = map["result_code"]
-            val out_trade_no = map["out_trade_no"]
-            if (out_trade_no == null || StringUtils.isEmpty(out_trade_no)) {
-                return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[订单信息错误]]></return_msg></xml>"
-            }
-            if (!StringUtils.isEmpty(return_code) && "SUCCESS" == return_code
-                    && !StringUtils.isEmpty(result_code) && "SUCCESS" == result_code) {
-                //map.get("transaction_id") 第三方流水号
-                transactionService.success(out_trade_no)
-            }
-            return "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"
         } catch (e: Exception) {
             e.printStackTrace()
             logger.error("------------step7----------------" + e.message)
             return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[解析失败]]></return_msg></xml>"
         }
     }
+
+    private fun makeMapFromParam(request: HttpServletRequest): Map<String, String> {
+        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")
+                }
+            }
+        }
+        return map
+    }
+
+    @RequestMapping(value = ["/alipay/{schema}"])
+    @ResponseBody
+    fun alipay(@PathVariable schema: String, request: HttpServletRequest,
+               response: HttpServletResponse): String {
+        logger.error("====================== 收到支付宝回调通知 alipay notify: ========================")
+        TenantContext.setTenantSchema(schema)
+        // 解析结果存储在HashMap
+        val map = makeMapFromParam(request)
+        val resp = alipayService.doNotify(map)
+        return if (resp.code == AgentCode.SUCCESS) {
+            "success"
+        } else {
+            "failure"
+        }
+    }
 }
\ No newline at end of file
