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 {
