From: Tang Cheng Date: Sat, 27 Jul 2019 11:30:00 +0000 (+0800) Subject: 优化proxy, alipay 支持 proxy X-Git-Tag: 1.0.1^2~63 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=d717372d9b766f0d274b8982eb85ea542c2536cc;p=epayment%2Ffood_payapi.git 优化proxy, alipay 支持 proxy --- diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt index e256b064..1cc6089b 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt @@ -27,7 +27,6 @@ import org.springframework.data.redis.core.RedisTemplate import org.springframework.data.redis.repository.configuration.EnableRedisRepositories import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer import org.springframework.data.redis.serializer.StringRedisSerializer -import org.springframework.http.client.ClientHttpRequestFactory import org.springframework.http.client.SimpleClientHttpRequestFactory import org.springframework.scheduling.annotation.EnableScheduling import org.springframework.stereotype.Component @@ -86,7 +85,7 @@ class HttpSessionConfig { class RestTemplateConfig { @Component @ConfigurationProperties("resttemplate.proxy") - class RestTemplateProxyConfig { + class RestTemplateProxyProperties { @Value("\${type:}") lateinit var type: String @Value("\${host:}") @@ -96,17 +95,21 @@ class RestTemplateConfig { } @Bean - fun simpleClientHttpRequestFactory(proxyConfig: RestTemplateProxyConfig): SimpleClientHttpRequestFactory { + fun simpleClientHttpRequestFactory(proxyProperties: RestTemplateProxyProperties): + SimpleClientHttpRequestFactory { val factory = SimpleClientHttpRequestFactory() factory.setConnectTimeout(15000) factory.setReadTimeout(5000) - if (proxyConfig.type.isNotEmpty()) { - val proxyType = when (proxyConfig.type) { + if (proxyProperties.type.isNotEmpty()) { + val proxyType = when (proxyProperties.type) { "http" -> Proxy.Type.HTTP "socks5" -> Proxy.Type.SOCKS else -> Proxy.Type.DIRECT } - factory.setProxy(Proxy(proxyType, InetSocketAddress(proxyConfig.host, proxyConfig.port))) + if (proxyType != Proxy.Type.DIRECT) { + factory.setProxy(Proxy(proxyType, + InetSocketAddress(proxyProperties.host, proxyProperties.port))) + } } return factory } 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 ccae15f9..2ca8fef0 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 @@ -22,6 +22,7 @@ import com.alipay.api.request.AlipayTradeQueryRequest import com.supwisdom.dlpay.agent.DtlStatus import com.alipay.api.domain.AlipayTradeQueryModel import com.alipay.api.domain.AlipayTradeRefundModel +import com.supwisdom.dlpay.RestTemplateConfig import com.supwisdom.dlpay.api.bean.BaseResp @@ -29,7 +30,9 @@ import com.supwisdom.dlpay.api.bean.BaseResp class AlipayServiceImpl(val sourceTypeService: SourceTypeService, val agentServiceProxy: AgentServiceProxy, val consumePayService: ConsumePayService, - val transactionService: TransactionServiceProxy) : AlipayService { + val transactionService: TransactionServiceProxy, + val restTemplateProxyProperties: RestTemplateConfig.RestTemplateProxyProperties) + : AlipayService { val logger = KotlinLogging.logger { } fun checkCfg(config: Map, resp: AgentResponse): Boolean { @@ -45,16 +48,36 @@ class AlipayServiceImpl(val sourceTypeService: SourceTypeService, return true } + private fun createAlipayClient(config: Map): DefaultAlipayClient { + val payurl = config[PaytypeUtil.CFG_ALIPAY_PAYURL].let { + if (it.isNullOrEmpty()) { + "https://openapi.alipay.com/gateway.do" + } else { + it + } + } + return DefaultAlipayClient.builder(payurl, config[PaytypeUtil.CFG_ALIPAY_APPID], + config[PaytypeUtil.CFG_ALIPAY_PRIVATEKEY]) + .charset("UTF-8") + .format("json") + .alipayPublicKey(config[PaytypeUtil.CFG_ALIPAY_PUBLICKEY]) + .signType("RSA2") + .also { + if (restTemplateProxyProperties.type == "http") { + it.proxyHost(restTemplateProxyProperties.host) + .proxyPort(restTemplateProxyProperties.port) + } + }.build() + } + override fun doQrcodepay(transaction: TTransactionMain): AgentResponse { - var qrcodePayTrans = agentServiceProxy.qrcodePayTransFindByRefno(transaction.refno) - val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_ALIPAY, transaction.shopDtl.shopaccno, qrcodePayTrans.isAnonymous, false) - var agentResponse = AgentResponse() + val qrcodePayTrans = agentServiceProxy.qrcodePayTransFindByRefno(transaction.refno) + val config = sourceTypeService.getConsumePaytypeConfig( + TradeDict.PAYTYPE_ALIPAY, + transaction.shopDtl.shopaccno, + qrcodePayTrans.isAnonymous, false) + val agentResponse = AgentResponse() if (checkCfg(config, agentResponse)) { - var payurl = config[PaytypeUtil.CFG_ALIPAY_PAYURL] - if (payurl.isNullOrEmpty()) { - payurl = "https://openapi.alipay.com/gateway.do" - } - val alipayClient = DefaultAlipayClient(payurl, config[PaytypeUtil.CFG_ALIPAY_APPID], config[PaytypeUtil.CFG_ALIPAY_PRIVATEKEY], "json", "UTF-8", config[PaytypeUtil.CFG_ALIPAY_PUBLICKEY], "RSA2") val request = AlipayTradePayRequest() request.bizModel = AlipayTradePayModel().apply { this.authCode = qrcodePayTrans.qrcode @@ -63,6 +86,7 @@ class AlipayServiceImpl(val sourceTypeService: SourceTypeService, this.totalAmount = transaction.shopDtl.amount.toString() } try { + val alipayClient = createAlipayClient(config) val response = alipayClient.execute(request) if ("10000" == response.code) { if (response.isSuccess) { @@ -100,8 +124,10 @@ class AlipayServiceImpl(val sourceTypeService: SourceTypeService, } override fun doPrepay(transaction: TTransactionMain): AgentResponse { - val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_ALIPAY, transaction.shopDtl.shopaccno, false, false) - var agentResponse = AgentResponse() + val config = sourceTypeService.getConsumePaytypeConfig( + TradeDict.PAYTYPE_ALIPAY, transaction.shopDtl.shopaccno, + false, false) + val agentResponse = AgentResponse() if (checkCfg(config, agentResponse)) { if (config[PaytypeUtil.CFG_ALIPAY_NOTIFY].isNullOrEmpty()) { agentResponse.code = AgentCode.CONFIG_ERROR @@ -109,13 +135,9 @@ class AlipayServiceImpl(val sourceTypeService: SourceTypeService, agentResponse.agentMsg = "支付宝相关配置为空" logger.error { "支付宝异步通知地址未配置:${PaytypeUtil.CFG_ALIPAY_NOTIFY}" } } - var payurl = config[PaytypeUtil.CFG_ALIPAY_PAYURL] - if (payurl.isNullOrEmpty()) { - payurl = "https://openapi.alipay.com/gateway.do" - } - val alipayClient = DefaultAlipayClient(payurl, config[PaytypeUtil.CFG_ALIPAY_APPID], config[PaytypeUtil.CFG_ALIPAY_PRIVATEKEY], "json", "UTF-8", config[PaytypeUtil.CFG_ALIPAY_PUBLICKEY], "RSA2") + val alipayClient = createAlipayClient(config) val request = AlipayTradeAppPayRequest() - var productCode = "" + val productCode = "" //判断是否为H5 //productCode = "QUICK_WAP_WAY" request.bizModel = AlipayTradePayModel().apply { @@ -154,14 +176,12 @@ class AlipayServiceImpl(val sourceTypeService: SourceTypeService, } override fun doRefund(transaction: TTransactionMain): AgentResponse { - var agentResponse = AgentResponse() - val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_ALIPAY, transaction.shopDtl.shopaccno, false, false) + val agentResponse = AgentResponse() + val config = sourceTypeService.getConsumePaytypeConfig( + TradeDict.PAYTYPE_ALIPAY, transaction.shopDtl.shopaccno, + false, false) if (checkCfg(config, agentResponse)) { - var payurl = config[PaytypeUtil.CFG_ALIPAY_PAYURL] - if (payurl.isNullOrEmpty()) { - payurl = "https://openapi.alipay.com/gateway.do" - } - val alipayClient = DefaultAlipayClient(payurl, config[PaytypeUtil.CFG_ALIPAY_APPID], config[PaytypeUtil.CFG_ALIPAY_PRIVATEKEY], "json", "UTF-8", config[PaytypeUtil.CFG_ALIPAY_PUBLICKEY], "RSA2") + val alipayClient = createAlipayClient(config) val request = AlipayTradeQueryRequest() request.bizModel = AlipayTradeRefundModel().apply { this.outTradeNo = transaction.refno @@ -183,14 +203,11 @@ class AlipayServiceImpl(val sourceTypeService: SourceTypeService, } override fun doQuery(transaction: TTransactionMain): AgentResponse { - var agentResponse = AgentResponse() - val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_ALIPAY, transaction.shopDtl.shopaccno, false, false) + val agentResponse = AgentResponse() + val config = sourceTypeService.getConsumePaytypeConfig( + TradeDict.PAYTYPE_ALIPAY, transaction.shopDtl.shopaccno, false, false) if (checkCfg(config, agentResponse)) { - var payurl = config[PaytypeUtil.CFG_ALIPAY_PAYURL] - if (payurl.isNullOrEmpty()) { - payurl = "https://openapi.alipay.com/gateway.do" - } - val alipayClient = DefaultAlipayClient(payurl, config[PaytypeUtil.CFG_ALIPAY_APPID], config[PaytypeUtil.CFG_ALIPAY_PRIVATEKEY], "json", "UTF-8", config[PaytypeUtil.CFG_ALIPAY_PUBLICKEY], "RSA2") + val alipayClient = createAlipayClient(config) val request = AlipayTradeQueryRequest() request.bizModel = AlipayTradeQueryModel().apply { this.outTradeNo = transaction.refno @@ -216,13 +233,13 @@ class AlipayServiceImpl(val sourceTypeService: SourceTypeService, } override fun doNotify(param: Map): AgentResponse { - var refno = param["out_trade_no"] - var agentResponse = AgentResponse() + val refno = param["out_trade_no"] + val agentResponse = AgentResponse() if (refno.isNullOrEmpty()) { agentResponse.code = AgentCode.FAIL return agentResponse } - var transaction = consumePayService.getTransactionMainDtl(refno, null, null) + val transaction = consumePayService.getTransactionMainDtl(refno, null, null) if (transaction == null) { agentResponse.code = AgentCode.REFNO_NOT_EXISTS return agentResponse @@ -231,16 +248,17 @@ class AlipayServiceImpl(val sourceTypeService: SourceTypeService, agentResponse.code = AgentCode.SUCCESS return agentResponse } - val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_ALIPAY, transaction.shopDtl.shopaccno, false, false) + val config = sourceTypeService.getConsumePaytypeConfig( + TradeDict.PAYTYPE_ALIPAY, transaction.shopDtl.shopaccno, false, false) if (config[PaytypeUtil.CFG_ALIPAY_PUBLICKEY].isNullOrEmpty()) { agentResponse.code = AgentCode.CONFIG_ERROR return agentResponse } - var flag = AlipaySignature.rsaCheckV1(param, config[PaytypeUtil.CFG_ALIPAY_PUBLICKEY], "UTF-8", "RSA2") - return when (flag) { + return when (AlipaySignature.rsaCheckV1(param, + config[PaytypeUtil.CFG_ALIPAY_PUBLICKEY], "UTF-8", "RSA2")) { true -> { //total amt 校验 map["total_amount"] - var tradeno = param["trade_no"] + val tradeno = param["trade_no"] if (tradeno.isNullOrEmpty()) { transactionService.success(transaction.refno) } else {