/WebPush-PHP

PHP Web Push library

Primary LanguagePHPGNU Lesser General Public License v3.0LGPL-3.0

WebPush-PHP

PHP Web Push library. Requires PHP 7.3+

Supports only ES256 and aes128gcm.

Usage

$endpoint = 'https://updates.push.services.mozilla.com/wpush/v2/xxxxxxx';
$auth = Base64Url::decode('AuthKeyFromBrowser');
$receiverPublicKey = Base64Url::decode('PublicKeyFromBrowser');

$serverKey = file_get_contents('ec-privatekey.pem');
$receiverPublicPem = KeyConverter::p256PublicKeyToPem($receiverPublicKey);

$endpointParts = parse_url($endpoint);

$jwt = new WebPushJwt(
    new ES256($serverKey), // Signer
    $endpointParts['scheme'] . '://' . $endpointParts['host'], // Audience
    3600 * 12, // TTL in seconds, should be less than 24 hours
    'https://myurl.com/', // Subject (or: 'mailto:email@example.com')
);

$message = new PushMessage($jwt, $endpoint, $serverKey);

$payload = new Aes128Gcm(
    new OpenSSL(OpenSSL::KEYTYPE_EC, OpenSSL::CURVE_P256), // Key Factory
    $auth, // User auth key
    $receiverPublicPem, // User public key
    'Hello world!' // Data
  );

$response = $message->send($payload);

if ($response->success()) {
    echo 'Push sent!';
} else {
    echo 'Sending a push failed: (' . $response->code . ') ' . $response->message;
}