Не получается связать JS и библиотку php-fcm-v1-master для отправи ПУШ из JS через PHp скрипт

Имеется установленная библиотека из GitHub: php-fcm-v1-master. Она отправляет FCM push, проверил на сайте работает, когда явно в php скрипте задаешь значение fcm , title, body. Но я хочу отправлять пуш из JS кода, соответственно передавая каждый раз новые данные методом POST в php файл. ВОт php файл из библиотеки php-fcm-v1-master с моими доработками: (чтобы принимал методом пост, я в комментариях указал что я добавил): На данный момент ошибки нет при выполнении php скрипта. Но он до конца не выполняется, стопорится судя по логу который скрипт должен сам вести вовремя выполнения себя.

    <?php
    // Устанавливаем Content-Type для JSON и кодировку UTF-8
    header('Content-Type: application/json; charset=utf-8');
    //require_once __DIR__ . '/vendor/autoload.php';
    // Путь, который будет использован при глобальной установке пакета
    $autoloadPath1 = __DIR__ . '/../../../autoload.php';
    // Путь для локальной работы с проектом
    $autoloadPath2 = __DIR__ . '/../vendor/autoload.php';
    if (file_exists($autoloadPath1)) {
        require_once $autoloadPath1;
        echo "<br />1111111".$error_log;
    } else {
        require_once $autoloadPath2;
        echo "<br />маааа".$error_log;
    }
    echo "<br />тест".$error_log;
    use phpFCMv1\Client;
    use phpFCMv1\Notification;
    use phpFCMv1\Recipient;
    $logFile = '/home/c3116/spektr-ekb.ru/www/log.txt'; // Укажите путь к вашему файлу логов
    // Функция для логирования
    function logMessage($message, $logFile) {
      $logMessage = date("Y-m-d H:i:s") . ": " . $message . "\\n";
      file_put_contents($logFile, $logMessage, FILE_APPEND);
    }
    
    $client = new Client('service_account.json');
    $recipient = new Recipient();
    $notification = new Notification();
    
    $input = json_decode(file_get_contents('php://input'), true);
    
    // Проверяем, успешно ли раскодирован JSON
    if ($input === null && json_last_error() !== JSON_ERROR_NONE) {
        logMessage("JSON decoding error: " . json_last_error_msg(), $logFile);
        echo "JSON decoding error: " . json_last_error_msg();
        exit; // Выходим, если произошла ошибка декодирования
    }
    
    // Проверяем и логируем наличие данных
    if (empty($input)) {
      logMessage("No data received from JS script.", $logFile);
      echo "No data received from JS script.";
      exit; // Выходим, если нет данных
    }
    
    $deviceToken = isset($input['device_token']) ? $input['device_token'] : null;
    $notificationTitle = isset($input['notification_title']) ? $input['notification_title'] : null;
    $notificationBody = isset($input['notification_body']) ? $input['notification_body'] : null;
    
    
    // Логируем полученные данные
    logMessage("device_token: " . $deviceToken, $logFile);
    logMessage("notification_title: " . $notificationTitle, $logFile);
    logMessage("notification_body: " . $notificationBody, $logFile);
    
    // Проверяем, не пустые ли переменные
    if (empty($deviceToken)) {
      logMessage("device_token is empty", $logFile);
      echo "device_token is empty";
      exit; // Выходим, если токен пустой
    }
    
    if (empty($notificationTitle)) {
      logMessage("notification_title is empty", $logFile);
      echo "notification_title is empty";
      exit; // Выходим, если заголовок пустой
    }
    
    if (empty($notificationBody)) {
      logMessage("notification_body is empty", $logFile);
      echo "notification_body is empty";
      exit; // Выходим, если тело сообщения пустое
    }
    
    // Далее используйте переменные в основном коде
    $recipient->setSingleRecipient($deviceToken);
    $notification->setNotification($notificationTitle, $notificationBody);
    
    //БЫЛО УЖЕ ДО МЕНЯ
    // это я закомментил $recipient -> setSingleRecipient('DEVICE_TOKEN');
     // $notification -> setNotification('NOTIFICATION_TITLE', 'NOTIFICATION_BODY');
      $config -> setPriority(Config::PRIORITY_HIGH);
      $client -> build($recipient, $notification, null, $config);
      $result = $client -> fire();

