From 0322eaaf79edc6f1e2f2bdc843fda8502aed522b Mon Sep 17 00:00:00 2001 From: "yunpeng.ma" Date: Wed, 4 Mar 2020 13:07:26 +0800 Subject: [PATCH] =?utf8?q?=E8=8E=B7=E5=8F=96=E6=94=AF=E4=BB=98=E6=96=B9?= =?utf8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../dlpay/api/bean/SourceTypeResponse.java | 20 +++++++ .../dlpay/paysdk/proxy/TransactionProxy.java | 3 +- .../dlpay/paysdk/proxy/UserProxy.java | 4 ++ .../dlpay/api/dao/SourceTypeDao.java | 2 + .../dlpay/api/service/SourceTypeService.java | 4 ++ .../service/impl/SourceTypeServiceImpl.java | 18 ++++++ .../agent/service/impl/wechat_service_impl.kt | 55 +++++++++++++++++++ .../dlpay/agent/service/inapp_wechatpay.kt | 2 +- .../dlpay/agent/service/wechat_service.kt | 2 + .../api/controller/transaction_controller.kt | 3 +- .../api/controller/user_api_controller.kt | 13 +++++ 11 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/SourceTypeResponse.java 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 00000000..8a25097b --- /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 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 045ba980..aa5123ef 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.cloud.openfeign.FeignClient; 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 @@ public interface TransactionProxy { @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 7ba23362..cfe33810 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 @@ public interface UserProxy { @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 718841a2..5ed3e041 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 @@ public interface SourceTypeDao extends JpaRepository { @Query("from TSourceType t where t.enable=true and t.checkable=true and t.tenantid=?1 order by t.sourceType ") List findNeedChecks(String tenantid); + + List 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 8e4048b6..066ad15e 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 @@ public interface SourceTypeService { @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 5c6b1ea7..fa34964b 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.beans.factory.annotation.Autowired; 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 @@ public class SourceTypeServiceImpl implements SourceTypeService { } return sourceTypeCheckDao.save(s); } + + @Override + public SourceTypeResponse findTSourceTypesByDepositeSubjno(String depositeSubjno) { + SourceTypeResponse sourceTypeResponseR = new SourceTypeResponse(); + List tSourceTypes = sourceTypeDao.findTSourceTypesByDepositeSubjno(depositeSubjno); + List sourceTypeList = new ArrayList(); + 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 25a10ba0..d355f13f 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 @@ class WechatServiceImpl(val sourceTypeService: SourceTypeService, return agentResponse } + override fun doPayNotify(param: Map): AgentResponse { + val agentResponse = AgentResponse() + 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 d531da1b..97ab8e5d 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 @@ class WechatInAppService(private val sourceTypeService: SourceTypeService, } // 释放资源 inputStream.close() - val resp = wechatService.doNotify(map) + val resp = wechatService.doPayNotify(map) if (resp.code == AgentCode.SUCCESS) { wechatPayResponse.agentBody = "" } 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 30c88504..fc9e813c 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 @@ interface WechatService { fun dopayInit(transaction: TTransactionMain): AgentResponse fun doPayQuery(transaction: TTransactionMain): AgentResponse + + fun doPayNotify(param: Map): AgentResponse } @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 30e5a91b..d2d190ea 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 @@ class TransactionContainer(private val name: String, } } -@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 4facb76d..d98fa18c 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 @@ class UserAPIController { @Autowired private lateinit var transactionService: TransactionServiceProxy + @Autowired + private lateinit var sourceTypeService: SourceTypeService + @PostMapping("/open") fun openAccount(@RequestBody param: OpenUserParam): ResponseEntity { @@ -371,4 +374,14 @@ class UserAPIController { } return ResponseBodyBuilder.successEntity(result) } + + @GetMapping("/getpaytypeList") + fun getpaytypeList(depositeSubjno: String): ResponseEntity { + 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 -- 2.17.1