Procházet zdrojové kódy

add the webhook test pix

gdias před 3 týdny
rodič
revize
5c0699a5ff
2 změnil soubory, kde provedl 60 přidání a 0 odebrání
  1. 59 0
      controllers/WooviWebhookController.php
  2. 1 0
      public/index_webhook.php

+ 59 - 0
controllers/WooviWebhookController.php

@@ -0,0 +1,59 @@
+<?php
+
+namespace Controllers;
+
+use Libs\ResponseLib;
+use Psr\Http\Message\ServerRequestInterface;
+
+class WooviWebhookController
+{
+    public function __invoke(ServerRequestInterface $request)
+    {
+        $rawBody = (string)$request->getBody();
+        if ($rawBody === '') {
+            $rawBody = (string)file_get_contents('php://input');
+        }
+
+        $record = [
+            'received_at' => (new \DateTimeImmutable('now', new \DateTimeZone('UTC')))->format(DATE_ATOM),
+            'headers' => $this->normalizeHeaders($request->getHeaders()),
+            'raw_body' => $rawBody,
+        ];
+
+        $fileName = sprintf(
+            'woovi_webhook_%s_%s.txt',
+            (new \DateTimeImmutable('now'))->format('Ymd_His'),
+            bin2hex(random_bytes(4))
+        );
+
+        $filePath = dirname(__DIR__) . '/bin/' . $fileName;
+
+        try {
+            $encoded = json_encode($record, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
+            if ($encoded === false) {
+                $encoded = $rawBody;
+            }
+            file_put_contents($filePath, $encoded, LOCK_EX);
+        } catch (\Throwable $e) {
+            return ResponseLib::sendFail('Falha ao salvar webhook: ' . $e->getMessage(), [], 'E_INTERNAL')->withStatus(500);
+        }
+
+        return ResponseLib::sendOk([
+            'stored_file' => basename($filePath),
+        ], 'S_WEBHOOK_SAVED');
+    }
+
+    /**
+     * @param array<string, array<int, string>> $headers
+     * @return array<string, string>
+     */
+    private function normalizeHeaders(array $headers): array
+    {
+        $normalized = [];
+        foreach ($headers as $name => $values) {
+            $normalized[$name] = implode(', ', $values);
+        }
+
+        return $normalized;
+    }
+}

+ 1 - 0
public/index_webhook.php

@@ -28,5 +28,6 @@ $GLOBALS['pdo']->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
 $app = new App();
 
 $app->post('/tshield', \Controllers\TshieldWebhookController::class);
+$app->post('/woovi', \Controllers\WooviWebhookController::class);
 
 $app->run();