А вот код Java Script: из которого я пытаюсь отправить данные:

 let  token2 = "f33bvCEjQt2TIj_rIAuQ5D:APA91bE0I99dcYnz_6NsyglJCgzlaSwljDpxtVpE5zOYWEI8X7CjYAYpIfYC_S4-NGmVMQz_VZQLadws-CSEGn7s2gD0RNhwro_HOlwn5h2Q_NjFUMqyh9I";
                //console.log("======================================Token2 для пользователя", userAdmin, ":", token2);
           

     //===========ОТПРАВЛЯЕМ ПУШ АДМИНКУ САЙТА============================================================================
                const data2 = {
                    device_token: token2,
                    notification_title: 'YOUрпр_TITLE',
                    notification_body: 'YOUR_NOпрпрATION_BODY'
                };

                fetch('https://spektr-ekb.ru/test.php', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify(data2)
                })
                    .then(response => {
                        console.log(response); // Логирование ответа сервера
                        return response.json();
                    })
                    .then(data2 => console.log(data2))
                    .catch(error => console.error('Error:', error));
             //   console.log(response.json());
ПРи добавлении этого участка кода в JS файл получает вот такая ошибка:
Error: SyntaxError: Unexpected token < in JSON at position 0
    at JSON.parse (<anonymous>)
    at parseJSONFromBytes (node:internal/deps/undici/undici:6498:19)

А ответ вот такой :

    
    
        Response {
          [Symbol(realm)]: null,
          [Symbol(state)]: {
            aborted: false,
            rangeRequested: false,
            timingAllowPassed: true,
            requestIncludesCredentials: true,
            type: 'default',
            status: 200,
            timingInfo: {
              startTime: 5341.933899998665,
              redirectStartTime: 0,
              redirectEndTime: 0,
              postRedirectStartTime: 5341.933899998665,
              finalServiceWorkerStartTime: 0,
              finalNetworkResponseStartTime: 0,
              finalNetworkRequestStartTime: 0,
              endTime: 0,
              encodedBodySize: 39,
              decodedBodySize: 0,
              finalConnectionTimingInfo: null
            },
            cacheState: '',
            statusText: 'OK',
            headersList: HeadersList {
              cookies: null,
              [Symbol(headers map)]: [Map],
              [Symbol(headers map sorted)]: null
            },
            urlList: [ [URL] ],
            body: { stream: undefined }
          },
          [Symbol(headers)]: HeadersList {
            cookies: null,
            [Symbol(headers map)]: Map(8) {
              'server' => [Object],
              'date' => [Object],
              'content-type' => [Object],
              'transfer-encoding' => [Object],
              'connection' => [Object],
              'vary' => [Object],
              'x-powered-by' => [Object],
              'content-encoding' => [Object]
            },
            [Symbol(headers map sorted)]: null
          }
        }

в PHP в логе вот только это отображено: (А дальеш скрипт не выполняется):

    2025-02-18 18:36:03: device_token: f33bvCEjQt2TIj_rIAuQ5D:APA91bE0I99dcYnz_6NsyglJCgzlaSwljDpxtVpE5zOYWEI8X7CjYAYpIfYC_S4-NGmVMQz_VZQLadws-CSEGn7s2gD0RNhwro_HOlwn5h2Q_NjFUMqyh9I\n2025-02-18 18:36:03: notification_title: YOUR_TITLE\n2025-02-18 18:36:03: notification_body: YOUR_NOTIFICATION_BODY\n

Можете подсказать почему ловится такая ошибка?


Ответы (0 шт):