diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/SourceTypeResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/SourceTypeResponse.java
new file mode 100644
index 0000000..8a25097
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/SourceTypeResponse.java
@@ -0,0 +1,20 @@
+package com.supwisdom.dlpay.api.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class SourceTypeResponse extends ApiResponse {
+  private String name;
+  private String type;
+  private String value;
+  private List<SourceTypeResponse> sourceTypeList;
+
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/TransactionProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/TransactionProxy.java
index 045ba98..aa5123e 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/TransactionProxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/TransactionProxy.java
@@ -6,6 +6,7 @@
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
 
 @FeignClient(name = "payTransactionProxy", url = "${payapi.url}")
 public interface TransactionProxy {
@@ -31,7 +32,7 @@
 
   @GetMapping("/api/transaction/inapp/query")
   @JwtMethod
-  TransactionQueryResponse query(@RequestBody String param);
+  TransactionQueryResponse query(@RequestParam("refno")String refno);
 
   @PostMapping("/api/transaction/inapp/payinit")
   @JwtMethod
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
index 7ba2336..cfe3381 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
@@ -50,4 +50,8 @@
   @RequestMapping(value = "/api/user/biz_query", method = RequestMethod.GET)
   @JwtMethod
   CardBizResponse bizQuery(@RequestParam("refno") String refno);
+
+  @GetMapping("/api/user/getpaytypeList")
+  @JwtMethod
+  SourceTypeResponse getpaytypeList(@RequestParam("depositeSubjno") String depositeSubjno);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SourceTypeDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SourceTypeDao.java
index 718841a..5ed3e04 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SourceTypeDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SourceTypeDao.java
@@ -25,4 +25,6 @@
 
   @Query("from TSourceType t where t.enable=true  and t.checkable=true and t.tenantid=?1 order by t.sourceType ")
   List<TSourceType> findNeedChecks(String tenantid);
+
+  List<TSourceType> findTSourceTypesByDepositeSubjno(String depositeSubjno);
 }
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 8e4048b..066ad15 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
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.api.service;
 
+import com.supwisdom.dlpay.api.bean.SourceTypeResponse;
 import com.supwisdom.dlpay.api.domain.TSourceType;
 import com.supwisdom.dlpay.api.domain.TSourceTypeCheckStatus;
 import org.springframework.transaction.annotation.Propagation;
@@ -52,4 +53,7 @@
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
   TSourceTypeCheckStatus saveOrUpdateSourceTypeCheckStatus(TSourceTypeCheckStatus s);
 
+  @Transactional(rollbackFor = Exception.class, readOnly = true)
+  SourceTypeResponse findTSourceTypesByDepositeSubjno(String depositeSubjno);
+
 }
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 5c6b1ea..fa34964 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
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.api.service.impl;
 
+import com.supwisdom.dlpay.api.bean.SourceTypeResponse;
 import com.supwisdom.dlpay.api.dao.*;
 import com.supwisdom.dlpay.api.domain.*;
 import com.supwisdom.dlpay.api.service.SourceTypeService;
@@ -11,6 +12,7 @@
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -210,4 +212,20 @@
     }
     return sourceTypeCheckDao.save(s);
   }
+
+  @Override
+  public SourceTypeResponse findTSourceTypesByDepositeSubjno(String depositeSubjno) {
+    SourceTypeResponse sourceTypeResponseR = new SourceTypeResponse();
+    List<TSourceType> tSourceTypes = sourceTypeDao.findTSourceTypesByDepositeSubjno(depositeSubjno);
+    List<SourceTypeResponse> sourceTypeList = new ArrayList<SourceTypeResponse>();
+    for(TSourceType tSourceType:tSourceTypes){
+      SourceTypeResponse sourceTypeResponse = new SourceTypeResponse();
+      sourceTypeResponse.setName(tSourceType.getPaydesc());
+      sourceTypeResponse.setType(tSourceType.getSourceType());
+      sourceTypeResponse.setValue(tSourceType.getSourceType());
+      sourceTypeList.add(sourceTypeResponse);
+    }
+    sourceTypeResponseR.setSourceTypeList(sourceTypeList);
+    return sourceTypeResponseR;
+  }
 }
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 25a10ba..d355f13 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
@@ -455,4 +455,59 @@
         return agentResponse
     }
 
