我想弄清楚如何通过使用 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)
);
}
}
但此代码使用库,我想在 PHP 中执行此操作。我无法在我的托管环境中安装库,我希望能够理解我正在使用的代码。
知道如何在 PHP 中实现这一点吗?
谢谢
劳伦特