Node.JS 上的 WooCommerce WebHook 签名匹配问题

2024-01-02

我正在尝试在我的 Node.js 网站上验证来自 WooCommerce 的 webhook 交易。但是我无法让 2 个字符串匹配。

可以看到php签名是用下面的代码生成的,源码可以看这里WooCommerce 来源 https://github.com/woothemes/woocommerce/blob/master/includes/class-wc-webhook.php#L303-L317.

base64_encode( hash_hmac( $hash_algo, $payload, $this->get_secret(), true ) ));

我注意到如果我关掉true on the hash_hmac,然后我可以让 2 个系统创建匹配,但是我不想编辑 WooCommerce 的核心,所以我想知道这里是否缺少一些东西?

对于我的示例,我确实编辑了核心并强制有效负载如下,这样我就可以轻松尝试并匹配两个系统

payload = '{"id":1,"etc":2,"host":"http:/\/localhost\/view-order\/8"}'
secret = 'welcome'

我在 Node.Js 中的代码如下。

var crypto = require('crypto');    

hmac = crypto.createHmac('sha256', secret);
hmac.setEncoding('binary');
hmac.write(payload);
hmac.end();
hash = hmac.read();

result = base64.encode(hash);

console.log(result);

If I从“host”JSON 中删除 url 然后它就可以工作了,这与它的转义方式有关吗? 我认为这可能是 PHP 和节点执行 SHA256 哈希的方式存在问题。我真的无法弄清楚如何解决这个问题。

任何帮助都会很棒,

Thanks


我遇到了与您类似的问题,使用此处建议的代码:WooCommerce 的 SHA256 Webhook 签名从未经过验证 https://stackoverflow.com/questions/32122736/sha256-webhook-signature-from-woocommerce-never-verifies

var processWebHookSignature = function (secret, body, signature) {
  signatureComputed = crypto.createHmac('SHA256', secret)
  .update(new Buffer(JSON.stringify(body), 'utf8'))
  .digest('base64');

  return ( signatureComputed === signature ) ? true : false;
}

(主体来自 req.body)。

