【问题标题】:Validating whatsapp webhooks Payloads in laravel在 laravel 中验证 whatsapp webhooks 有效负载
【发布时间】:2022-08-15 15:34:25
【问题描述】:

我正在尝试使用 .Facebook developer docs 中的步骤验证来自 whatsapp webhook 的 webhook 有效负载的内容,

我不明白这是什么意思

请注意,我们使用有效负载的转义 unicode 版本生成签名,带有小写十六进制数字。如果您只是针对解码的字节进行计算,您最终会得到不同的签名。例如,字符串 äöå 应转义为 \\u00e4\\u00f6\\u00e5。

这就是为什么我在比较哈希值时总是得到错误而我想在 php/laravel 中制作它。

有时我尝试使用

            $knownSignature = (new UnicodeString($request->getContent()))->normalize(UnicodeString::NFKC);

$knownSignature = Str::ascii($request->getContent());

但还是不匹配。 当我尝试转换 äöå 它仍然输出 \\u00e4\\u00f6\\u00e5 的事件

这是 SymfoniLaravel 用于转义 unicode 字符串的文档

  • 为什么叫这个$knownSignature,请求内容不是签名,它只是签名的输入数据计算.你应该使用你收到的实际的原始数据——而不是试图使用任何规范化或 ascii 方法来操作它。
  • 1. 使用有效负载和您的应用的 App Secret 生成 SHA256 签名。 2. 将您的签名与 X-Hub-Signature-256 标头中的签名(sha256= 之后的所有内容)进行比较。如果签名匹配,则有效负载是真实的。那是文档中所写的内容,因此请使用有效负载对其进行哈希处理,并将其与标头中的签名进行比较
  • @turivishal 它没有给出验证有效载荷的示例
  • @CBroe Function 那是我的功能,请纠正我

标签: php laravel webhooks whatsapi


【解决方案1】:

实际上我不知道我以前的功能有什么问题,但是当我像这样重新制作它时它的工作

protected function validatePayloads(string $waSignature,string $payloads){
    $receivedSignature = explode('=', $waSignature)[1];

    $generatedSignature = hash_hmac(
        'sha256',
        $payloads,
        config('app.verify_token')
    );

    if($receivedSignature !== $generatedSignature){
        return true;
    }else{
        return false;
    }
}

【讨论】:

    猜你喜欢
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多