Skip to content
This repository was archived by the owner on Feb 7, 2025. It is now read-only.

Commit c8e5bc8

Browse files
authored
Merge pull request #357 from mesilov/354-add-x-request-id-support
Add Request ID to query string parameters
2 parents 187ce78 + 2a50cab commit c8e5bc8

File tree

3 files changed

+20
-12
lines changed

3 files changed

+20
-12
lines changed

src/Core/ApiClient.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ public function getCredentials(): Credentials
8484
* @return RenewedAccessToken
8585
* @throws InvalidArgumentException
8686
* @throws TransportExceptionInterface
87-
* @throws \JsonException
8887
* @throws TransportException
8988
*/
9089
public function getNewAccessToken(): RenewedAccessToken
@@ -110,6 +109,7 @@ public function getNewAccessToken(): RenewedAccessToken
110109
'client_id' => $this->getCredentials()->getApplicationProfile()->getClientId(),
111110
'client_secret' => $this->getCredentials()->getApplicationProfile()->getClientSecret(),
112111
'refresh_token' => $this->getCredentials()->getAccessToken()->getRefreshToken(),
112+
$this->requestIdGenerator->getQueryStringParameterName() => $requestId
113113
]
114114
)
115115
);
@@ -170,8 +170,9 @@ public function getResponse(string $apiMethod, array $parameters = []): Response
170170
}
171171
$parameters['auth'] = $this->getCredentials()->getAccessToken()->getAccessToken();
172172
}
173-
174-
173+
// duplicate request id in query string for current version of bitrix24 api
174+
// vendor don't use request id from headers =(
175+
$url .= '?' . $this->requestIdGenerator->getQueryStringParameterName() . '=' . $requestId;
175176
$requestOptions = [
176177
'json' => $parameters,
177178
'headers' => array_merge(

src/Infrastructure/HttpClient/RequestId/DefaultRequestIdGenerator.php

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,20 @@
88

99
class DefaultRequestIdGenerator implements RequestIdGeneratorInterface
1010
{
11-
private const DEFAULT_REQUEST_ID_FIELD_NAME = 'X-Request-ID';
11+
private const DEFAULT_REQUEST_ID_HEADER_FIELD_NAME = 'X-Request-ID';
12+
private const DEFAULT_QUERY_STRING_PARAMETER_NAME = 'request_id';
1213
private const KEY_NAME_VARIANTS = [
1314
'REQUEST_ID',
1415
'HTTP_X_REQUEST_ID',
1516
'UNIQUE_ID'
1617
];
1718

19+
public function getQueryStringParameterName(): string
20+
{
21+
return self::DEFAULT_QUERY_STRING_PARAMETER_NAME;
22+
}
23+
24+
1825
private function generate(): string
1926
{
2027
return Uuid::v7()->toRfc4122();
@@ -23,13 +30,11 @@ private function generate(): string
2330
private function findExists(): ?string
2431
{
2532
$candidate = null;
26-
foreach(self::KEY_NAME_VARIANTS as $key)
27-
{
28-
if(!empty($_SERVER[$key]))
29-
{
30-
$candidate = $_SERVER[$key];
31-
break;
32-
}
33+
foreach (self::KEY_NAME_VARIANTS as $key) {
34+
if (!empty($_SERVER[$key])) {
35+
$candidate = $_SERVER[$key];
36+
break;
37+
}
3338
}
3439
return $candidate;
3540
}
@@ -45,6 +50,6 @@ public function getRequestId(): string
4550

4651
public function getHeaderFieldName(): string
4752
{
48-
return self::DEFAULT_REQUEST_ID_FIELD_NAME;
53+
return self::DEFAULT_REQUEST_ID_HEADER_FIELD_NAME;
4954
}
5055
}

src/Infrastructure/HttpClient/RequestId/RequestIdGeneratorInterface.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,6 @@ interface RequestIdGeneratorInterface
99
public function getRequestId(): string;
1010

1111
public function getHeaderFieldName(): string;
12+
13+
public function getQueryStringParameterName():string;
1214
}

0 commit comments

Comments
 (0)