微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 Node.js 到 PHP 的 Webhook 真实性

如何解决从 Node.js 到 PHP 的 Webhook 真实性

我需要帮助将此 Node.js 代码翻译成 PHP。它主要用于验证我的标头上的签名是否与使用 base64HMAC-SHA256 编码的签名相同。

const crypto = require('crypto');
const timestamp = "1570350275357";
const msg = {'key1':'world','key2':'world'};
const secretKey = "mysecretsecret";

const decodedKey = Buffer.from(secretKey,'base64').toString('utf8');
const signature = crypto.createHmac('SHA256',decodedKey).update(timestamp + '.' + msg).digest('base64');

const signatureHeader = "+DCfT1wIMUiaZnlZB4u59/d5wkXKA89lv67Ov66vnyc=";

assert(signature === signatureHeader);

所以我的请求正文是 {'key1':'world','key2':'world'} ,时间戳 (x-duda-signature-timestamp 标头)是 1570350275357一个密钥 mysecretsecret

它还为我的签名 base64(hmac-sha256(secret-key,timestamp + "." + message)) 计算结果 +DCfT1wIMUiaZnlZB4u59/d5wkXKA89lv67Ov66vnyc= ,这也是要在请求的此 x-duda-signature header 上找到的值。

我已经尝试将这些部分放在 PHP 上,但它不会返回与我的签名标头 +DCfT1wIMUiaZnlZB4u59/d5wkXKA89lv67Ov66vnyc= 类似的签名。

$getHeaders = apache_request_headers();

$timestamp = "1570350275357";

$signatureHeader = "+DCfT1wIMUiaZnlZB4u59/d5wkXKA89lv67Ov66vnyc=";

$secretKey = "mysecretsecret";

//Request Body
$message = '{'key1':'world','key2':'world'}';

$signature = base64_encode(hash_hmac('sha256',$timestamp.".".$message,$secretKey));

print_r($signature); // the value should be equal to ```$signatureHeader```

知道我哪里出错了吗?提前致谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。