当我改变了获取原始身体的方式时,这才开始对我起作用。我使用 bodyParser 中间件得到它:
app.use(bodyParser.json({verify:function(req,res,buf){req.rawBody=buf}}))
(如以下解释:https://github.com/expressjs/body-parser/issues/83#issuecomment-80784100 https://github.com/expressjs/body-parser/issues/83#issuecomment-80784100)

所以现在而不是使用new Buffer(JSON.stringify(body), 'utf8')我只是用req.rawBody
我希望这也能解决您的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.JS 上的 WooCommerce WebHook 签名匹配问题 的相关文章

  • 我的客户端 socket.io 在哪里?

    我使用 Express 和 React Engine 创建了一个同构 React 应用程序 现在我正在尝试连接socket io 在快速设置中我有 var express require express var app express va
  • 如何隐藏 URL 中的锚标记

    如何隐藏地址栏中以下链接 href 的哈希值 a href index php dev name 所以它会将我重定向到index php dev name 但我希望地址栏只显示index php 您可以使用 Javascript oncli
  • 如何关闭未关闭的 HTML 标签?

    每当我们从数据库或类似来源获取一些经过编辑的用户输入内容时 我们可能会检索仅包含开始标记但不包含结束标记的部分 这可能会妨碍网站当前的布局 有客户端或服务器端的方法来解决这个问题吗 找到了一个很好的答案 使用 PHP 5 并使用 DOMDo
  • CodeIgniter 控制器 - JSON - AJAX

    我正在尝试通过 AJAX 使用 CodeIgniter 发送表单构建 并尝试使用 JSON 获取响应 但是 我只在打开开发人员选项卡时看到响应 我什至不确定这是否实际上是响应 因为它显示了两个 json 数据 它所显示的只是加载旋转器 然后
  • PHP 无法加载动态库“php_pdo_oci.dll”

    我在 Windows 8 上运行 Apache 2 4 7 和 PHP 5 5 9 我安装了 PHPUnit 并开始弹出此警告图像 警告 是的 我在 php ini 中启用了扩展加载以及 extension dir 以更正文件夹 并且该文件
  • 从类似 cronjob 的语法创建“下次运行时间”日期

    在我正在创建的应用程序中 用户可以安排重复任务 生成间隔模式的简单值是 Minute 0 59 90 each minute Hour 0 23 90 each hour Day of month 1 31 90 each day of m
  • PHP - 类外 use 关键字和类内 use 关键字的区别

    伙计们 美好的一天 只是想问一下有什么区别use之外的class and use在 的里面class 我也用谷歌搜索过 但我的问题与答案不匹配 Example namespace App Http Controllers Auth use
  • 如何将udp发送到udp node.js服务器?

    我对此很陌生 所以我真的不知道我在做什么 但我已经设置了一个 node js udp 服务器 我想从客户端 来自网站 向它发送一个数据包 但我不知道如何在 javascript 中做到这一点 或者是否可能 我不是在研究如何从 Node js
  • 在heroku上部署时出错,/bin/sh: 1: webpack: not found

    这是我在 heroku 网站上手动部署时遇到的错误 首先 我在 json 文件中遇到错误 因此我指定了正在运行的 npm yarn 和 node 版本 这些错误似乎已经清除 现在我就是这样的人 并且已经搜索了谷歌 但似乎找不到太多关于修复它
  • 如何在多次尝试后延迟登录尝试 (PHP)

    我正在开发一个用 PHP 构建的相当大的网站 该网站可能会有很多用户 我正在寻找一种方法来保护登录屏幕免受自动尝试的影响 我已经在注册表中添加了验证码检查 但还想进一步强化网站 据我所知 StackOverflow 上也有类似的问题 而且我
  • WordPress 包含 SVG 文件错误

    我使用 PHP 和 WordPress 在本地主机上 我可以毫无问题地包含 SVG 文件 但在实时服务器上 我尝试包含一个 SVG 文件以便能够使用 CSS 对其进行样式设置 我收到此错误消息 Parse error syntax erro
  • 使用 Sequelize 实现单表继承

    有没有办法使用sequelize来创建单表继承 我希望有一个用于购买和 PartialPurchase 模型的 STI 其中我将有一个类型字段 该字段为 Purchase 或 PartialPurchase 以及类 Purchasing 和
  • Node js 使用中间件重定向进行过多重定向

    在我的 Node js 应用程序 我使用的是express 4 x 中 我想检查用户是否已登录 如果用户未登录 我想重定向到我的登录页面 然后我在中间件中这样做 服务器 js app use function req res next if
  • 如何检查请求是否通过 Express 中的 https 发送

    我想强制某些路线始终在我的 Express 应用程序中使用安全连接 我如何检查以确保它使用 https 我在 heroku 上使用搭载 ssl 进行部署 我也在 Heroku 上部署 当他们使用 nginx 进行反向代理时 他们添加了一堆标
  • 未捕获的错误:找不到模块“jquery”

    我在用Electron https github com atom electron制作桌面应用程序 在我的应用程序中 我正在加载一个外部站点 Atom 应用程序之外 可以说http mydummysite index html http
  • WordPress 自定义帖子类型未显示在搜索结果中

    我在 WordPress 中遇到自定义帖子类型 测验 和搜索的问题 自定义帖子类型未显示在我的搜索结果页面中 我的搜索结果中仅显示默认的帖子内容 以下是我使用的代码 函数 php函数create posttype register post
  • 流星内存不足

    我正在使用流星来制作报废引擎 我必须执行一个 HTTP GET 请求 这会向我发送一个 xml 但这个 xml 大于 400 ko 我得到一个异常 内存不足 result Meteor http get http SomeUrl com 致
  • Nodejs mysql 获取正确的时间戳格式

    我在用着mysqljs https github com mysqljs mysql得到结果后sql我变得不同TimeStamp格式如下 created at Sat Jul 16 2016 23 52 54 GMT 0430 IRDT 但
  • PHP递归遍历对象树[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行

随机推荐

  • EditorFor 用于字符串列表

    我希望用户输入 5 个字符串 问题的可能答案 所以我的问题视图模型中有这些元素 private IEnumerable
  • 在鞋子中,如何将堆栈停靠在窗口底部?

    在鞋子中 我如何将堆栈停靠在窗口底部 例如我有以下代码片段 Shoe app do stack height gt 100 do background red end stack height gt 100 do background bl
  • 如何将 Automapper 与 Autofac 结合使用

    我已经升级到最新版本的 AutoMapper 9 0 并将静态配置更改为 public static IMapper RegisterAutoMapper var config new MapperConfiguration cfg gt
  • 如何使用 HTML 和 CSS 作为 Java 应用程序 GUI?

    我想设计具有干净 GUI 的新 Git 客户端 是否可以在 java 应用程序中使用 HTML CSS 和 JavaScript 的强大功能 我想使用 Java JGit 作为模型 Java 作为控制器 HTML CSS JavaScrip
  • 将标准输出流式传输到网页

    这看起来应该是一件非常简单的事情 不幸的是 Web 开发从来都不是我的强项 我有很多脚本 我想从网页启动它们并查看页面上的实时标准输出文本 有些脚本需要很长时间才能运行 因此正常的单一响应不够好 我已经开始工作了 据我所知 我的选择是 st
  • .DrawImage 具有不透明度?

    g DrawImage 是的 在我的图片框中画一个图像 是否可以给它一个不透明属性 我一直在查看 DrawImage 的其他版本 但找不到这样的东西 您必须使用 ColorMatrix 来混合图像 这是我不久前编写的一个 C 控件 它向您展
  • 哪些小部件约束对于 Grails 域类有效?

    你能告诉我有效值的列表吗小部件约束 http grails org doc 2 0 x ref Constraints widget html下面 一些小部件 例如 static constraints someField widget s
  • Visual Studio 增量构建:XML 文档文件创建得太晚

    我有一个 Visual Studio 2005 的 DLL 项目 它打开了 XML 文档文件 每当我进行增量构建时 在构建后事件执行期间 输出目录中没有 XML 文档文件 如果我在构建后事件期间暂停构建 使用来自GnuWin32 CoreU
  • 使用单个 NSMutableArray 填充 UITableView 部分表

    抱歉再次询问带有完整描述的问题 我有 resultsArray 其中包含从服务器获取的标题描述等 但问题是我想分节显示此数据 假设有来自数组的三个部分 那么如何使用单个 resultArray 填充每个部分中的数据 NSString tab
  • isset() 的 PHP 简写? [复制]

    这个问题在这里已经有答案了 如果 PHP 中不存在某个变量 是否有一种快捷方式将其分配给该变量 if isset var var 我想做类似的事情 var var PHP 7 更新 谢谢震惊狂野 https stackoverflow co
  • 可以使用 Firebase RemoteConfig 来存储 API 密钥吗?

    注意 澄清一下 这不是 Firebase API 密钥 这可能更像是一个令牌 客户端应用程序拥有并由服务器端点验证的东西 我们正在努力更好地保护 API 密钥 想想用于验证端点客户端的令牌 这一切都将在我们的内部网络上 但我们仍然希望确保只
  • golang 中的函数与 switch 的表

    我正在用 go 编写一个简单的模拟器 我应该吗 还是应该回到 c 不管怎样 我正在获取指令并对其进行解码 此时我有一个像 0x81 这样的字节 我必须执行正确的函数 我应该有这样的东西吗 func sys cpu eval switch o
  • iOS 的自动布局可以重新排列 UI 小部件吗

    我有一个应用程序 它具有不同的纵向和横向用户界面 我听说过有关自动布局的精彩内容 但在我所有的阅读中 它似乎可以处理简单的情况 其中 UI 小部件可以简单地调整大小和重新定位 在我的 UI 中 UI 小部件移动 在这种情况下 我应该尝试让自
  • 哪里可以下载mysql jdbc jar? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我安装并尝试使用 jasper reports studio 当您尝试为报告创建数据源时遇到的第一堵墙
  • 将下拉值传递给静态方法后面的代码

    我试图在自动完成方法后面的代码中使用语言选择值 我尝试使用隐藏字段 但这不起作用 ajax 也不适合我 这是我的 html 下拉菜单 div class row div
  • ViewContext 未接收来自 newBackgroundContext() 的更新

    堆栈溢出中已经有类似的问题 但它对我不起作用 我的应用程序中有一个用例 我必须观察数据库更改才能执行某些操作 接收我订阅的更新NSManagedObjectContextObjectsDidChange通知 针对 ViewContext 并
  • NestedScrollView 内带有锚点的 Webview

    我有一个 NestedScrollView 里面有一个 WebView WebView 包含一个带有锚点的 HTML 文件 这些文件链接到同一文件但不同的位置 想象一下 菜单 和 内容 容器 当您单击菜单项时 内容 中的相应部分应该出现在屏
  • 在 Visual Studio 代码中运行 asm

    Visual Studio代码 mac 中是否有某种可以运行基本程序集的插件 例如以下内容 section text globl start start movl 1 eax movl 0 ebx int 0x80 事实上 目前我正在 ss
  • PhoneGap 捕获插件导致 Android 崩溃

    当我使用捕获插件时 它总是在拍照后使应用程序崩溃 当我单击 捕捉 按钮时 它会打开相机应用程序 我拍照 然后单击复选标记 然后应用程序关闭并显示 不幸的是 HelloWorld 已停止 然后 如果我查看图库应用程序 照片就在那里 我做错了什
  • Node.JS 上的 WooCommerce WebHook 签名匹配问题

    我正在尝试在我的 Node js 网站上验证来自 WooCommerce 的 webhook 交易 但是我无法让 2 个字符串匹配 可以看到php签名是用下面的代码生成的 源码可以看这里WooCommerce 来源 https github