From 407af7bece765dfcafa1239ada1e24b6007fc3d7 Mon Sep 17 00:00:00 2001 From: Tang Cheng Date: Mon, 9 Mar 2020 15:00:32 +0800 Subject: [PATCH] =?utf8?q?fix:=20=E4=BF=AE=E6=94=B9=E5=BE=AE=E4=BF=A1inapp?= =?utf8?q?=20=E6=94=AF=E4=BB=98=E7=9A=84=E4=B8=9A=E5=8A=A1=E4=BA=8B?= =?utf8?q?=E5=8A=A1=E5=AE=8C=E6=95=B4=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../supwisdom/dlpay/agent/InAppPayService.java | 8 +++++++- .../agent/service/impl/wechat_service_impl.kt | 13 ++----------- .../dlpay/agent/service/inapp_alipay.kt | 2 +- .../dlpay/agent/service/inapp_wechatpay.kt | 17 +++++++++-------- .../dlpay/agent/service/wechat_service.kt | 2 +- .../api/controller/transaction_controller.kt | 5 +++-- .../service/impl/transaction_service_impl.kt | 4 ++++ .../dlpay/api/service/transaction_service.kt | 7 +++++++ 8 files changed, 34 insertions(+), 24 deletions(-) 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 c860bbfa..2c66bbc1 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/agent/InAppPayService.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/InAppPayService.java @@ -1,6 +1,7 @@ package com.supwisdom.dlpay.agent; import com.supwisdom.dlpay.api.domain.TTransactionMain; +import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; @@ -17,15 +18,19 @@ public interface InAppPayService { * @param transation * @return */ + @Transactional AgentResponse init(TTransactionMain transation); /** * 当用支付完成后,第三方支付平台会发起通知给服务端,由服务端处理后续业务 * + * + * @param refno * @param request - 第三方平台通知请求的 HttpRequest * @return */ - AgentResponse notify(HttpServletRequest request); + @Transactional + AgentResponse notify(String refno, HttpServletRequest request); /** * 由服务端主动发起的查询第三方支付平交易情况 @@ -33,5 +38,6 @@ public interface InAppPayService { * @param transation - 交易参数 * @return */ + @Transactional AgentResponse query(TTransactionMain transation); } 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 4b8b1c92..50288b90 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 @@ -31,8 +31,6 @@ import java.util.HashMap 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 { @@ -372,7 +370,7 @@ class WechatServiceImpl(val sourceTypeService: SourceTypeService, 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.notify_url = "http://ykt.supwisdom.com:10201/payapi/api/notify/inapp/wechat/100010/${transaction.refno}" this.trade_type = "MWEB" this.scene_info = "{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \" https://pay.qq.com\",\"wap_name\": \"微信支付\"}}" } @@ -455,9 +453,8 @@ class WechatServiceImpl(val sourceTypeService: SourceTypeService, return agentResponse } - override fun doPayNotify(param: Map): AgentResponse { + override fun doPayNotify(transaction: TTransactionMain?, 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 @@ -493,12 +490,6 @@ class WechatServiceImpl(val sourceTypeService: SourceTypeService, 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 { 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 0286f156..f87f9227 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 @@ -16,7 +16,7 @@ class AlipayInAppServcie : InAppPayService { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } - override fun notify(request: HttpServletRequest): AgentResponse? { + override fun notify(String: refno, request: HttpServletRequest): AgentResponse? { 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 841d411d..20105195 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 @@ -3,11 +3,9 @@ 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.SourceTypeService +import com.supwisdom.dlpay.api.service.TransactionServiceProxy import mu.KotlinLogging -import org.dom4j.Element import org.dom4j.io.SAXReader import org.springframework.stereotype.Component import java.util.HashMap @@ -15,8 +13,8 @@ import javax.servlet.http.HttpServletRequest @Component("wechatInAppAgent") -class WechatInAppService(private val sourceTypeService: SourceTypeService, - private val wechatService: WechatService) +class WechatInAppService(private val wechatService: WechatService, + private val transactionServiceProxy: TransactionServiceProxy) : InAppPayService { private val logger = KotlinLogging.logger { } @@ -30,8 +28,8 @@ class WechatInAppService(private val sourceTypeService: SourceTypeService, return wechatPayResponse; } - override fun notify(request: HttpServletRequest): AgentResponse? { - val wechatPayResponse = AgentResponse(); + override fun notify(refno: String, request: HttpServletRequest): AgentResponse? { + val wechatPayResponse = AgentResponse() // 解析结果存储在HashMap val map = HashMap() // 读取输入流 @@ -43,11 +41,14 @@ class WechatInAppService(private val sourceTypeService: SourceTypeService, } // 释放资源 request.inputStream.close() - val resp = wechatService.doPayNotify(map) + val transation = transactionServiceProxy.findTransactionByRefno(refno) + val resp = wechatService.doPayNotify(transation, map) if (resp.code == AgentCode.SUCCESS) { + wechatPayResponse.payload = transactionServiceProxy.success(refno) wechatPayResponse.agentBody = "" } else { wechatPayResponse.agentBody = "" + wechatPayResponse.payload = transactionServiceProxy.fail(refno, resp.agentMsg) } return wechatPayResponse } 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 fc9e813c..7dddd0c7 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 @@ -27,7 +27,7 @@ interface WechatService { fun doPayQuery(transaction: TTransactionMain): AgentResponse - fun doPayNotify(param: Map): AgentResponse + fun doPayNotify(transaction: TTransactionMain?, 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 a87324ff..5710c4ad 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 @@ -221,9 +221,10 @@ class TransactionNotifyController(@Lazy private val tenantDetailsRegistrar: Tena private val transactionServiceProxy: TransactionServiceProxy, private val agentPayServiceContext: AgentPayServiceContext) { - @PostMapping("/inapp/{sourcetype}/{tenant}") + @PostMapping("/inapp/{sourcetype}/{tenant}/{refno}") fun inAppPayCallback(@PathVariable("sourcetype") sourcetype: String, @PathVariable("tenant") tenant: String, + @PathVariable("refno") refno: String, request: HttpServletRequest): ResponseEntity<*> { val tenantDetails = tenantDetailsRegistrar.getTenantDetailsById(tenant) if (!tenantDetails.isPresent) { @@ -232,7 +233,7 @@ class TransactionNotifyController(@Lazy private val tenantDetailsRegistrar: Tena TenantContextHolder.getContext().tenant = tenantDetails.get() val agent = agentPayServiceContext.findInAppPayService(sourcetype) ?: return ResponseBodyBuilder.badRequest("请求支付类型错误 <$sourcetype> 不存在") - val agentResponse = agent.notify(request) + val agentResponse = agent.notify(refno, request) return ResponseBodyBuilder.ok(agentResponse.agentBody) } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt index 77c3e015..b0aefd24 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt @@ -392,6 +392,10 @@ class TransactionServiceImpl : TransactionService { return success(refno, "", true) } + override fun readByRefnoForUpdate(refno: String): TTransactionMain { + return transactionMainDao.findByRefnoForUpdate(refno) + } + ////////////////////////////////////////////////////////////////// // 回退业务接口,包括撤销和退款 override fun refundInit(originRefno: String, refundAmount: Double, builder: TransactionBuilder): TTransactionMain { diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt index ca4ef1d2..cb4a931a 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt @@ -34,6 +34,9 @@ interface TransactionService { @Transactional fun success(refno: String): TTransactionMain + @Transactional + fun readByRefnoForUpdate(refno: String): TTransactionMain + /** * 退款类业务 */ @@ -149,6 +152,10 @@ class TransactionServiceProxy { return transactionMainDao.findByRefno(refno) } + fun findTransactionByRefnoForUpdate(refno: String): TTransactionMain { + return transactionMainDao.findByRefnoForUpdate(refno) + } + fun findByOutTradeNo(refno: String): TTransactionMain? { return transactionMainDao.findByOutTradeNo(refno) } -- 2.17.1