Михаил Базаров Разработка на 1С-Битрикс Михаил Базаров

Получение токена доступа API Firebase (HTTP v1) с помощью PHP для отправки push-уведомлений.

Внимание! Все сообщения на форуме проходят модерацию. Ваше сообщение появится после проверки.
Получение токена доступа API Firebase (HTTP v1) с помощью PHP для отправки push-уведомлений.

До июня 2024 года API Firebase использовал постоянный токен доступа, который можно
было получить один раз в консоли. Однако с теперь необходимо
запрашивать новый токен каждый час. Такой подход повышает безопасность и защищает
от возможной компрометации ключей.
Полный пример страницы Битрикс модуля с получением строки из настроек модуля (из БД):

Код
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_admin_before.php');
$APPLICATION->SetTitle(("Отправка push уведомлений"));
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");

if (!$USER->IsAdmin())
{
    return;
}

use Bitrix\Main\Loader;
use Bitrix\Main\Config\Option;

Loader::includeModule('mibazarow.pushsender');
use mibazarow\pushsender\GetFirebaseToken;

// Получить JSON-строку из настроек модуля
$jsonString = Option::get('mibazarow.pushsender', 'firebase_json');

// Из настроек модуля
$firebase = new GetFirebaseToken($jsonString);

// Получить токен
$token = $firebase->getAccessToken();

print_r($token);

require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/epilog_admin.php');
Пример отправки массового push уведомления
Код
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php');
$APPLICATION->SetTitle(("Модуль mibazarow_pushsender_main"));
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php");

use Bitrix\Main\Loader;
use Bitrix\Main\Config\Option;

Loader::includeModule('mibazarow.pushsender');

if (
    (!empty($_POST['PU_NAME'])) and
    (!empty($_POST['PU_MESS'])) and
    (!empty(bitrix_sessid_post()))
) {
    $jsonString = Option::get('mibazarow.pushsender', 'firibase_json');
    $token = \mibazarow\pushsender\FirebaseToken::getAccessToken($jsonString);

    // URL для отправки уведомлений
    $url = 'https://fcm.googleapis.com/v1/projects/ID ВАШЕГО ПРИЛОЖЕНИЯ/messages:send';

    $message = [
        "message" => [
            'topic' => 'main_topik',
            "notification" => [
                'title' => $_POST['PU_NAME'],
                'body' => $_POST['PU_MESS'],
            ]
        ]
    ];

    // Заголовки запроса
    $headers = [
        'Authorization: Bearer ' . $token, // Токен доступа
        'Content-Type: application/json'
    ];

    // Инициализация cURL
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($message));

    // Execute curl session
    $result = curl_exec($ch);
    if ($result === FALSE) {
        echo 'Ошибка: ' . curl_error($ch);
    }
//    echo '<pre>';
//    print_r($result);
//    echo '</pre>';
    curl_close($ch);
    echo 'Отправлено';

    // Закрытие cURL
    curl_close($ch);
}
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Загрузить файлы
 

Блог-note Заметки по 1С-Битрикс