优化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 e256b06..1cc6089 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.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 RestTemplateConfig {
@Component
@ConfigurationProperties("resttemplate.proxy")
- class RestTemplateProxyConfig {
+ class RestTemplateProxyProperties {
@Value("\${type:}")
lateinit var type: String
@Value("\${host:}")
@@ -96,17 +95,21 @@
}
@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 ccae15f..2ca8fef 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.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 @@
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<String, String?>, resp: AgentResponse): Boolean {
@@ -45,16 +48,36 @@
return true
}
- 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()
- if (checkCfg(config, agentResponse)) {
- var payurl = config[PaytypeUtil.CFG_ALIPAY_PAYURL]
- if (payurl.isNullOrEmpty()) {
- payurl = "https://openapi.alipay.com/gateway.do"
+ private fun createAlipayClient(config: Map<String, String?>): DefaultAlipayClient {
+ val payurl = config[PaytypeUtil.CFG_ALIPAY_PAYURL].let {
+ if (it.isNullOrEmpty()) {
+ "https://openapi.alipay.com/gateway.do"
+ } else {
+ it
}
- val alipayClient = DefaultAlipayClient(payurl, config[PaytypeUtil.CFG_ALIPAY_APPID], config[PaytypeUtil.CFG_ALIPAY_PRIVATEKEY], "json", "UTF-8", config[PaytypeUtil.CFG_ALIPAY_PUBLICKEY], "RSA2")
+ }
+ 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 {
+ 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)) {
val request = AlipayTradePayRequest()
request.bizModel = AlipayTradePayModel().apply {
this.authCode = qrcodePayTrans.qrcode
@@ -63,6 +86,7 @@
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 @@
}
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 @@
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 @@
}
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 @@
}
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 @@
}
override fun doNotify(param: Map<String, String>): 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 @@
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 {