|
@@ -16,6 +16,7 @@ class TshieldService
|
|
|
private ?string $token = null;
|
|
private ?string $token = null;
|
|
|
private UserModel $userModel;
|
|
private UserModel $userModel;
|
|
|
private array $individualFieldMap;
|
|
private array $individualFieldMap;
|
|
|
|
|
+ private string $logFilePath;
|
|
|
|
|
|
|
|
public function __construct()
|
|
public function __construct()
|
|
|
{
|
|
{
|
|
@@ -40,6 +41,7 @@ class TshieldService
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$this->userModel = new UserModel();
|
|
$this->userModel = new UserModel();
|
|
|
|
|
+ $this->logFilePath = $this->resolveLogFilePath($_ENV['TSHIELD_LOG_FILE'] ?? null);
|
|
|
$this->individualFieldMap = [
|
|
$this->individualFieldMap = [
|
|
|
'name' => (int)($_ENV['TSHIELD_FIELD_NAME_ID'] ?? 16175),
|
|
'name' => (int)($_ENV['TSHIELD_FIELD_NAME_ID'] ?? 16175),
|
|
|
'document' => (int)($_ENV['TSHIELD_FIELD_DOCUMENT_ID'] ?? 16176),
|
|
'document' => (int)($_ENV['TSHIELD_FIELD_DOCUMENT_ID'] ?? 16176),
|
|
@@ -230,6 +232,8 @@ class TshieldService
|
|
|
$httpCode = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
$httpCode = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
|
curl_close($ch);
|
|
curl_close($ch);
|
|
|
|
|
|
|
|
|
|
+ $this->logToFile($method, $url, $httpCode, $payload, $responseBody);
|
|
|
|
|
+
|
|
|
if ($curlErrNo !== 0) {
|
|
if ($curlErrNo !== 0) {
|
|
|
throw new \RuntimeException(sprintf('cURL error while calling %s: %s (%d)', $url, $curlErr, $curlErrNo));
|
|
throw new \RuntimeException(sprintf('cURL error while calling %s: %s (%d)', $url, $curlErr, $curlErrNo));
|
|
|
}
|
|
}
|
|
@@ -256,6 +260,42 @@ class TshieldService
|
|
|
return $decoded;
|
|
return $decoded;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private function resolveLogFilePath(?string $path): string
|
|
|
|
|
+ {
|
|
|
|
|
+ $path = trim((string)$path);
|
|
|
|
|
+
|
|
|
|
|
+ if ($path === '') {
|
|
|
|
|
+ $path = 'storage/logs/tshield_response.txt';
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!preg_match('/^(?:[A-Za-z]:\\\\|\\/)/', $path)) {
|
|
|
|
|
+ $path = rtrim(dirname(__DIR__), '/\\') . DIRECTORY_SEPARATOR . $path;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $dir = dirname($path);
|
|
|
|
|
+ if (!is_dir($dir)) {
|
|
|
|
|
+ @mkdir($dir, 0775, true);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return $path;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private function logToFile(string $method, string $url, int $httpCode, array $payload, $responseBody): void
|
|
|
|
|
+ {
|
|
|
|
|
+ $ts = (new \DateTimeImmutable())->format('c');
|
|
|
|
|
+ $payloadEncoded = json_encode($payload, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
|
|
|
|
+ $responseText = is_string($responseBody) ? $responseBody : '';
|
|
|
|
|
+ $entry = "[$ts] $method $url HTTP=$httpCode\n" .
|
|
|
|
|
+ "payload=$payloadEncoded\n" .
|
|
|
|
|
+ "response=$responseText\n" .
|
|
|
|
|
+ "----\n";
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ @file_put_contents($this->logFilePath, $entry, FILE_APPEND | LOCK_EX);
|
|
|
|
|
+ } catch (\Throwable $e) {
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private function logRequest(string $method, string $url, array $payload): void
|
|
private function logRequest(string $method, string $url, array $payload): void
|
|
|
{
|
|
{
|
|
|
$encoded = json_encode($payload, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
|
$encoded = json_encode($payload, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|