/
memoryspeak
/
MemoryspeakServer
Обзор
Документация
Войти
/
memoryspeak
/
MemoryspeakServer
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
services/FirebaseService.php
101 строка
3 KB
memoryspeak
refactor utils
13 дек 2025, 18:47
13 дек 2025, 18:47
1b3b841
Код
Авторство
О чём код?
<?php require_once '../config.php'; require_once '../utils/Utils.php'; class FirebaseService { public static function sendNotificationAboutNewNote($fcmToken, $data) { try { $accessToken = self::getAccessToken(); if (!$accessToken) return ['success' => false, 'error' => 'Failed to get access token']; $message = [ 'message' => [ 'token' => Utils::ensureUtf8($fcmToken ?? ""), 'notification' => [ 'title' => Utils::ensureUtf8($data['title'] ?? ""), 'body' => Utils::ensureUtf8($data['body'] ?? "") ], 'data' => [ 'memoryspeak_notification_type' => 'memoryspeak_share_note', 'memoryspeak_notification_shared_token' => Utils::ensureUtf8($data['token'] ?? ""), 'memoryspeak_notification_sender' => Utils::ensureUtf8($data['sender'] ?? "") ] ] ]; LoggerService::write(debug_backtrace(), json_encode($message)); $url = "https://fcm.googleapis.com/v1/projects/".GOOGLE_SERVICES_PROJECT_ID."/messages:send"; $headers = [ 'Authorization: Bearer ' . $accessToken, 'Content-Type: application/json' ]; $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_POST => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode($message), CURLOPT_TIMEOUT => 10 ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return [ 'success' => $httpCode === 200, 'http_code' => $httpCode, 'response' => json_encode($response) ]; } catch(PDOException $e) { LoggerService::write(debug_backtrace(), $e->getMessage()); throw $e; } } private static function getAccessToken() { try { $header = json_encode(['alg' => 'RS256', 'typ' => 'JWT']); $payload = json_encode([ 'iss' => GOOGLE_SERVICES_CLIENT_EMAIL, 'scope' => 'https://www.googleapis.com/auth/firebase.messaging', 'aud' => 'https://oauth2.googleapis.com/token', 'exp' => time() + 3600, 'iat' => time() ]); $base64Header = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($header)); $base64Payload = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($payload)); $signature = ''; openssl_sign("$base64Header.$base64Payload", $signature, GOOGLE_SERVICES_PRIVATE_KEY, 'SHA256'); $base64Signature = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($signature)); $jwt = "$base64Header.$base64Payload.$base64Signature"; $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => 'https://oauth2.googleapis.com/token', CURLOPT_POST => true, CURLOPT_POSTFIELDS => "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=$jwt", CURLOPT_RETURNTRANSFER => true ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); return $data['access_token'] ?? null; } catch(PDOException $e) { LoggerService::write(debug_backtrace(), $e->getMessage()); throw $e; } } } ?>