PHP - 网页推送通知 - 发送消息签名

时间:2021-04-03 17:54:39

标签: php push-notification

我想弄清楚如何通过使用 PHP 发送消息来通过网络推送通知发送消息。

重要说明:我希望能够在没有任何额外库的情况下做到这一点(如果你有任何好的纯 PHP 教程,我也很感兴趣,我真的很想成为能够自己做到这一点)

我创建了代码客户端,它将订阅数据推送到我的 PHP 服务器,在那里我可以注册订阅中的数据。现在是测试推送通知的时候了,但我被签名卡住了。

我需要构建 JWTInfo 。 JWTData 。签名,到目前为止我有以下代码:

$public_key = "XXX";
$private_key = "YYY";

$aJwtInfo = array('typ' => 'JWT', 'alg' => 'ES256');
$strJwtInfo = base64_encode(json_encode($aJwtInfo));
$aJwtData = array(
    'aud' => 'https://updates.push.services.mozilla.com/',
    'exp' => time() + 43200,
    'sub' => 'mailto:XXX@YYY.com'
);
$strJwtData = base64_encode(json_encode($aJwtData));

在这个阶段,我需要使用公钥/私钥创建签名并推送。我找到了以下代码:

$strData = $strJwtInfo . '.' . $strJwtData;
$pem = self::getP256PEM($this->strPublicKey, $this->strPrivateKey);

if (\openssl_sign($strData, $strSignature, $pem, 'sha256')) {
   if (($sig = self::signatureFromDER($strSignature)) !== false) {
    $strSignature = self::encodeBase64URL($sig);            
    $aHeaders = array( 
           'Authorization' => 'WebPush ' . 
                               $strJwtInfo . '.' . 
                               $strJwtData . '.' . 
                               $strSignature,
           'Crypto-Key'    => 'p256ecdsa=' . 
                               self::encodeBase64URL($this->strPublicKey)
        );
   }

}

来源:https://www.phpclasses.org/blog/package/11632/post/1-How-to-Use-PHP-to-Send-Web-Push-Notifications-for-Your-Web-Site-in-2020.html

但此代码使用库,我想在 PHP 中执行此操作。我无法在我的托管环境中安装库,我希望能够理解我正在使用的代码。

知道如何在 PHP 中实现这一点吗?

谢谢

劳伦特

0 个答案:

没有答案
相关问题