From eb72d7f669f9cf9e05a4b47cda52d2eb5d72f91a Mon Sep 17 00:00:00 2001 From: Tang Cheng Date: Mon, 9 Mar 2020 14:17:02 +0800 Subject: [PATCH] =?utf8?q?fix:=20=E9=87=8D=E6=9E=84=E4=BC=98=E5=8C=96?= =?utf8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../supwisdom/dlpay/agent/AgentResponse.java | 10 ++ .../agent/service/impl/wechat_service_impl.kt | 166 +++++++++--------- .../dlpay/agent/service/inapp_wechatpay.kt | 45 ++--- .../api/controller/consume_api_controller.kt | 1 + .../api/controller/transaction_controller.kt | 1 - 5 files changed, 109 insertions(+), 114 deletions(-) diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java index 149c3ae3..9f450a97 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java @@ -72,4 +72,14 @@ public class AgentResponse { public AgentResponse() { } + + public AgentResponse copyFrom(AgentResponse src) { + this.agentBody = src.agentBody; + this.agentCode = src.agentCode; + this.agentMsg = src.agentMsg; + this.agentRefno = src.agentRefno; + this.code = src.code; + this.dtlStatus = src.dtlStatus; + return this; + } } 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 d355f13f..4b8b1c92 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 @@ -361,97 +361,97 @@ class WechatServiceImpl(val sourceTypeService: SourceTypeService, override fun dopayInit(transaction: TTransactionMain): AgentResponse { val agentResponse = AgentResponse() - //H5 支付 - // val trans = agentServiceProxy.qrcodePayTransFindByRefno(transaction.refno) - // agentResponse.payload = trans - val bean = WechatReqResp().apply { - this.appid = "wx03d12be843cdadd9" - this.mch_id = "1513444041" - this.key = "3VVhvjD2F0kHzayrjgLM81qcz39FgAv1" - 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" - this.trade_type = "MWEB" - this.scene_info = "{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \" https://pay.qq.com\",\"wap_name\": \"微信支付\"}}" - } - bean.generaSign() - val xml = bean.generaXML() - restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8) - val res = restTemplate.postForEntity(PaytypeUtil.CFG_WECHAT_UNIONPAY, xml, String::class.java) - val eleMap = XmlUtils.parseXml(res.body) - val retcode = eleMap["return_code"] - val resultCode = eleMap["result_code"] + //H5 支付 + // val trans = agentServiceProxy.qrcodePayTransFindByRefno(transaction.refno) + // agentResponse.payload = trans + val bean = WechatReqResp().apply { + this.appid = "wx03d12be843cdadd9" + this.mch_id = "1513444041" + this.key = "3VVhvjD2F0kHzayrjgLM81qcz39FgAv1" + 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" + this.trade_type = "MWEB" + this.scene_info = "{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \" https://pay.qq.com\",\"wap_name\": \"微信支付\"}}" + } + bean.generaSign() + val xml = bean.generaXML() + restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8) + val res = restTemplate.postForEntity(PaytypeUtil.CFG_WECHAT_UNIONPAY, xml, String::class.java) + val eleMap = XmlUtils.parseXml(res.body) + val retcode = eleMap["return_code"] + val resultCode = eleMap["result_code"] - if (!retcode.isNullOrEmpty() && "SUCCESS" == retcode - && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode) { - agentResponse.code = AgentCode.REQUIRE_QUERY - agentResponse.agentCode = resultCode - agentResponse.agentMsg = eleMap["return_msg"] - 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() - } + if (!retcode.isNullOrEmpty() && "SUCCESS" == retcode + && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode) { + agentResponse.code = AgentCode.REQUIRE_QUERY + agentResponse.agentCode = resultCode + agentResponse.agentMsg = eleMap["return_msg"] + 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"]}" } - agentResponse.code = AgentCode.FAIL - agentResponse.agentCode = eleMap["err_code"] - agentResponse.agentMsg = eleMap["err_code_des"] } + agentResponse.agentRefno = eleMap["prepay_id"] + } else { + logger.error { "code=${eleMap["err_code"]},des=${eleMap["err_code_des"]}" } + agentResponse.code = AgentCode.FAIL + agentResponse.agentCode = eleMap["err_code"] + agentResponse.agentMsg = eleMap["err_code_des"] + } return agentResponse } override fun doPayQuery(transaction: TTransactionMain): AgentResponse { val agentResponse = AgentResponse() - //H5 支付 - val bean = WechatReqResp().apply { - this.appid = "wx03d12be843cdadd9" - this.mch_id = "1513444041" - this.key = "3VVhvjD2F0kHzayrjgLM81qcz39FgAv1" - this.out_trade_no = transaction.refno - } - bean.generalQuerySign() - val xml = bean.generalQueryXML() - restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8) - val res = restTemplate.postForEntity(PaytypeUtil.CFG_WECHAT_QUERY, xml, String::class.java) - val eleMap = XmlUtils.parseXml(res.body) - val retcode = eleMap["return_code"] - val resultCode = eleMap["result_code"] - val tradeState = eleMap["trade_state"] - if (!retcode.isNullOrEmpty() && "SUCCESS" == retcode - && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode) { - agentResponse.code = AgentCode.REQUIRE_QUERY - agentResponse.agentCode = resultCode - agentResponse.agentMsg = eleMap["return_msg"] - when (tradeState) { - "SUCCESS" -> agentResponse.dtlStatus = DtlStatus.SUCCESS - "REFUND" -> agentResponse.dtlStatus = DtlStatus.REFUND - "NOTPAY", "CLOSED", "REVOKED", "PAYERROR" -> agentResponse.dtlStatus = DtlStatus.FAIL - "USERPAYING" -> agentResponse.dtlStatus = DtlStatus.WAIT - } - } else { - logger.error { "code=${eleMap["err_code"]}},des=${eleMap["err_code_des"]}" } - agentResponse.code = AgentCode.FAIL - agentResponse.agentCode = eleMap["err_code"] - agentResponse.agentMsg = eleMap["err_code_des"] + //H5 支付 + val bean = WechatReqResp().apply { + this.appid = "wx03d12be843cdadd9" + this.mch_id = "1513444041" + this.key = "3VVhvjD2F0kHzayrjgLM81qcz39FgAv1" + this.out_trade_no = transaction.refno + } + bean.generalQuerySign() + val xml = bean.generalQueryXML() + restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8) + val res = restTemplate.postForEntity(PaytypeUtil.CFG_WECHAT_QUERY, xml, String::class.java) + val eleMap = XmlUtils.parseXml(res.body) + val retcode = eleMap["return_code"] + val resultCode = eleMap["result_code"] + val tradeState = eleMap["trade_state"] + if (!retcode.isNullOrEmpty() && "SUCCESS" == retcode + && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode) { + agentResponse.code = AgentCode.REQUIRE_QUERY + agentResponse.agentCode = resultCode + agentResponse.agentMsg = eleMap["return_msg"] + when (tradeState) { + "SUCCESS" -> agentResponse.dtlStatus = DtlStatus.SUCCESS + "REFUND" -> agentResponse.dtlStatus = DtlStatus.REFUND + "NOTPAY", "CLOSED", "REVOKED", "PAYERROR" -> agentResponse.dtlStatus = DtlStatus.FAIL + "USERPAYING" -> agentResponse.dtlStatus = DtlStatus.WAIT } + } else { + logger.error { "code=${eleMap["err_code"]}},des=${eleMap["err_code_des"]}" } + agentResponse.code = AgentCode.FAIL + agentResponse.agentCode = eleMap["err_code"] + agentResponse.agentMsg = eleMap["err_code_des"] + } return agentResponse } @@ -478,8 +478,8 @@ class WechatServiceImpl(val sourceTypeService: SourceTypeService, } 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.getConsumePaytypeConfig(TradeDict.PAYTYPE_WECHAT, transaction.shopDtl.shopaccno, false, false) + val key = "3VVhvjD2F0kHzayrjgLM81qcz39FgAv1" 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_wechatpay.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_wechatpay.kt index 10579ca5..841d411d 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 @@ -6,6 +6,7 @@ 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 mu.KotlinLogging import org.dom4j.Element import org.dom4j.io.SAXReader import org.springframework.stereotype.Component @@ -17,22 +18,15 @@ import javax.servlet.http.HttpServletRequest class WechatInAppService(private val sourceTypeService: SourceTypeService, private val wechatService: WechatService) : InAppPayService { - val APIUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder" + + private val logger = KotlinLogging.logger { } override fun init(transation: TTransactionMain): AgentResponse { val wechatPayResponse = AgentResponse(); - System.err.println("#########"); - val shopDtlTemp = TShopdtl(); - transation.shopDtl = shopDtlTemp; //transaction.shopDtl must not be null val agentResponse = wechatService.dopayInit(transation); - System.err.println(agentResponse); - wechatPayResponse.agentBody = agentResponse.agentBody; - wechatPayResponse.agentCode = agentResponse.agentCode; - wechatPayResponse.agentMsg = agentResponse.agentMsg; - wechatPayResponse.agentRefno = agentResponse.agentRefno; - wechatPayResponse.code = agentResponse.code; - wechatPayResponse.dtlStatus = agentResponse.dtlStatus; - wechatPayResponse.payload = transation + logger.debug { agentResponse } + wechatPayResponse.copyFrom(agentResponse) + .payload = transation return wechatPayResponse; } @@ -40,38 +34,29 @@ class WechatInAppService(private val sourceTypeService: SourceTypeService, val wechatPayResponse = AgentResponse(); // 解析结果存储在HashMap val map = HashMap() - val inputStream = request.inputStream // 读取输入流 val reader = SAXReader() - val document = reader.read(inputStream) - // 得到xml根元素 - val root = document.rootElement - // 得到根元素的所有子节点 - val elementList = root.elements() as MutableList + val document = reader.read(request.inputStream) // 遍历所有子节点 - for (e in elementList) { + for (e in document.rootElement.elements()) { map[e.name] = e.text } // 释放资源 - inputStream.close() + request.inputStream.close() val resp = wechatService.doPayNotify(map) if (resp.code == AgentCode.SUCCESS) { wechatPayResponse.agentBody = "" } else { wechatPayResponse.agentBody = "" } - return wechatPayResponse; + return wechatPayResponse } override fun query(transation: TTransactionMain): AgentResponse { - val wechatPayResponse = AgentResponse(); - val agentResponse = wechatService.doPayQuery(transation); - wechatPayResponse.agentMsg = agentResponse.agentMsg; - wechatPayResponse.agentCode = agentResponse.agentCode; - wechatPayResponse.agentBody = agentResponse.agentBody; - wechatPayResponse.agentRefno = agentResponse.agentRefno; - wechatPayResponse.code = agentResponse.code; - wechatPayResponse.dtlStatus = agentResponse.dtlStatus; - return wechatPayResponse; + val wechatPayResponse = AgentResponse() + val agentResponse = wechatService.doPayQuery(transation) + wechatPayResponse.copyFrom(agentResponse) + .payload = transation + return wechatPayResponse } } \ No newline at end of file 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 93e305d6..cfccf8d3 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 @@ -30,6 +30,7 @@ import javax.validation.Valid @RestController @RequestMapping("/api/consume") +@Validated class ConsumeAPIController(private val qrCodeService: QRCodeService, private val accountUtilServcie: AccountUtilServcie, private val userService: UserService, 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 95e6e034..a87324ff 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 @@ -232,7 +232,6 @@ class TransactionNotifyController(@Lazy private val tenantDetailsRegistrar: Tena TenantContextHolder.getContext().tenant = tenantDetails.get() val agent = agentPayServiceContext.findInAppPayService(sourcetype) ?: return ResponseBodyBuilder.badRequest("请求支付类型错误 <$sourcetype> 不存在") - TenantContextHolder.getContext().tenant = tenantDetails.get() val agentResponse = agent.notify(request) return ResponseBodyBuilder.ok(agentResponse.agentBody) -- 2.17.1