- ВКонтакте
- РћРТвЂВВВВВВВВнокласснРСвЂВВВВВВВВРєРСвЂВВВВВВВВ
- РњРѕР№ Р В Р’В Р РЋРЎв„ўР В Р’В Р РЋРІР‚ВВВВВВВВРЎР‚
- Viber
- Skype
- Telegram
Не получается связать 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
Можете подсказать почему ловится такая ошибка?