+    override fun doPayNotify(param: Map<String, String>): AgentResponse<QrcodePayTrans> {
+        val agentResponse = AgentResponse<QrcodePayTrans>()
+        val transaction = consumePayService.getTransactionMainDtl(param["out_trade_no"], 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 sign = param["sign"]
+        if (StringUtils.isEmpty(sign)) {
+            logger.error("签名错误")
+            agentResponse.code = AgentCode.FAIL
+            agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
+            agentResponse.agentMsg = "签名错误"
+        }
+        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"
+        signStr += "&key=$key"
+        val signRet = MD5.encodeByMD5(signStr)
+        logger.error("*******signStr=$signStr")
+        if (!signRet.equals(sign, ignoreCase = true)) {
+            logger.error("签名错误:$signRet,$sign")
+            agentResponse.code = AgentCode.FAIL
+            agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
+            agentResponse.agentMsg = "签名错误"
+        }
+        val returnCode = param["return_code"]
+        val resultCode = param["result_code"]
+        if (!returnCode.isNullOrEmpty() && "SUCCESS" == returnCode
+                && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode) {
+            val transid = param["transaction_id"]
+            if (transid.isNullOrEmpty()) {
+                transactionService.success(transaction.refno)
+            } else {
+                transactionService.success(transaction.refno, transid, true)
+            }
+            agentResponse.code = AgentCode.SUCCESS
+            agentResponse.agentCode = resultCode
+        } else {
+            agentResponse.code = AgentCode.FAIL
+            agentResponse.agentCode = param["err_code"]
+            agentResponse.agentMsg = param["err_code_des"]
+            logger.error { "code=${param["err_code"]},des=${param["err_code_des"]}" }
+        }
+        return agentResponse
+    }
+
 }
\ No newline at end of file
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 d531da1..97ab8e5 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
@@ -58,7 +58,7 @@
         }
         // 释放资源
         inputStream.close()
-        val resp = wechatService.doNotify(map)
+        val resp = wechatService.doPayNotify(map)
          if (resp.code == AgentCode.SUCCESS) {
              wechatPayResponse.agentBody = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"
         } else {
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 30c8850..fc9e813 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
@@ -26,6 +26,8 @@
     fun dopayInit(transaction: TTransactionMain): AgentResponse<QrcodePayTrans>
 
     fun doPayQuery(transaction: TTransactionMain): AgentResponse<QrcodePayTrans>
+
+    fun doPayNotify(param: Map<String, String>): 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 30e5a91..d2d190e 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
@@ -218,7 +218,8 @@
     }
 }
 
-@RestController("/api/notify")
+@RestController
+@RequestMapping("/api/notify")
 class TransactionNotifyController(@Lazy private val tenantDetailsRegistrar: TenantDetailsRegistrar,
                                   private val transactionServiceProxy: TransactionServiceProxy,
                                   private val agentPayServiceContext: AgentPayServiceContext) {
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
index 4facb76..d98fa18 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
@@ -37,6 +37,9 @@
     @Autowired
     private lateinit var transactionService: TransactionServiceProxy
 
+    @Autowired
+    private lateinit var sourceTypeService: SourceTypeService
+
 
     @PostMapping("/open")
     fun openAccount(@RequestBody param: OpenUserParam): ResponseEntity<Any> {
@@ -371,4 +374,14 @@
         }
         return ResponseBodyBuilder.successEntity(result)
     }
+
+    @GetMapping("/getpaytypeList")
+    fun getpaytypeList(depositeSubjno: String): ResponseEntity<SourceTypeResponse> {
+        val sourceTypeResponse = sourceTypeService.findTSourceTypesByDepositeSubjno(depositeSubjno)
+        if(sourceTypeResponse.sourceTypeList==null||sourceTypeResponse.sourceTypeList.size<1){
+            return ResponseBodyBuilder.failEntity(sourceTypeResponse, TradeErrorCode.BUSINESS_DEAL_ERROR,
+                    "未配置支付方式")
+        }
+        return ResponseBodyBuilder.successEntity(sourceTypeResponse)
+    }
 }
\ No newline at end of file
