Skip to content

Commit 485562a

Browse files
committed
add configurable timeout for Http Client
1 parent be51337 commit 485562a

File tree

5 files changed

+50
-13
lines changed

5 files changed

+50
-13
lines changed

src/Config/Config.php

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,14 @@ abstract class Config implements Loggable
9999
* @var Subject
100100
*/
101101
protected Subject $logger;
102+
/**
103+
* @var int|null
104+
*/
105+
private ?int $timeout;
106+
/**
107+
* @var int|null
108+
*/
109+
private ?int $connectTimeout;
102110

103111
/**
104112
* @param string $websiteKey
@@ -116,6 +124,8 @@ abstract class Config implements Loggable
116124
* @param string|null $culture
117125
* @param string|null $channel
118126
* @param Subject|null $logger
127+
* @param int|null $timeout
128+
* @param int|null $connectTimeout
119129
*/
120130
public function __construct(
121131
string $websiteKey,
@@ -132,7 +142,9 @@ public function __construct(
132142
?string $moduleVersion = null,
133143
?string $culture = null,
134144
?string $channel = null,
135-
Subject $logger = null
145+
Subject $logger = null,
146+
?int $timeout = null,
147+
?int $connectTimeout = null
136148
) {
137149
$this->websiteKey = $websiteKey;
138150
$this->secretKey = $secretKey;
@@ -149,6 +161,8 @@ public function __construct(
149161
$this->moduleVersion = $_ENV['ModuleVersion'] ?? $moduleVersion ?? '1.0.0';
150162
$this->culture = $_ENV['Culture'] ?? $culture ?? '';
151163
$this->channel = $_ENV['Channel'] ?? $channel ?? '';
164+
$this->timeout = $_ENV['BPE_HTTP_TIMEOUT'] ?? $timeout ?? null;
165+
$this->connectTimeout = $_ENV['BPE_HTTP_CONNECT_TIMEOUT'] ?? $connectTimeout ?? null;
152166

153167
$this->setLogger($logger ?? new DefaultLogger());
154168
}
@@ -357,4 +371,20 @@ public function getLogger(): ?Subject
357371
{
358372
return $this->logger;
359373
}
374+
375+
/**
376+
* @return int|null
377+
*/
378+
public function getTimeout(): ?int
379+
{
380+
return $this->timeout;
381+
}
382+
383+
/**
384+
* @return int|null
385+
*/
386+
public function getConnectTimeout(): ?int
387+
{
388+
return $this->connectTimeout;
389+
}
360390
}

src/Transaction/Client.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class Client
6161
public function __construct(?Config $config)
6262
{
6363
$this->config = $config;
64-
$this->httpClient = HttpClientFactory::createClient($config->getLogger());
64+
$this->httpClient = HttpClientFactory::createClient($config);
6565
}
6666

6767
/**

src/Transaction/Request/HttpClient/GuzzleHttpClientV5.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Buckaroo\Transaction\Request\HttpClient;
44

5+
use Buckaroo\Config\Config;
56
use Buckaroo\Exceptions\BuckarooException;
67
use Buckaroo\Exceptions\TransferException;
78
use Buckaroo\Handlers\Logging\Subject;
@@ -18,14 +19,18 @@ class GuzzleHttpClientV5 extends HttpClientAbstract
1819
protected Subject $logger;
1920
protected ClientInterface $httpClient;
2021

21-
public function __construct(Subject $logger)
22+
/**
23+
* @param Config $config
24+
*/
25+
public function __construct(Config $config)
2226
{
27+
$logger = $config->getLogger();
2328
parent::__construct($logger);
2429
$this->logger = $logger;
2530

2631
$this->httpClient = new Client([
27-
'timeout' => self::TIMEOUT,
28-
'connect_timeout' => self::CONNECT_TIMEOUT,
32+
'timeout' => (int)($config->getTimeout() ?? self::TIMEOUT),
33+
'connect_timeout' => (int)($config->getConnectTimeout() ?? self::CONNECT_TIMEOUT),
2934
]);
3035
}
3136

src/Transaction/Request/HttpClient/GuzzleHttpClientV7.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Buckaroo\Transaction\Request\HttpClient;
44

5+
use Buckaroo\Config\Config;
56
use Buckaroo\Exceptions\BuckarooException;
67
use Buckaroo\Exceptions\TransferException;
78
use Buckaroo\Handlers\Logging\Subject;
@@ -21,17 +22,18 @@ class GuzzleHttpClientV7 extends HttpClientAbstract
2122
protected ClientInterface $httpClient;
2223

2324
/**
24-
* @param Subject $logger
25+
* @param Config $config
2526
*/
26-
public function __construct(Subject $logger)
27+
public function __construct(Config $config)
2728
{
29+
$logger = $config->getLogger();
2830
parent::__construct($logger);
2931

3032
$this->logger = $logger;
3133

3234
$this->httpClient = new Client([
33-
RequestOptions::TIMEOUT => self::TIMEOUT,
34-
RequestOptions::CONNECT_TIMEOUT => self::CONNECT_TIMEOUT,
35+
RequestOptions::TIMEOUT => (int)($config->getTimeout() ?? self::TIMEOUT),
36+
RequestOptions::CONNECT_TIMEOUT => (int)($config->getConnectTimeout() ?? self::CONNECT_TIMEOUT),
3537
]);
3638
}
3739

src/Transaction/Request/HttpClient/HttpClientFactory.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
namespace Buckaroo\Transaction\Request\HttpClient;
44

5-
use Buckaroo\Handlers\Logging\Subject;
5+
use Buckaroo\Config\Config;
66
use Composer\InstalledVersions;
77

88
class HttpClientFactory
99
{
10-
public static function createClient(Subject $logger)
10+
public static function createClient(Config $config)
1111
{
1212
// Detect the installed GuzzleHttp version
1313
$versionString = InstalledVersions::getVersion('guzzlehttp/guzzle');
@@ -16,8 +16,8 @@ public static function createClient(Subject $logger)
1616

1717
// Instantiate the appropriate client based on the major version
1818
if ($majorVersion === 5) {
19-
return new GuzzleHttpClientV5($logger);
19+
return new GuzzleHttpClientV5($config);
2020
}
21-
return new GuzzleHttpClientV7($logger);
21+
return new GuzzleHttpClientV7($config);
2222
}
2323
}

0 commit comments

Comments
 (0)