Я использовал библиотеку push-уведомлений для отправки push-уведомлений https://github.com/web-push-libs/web-push-php
При попытке отправить push-уведомление возникла внутренняя ошибка
Я проверял обе версии PHP: 7.1.22,7.2.9-1
Выдает журнал ошибок Apache:
[: error] [client :: 1: 33302] Ошибка синтаксического анализа PHP: синтаксическая ошибка, неожиданное '?', Ожидаемоепеременная (T_VARIABLE) в /PWA/web-push-php-example/vendor/minishlink/web-push/src/Subscription.php в строке 41, реферер: http://localhost/PWA/web-push-php-example/src/
И я такжепопытался в Ngnix / журнал ошибок:
17: 22: 36 [ошибка] 20232 # 20232: * 46 FastCGI отправил в stderr: «Сообщение PHP: Примечание PHP: Неопределенный индекс: конечная точка в / var /www / html / PWA / web-push-php-example / vendor / minishlink / web-push / src / Subscription.php в строке 69 PHP-сообщение: PHP Неустранимая ошибка: Uncaught TypeError: Аргумент 1 передан Minishlink \ WebPush \ Subscription:: __ construct () должен иметь строку типа с указанным нулевым значением, которая вызывается из / var / www / html / PWA / web-push-php-example / vendor / minishlink / web-push / src / Subscription.php в строке 72 и определяется в /var/www/html/PWA/web-push-php-example/vendor/minishlink/web-push/src/Subscription.php:39 трассировка стека: добавляется в / var/www/html/PWA/web-push-php-example/vendor/minishlink/web-push/src/Subscription.php в строке 39 "при чтении заголовка ответа из апстрима, клиент: 127.0.0.1, сервер: local.pwa.com, запрос: "POST /PWA/web-push-php-example/src/send_push_notification.php HTTP / 2.0", upstream: "fastcgi: // unix: /run/php/php7.2-fpm.sock:", хост:" localhost ", реферер:" https://localhost/PWA/web-push-php-example/src/"
PHP код:
<?php
require __DIR__ . '/../vendor/autoload.php';
use Minishlink\WebPush\WebPush;
use Minishlink\WebPush\Subscription;
// here I'll get the subscription endpoint in the POST parameters
// but in reality, you'll get this information in your database
// because you already stored it (cf. push_subscription.php)
$sub =json_decode(file_get_contents('php://input'), true);
$sub_endpoint =$sub['endpoint'];
$sub_publicKey =$sub['publicKey'];
$sub_authToken =$sub['authToken'];
$sub_contentEncoding =$sub['contentEncoding'];
$notifications = [
[
'subscription' => Subscription::create([
'endPoint' => $sub_endpoint,
'publicKey' => $sub_publicKey,
'authToken' => $sub_authToken,
'contentEncoding' => $sub_contentEncoding, // one of PushManager.supportedContentEncodings
]),
'payload' => '{msg:"test"}',
],
];
$auth = array(
'VAPID' => array(
'subject' => 'mailto:me@website.com', // can be a mailto: or your website address
'publicKey' => 'BCmti7ScwxxVAlB7WAyxoOXtV7J8vVCXwEDIFXjKvD-ma-yJx_eHJLdADyyzzTKRGb395bSAtxlh4wuDycO3Ih4', // (recommended) uncompressed public key P-256 encoded in Base64-URL
'privateKey' => 'HJ*******************' // (recommended) in fact the secret multiplier of the private key encoded in Base64-URL
//'pemFile' => './keys/private_key.pem' // if you have a PEM file and can link to it on your filesystem
),
);
$defaultOptions = array(
'TTL' => 300, // defaults to 4 weeks
'urgency' => 'normal', // protocol defaults to "normal"
'topic' => 'push', // not defined by default - collapse_key
);
$webPush = new WebPush($auth, $defaultOptions);
// send multiple notifications with payload
$webPush->flush();
// send one notification and flush directly
$webPush->sendNotification(
$notifications[0]['subscription'],
$notifications[0]['payload'], // optional (defaults null)
true // optional (defaults false)
);