PHP - 设置带有签名验证的 Webhook 接收器

2024-01-07

我需要设置一个 PHP 页面来接收 Webhook - 我过去已经做过很多这样的事情,所以这不是问题,但是我正在为这个项目使用的 API 要求我的 webhook 验证标头中提供的签名。

作为验证请求的一部分,它将发送以下内容:

HEADER:
 "x-xero-signature" : HASH_VALUE
PAYLOAD:
{
   "events": [],
   "lastEventSequence": 0,
   "firstEventSequence": 0,
   "entropy": "S0m3r4N0m3t3xt"
}

我创建了一个 Webhook 密钥(例如“ABC123”),作为此 Webhook 验证请求的一部分,我必须确保使用 HMACSHA256 以及您的 Webhook 密钥和 base64 编码进行哈希处理的有效负载应与标头中的签名匹配。这是一个正确签名的有效负载。如果签名与散列的有效负载不匹配,则它是错误签名的有效负载。

要获得接收意图验证,接收 URL 必须对所有正确签名的有效负载响应状态:200 Ok,对所有错误签名的有效负载响应状态:401 Unauthorized。

我现在有点不知道如何进行此操作 - 此设置的详细信息可以在这里找到:

https://developer.xero.com/documentation/getting-started/webhooks https://developer.xero.com/documentation/getting-started/webhooks


要将发送的数据与标头中的验证哈希进行匹配,您需要执行以下操作:

  1. 获取有效负载:
    $payload = file_get_contents("php://input");
  2. 使用有效负载和您的 Webhook 密钥生成哈希:
    $yourHash = base64_encode(hash_hmac('sha256', $payload, $yourWebhookKey));
  3. 根据标头中提供的哈希值检查您的哈希值:
    if ($yourHash === $_SERVER['x-xero-signature']) {}

您必须检查$_SERVER如果这不能直接工作,则获取正确密钥的数组;一开始可能都是大写的。

Edit:正如OP所指出的,正确的变量是$_SERVER['HTTP_X_XERO_SIGNATURE']

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

PHP - 设置带有签名验证的 Webhook 接收器 的相关文章

随机推荐

  • Android 获取所选单选按钮的值

    我有一个无线电组rg1我想获取所选单选按钮的值 我知道我可以获得id所选单选按钮的使用方法 if rg1 getCheckedRadioButtonId 1 int id rg1 getCheckedRadioButtonId 这给了我 i
  • c# 到 json 无法在视图中正确呈现

    您好 我正在尝试将字符串发送到看起来像 json 的视图 我正在发送地点列表 class Place public string title get set public string description get set public
  • SQLSTATE[HY000][2002] php_network_getaddresses: getaddrinfo 失败: 提供节点名或服务名,或未知

    我的问题 我在 Mac 上使用 MAMP 和 Git 通过 SQL 数据库连接查看和编辑 PHP 文件 然后将其推送到 Web 服务器 我最近添加了一个文件目录 这是带有 SQl 数据库连接的文件
  • poll 系统调用超时

    附加strace显示了很多这样的消息 poll fd 5 events POLLIN fd 6 events POLLIN fd 7 events POLLIN fd 8 events POLLIN fd 9 events POLLIN f
  • AWS - 从公共 API 网关到 VPC 内 lambda 的路由

    Question 从面向公众的AWS网络中的API网关到VPC子网中的Lambda函数 流量经过哪里 推出 Amazon API Gateway 私有终端节点 https aws amazon com blogs compute intro
  • 您的分支比“origin/master”领先 1 次提交

    我对 Git 有点陌生 我希望有人能在我的场景中解释这条消息的确切含义 为了向您提供一些背景信息 这就是我所做的 我已将存储库克隆到本地计算机 创建了一个新分支并进行了一些更改 然后 我将这些更改添加到暂存 跟踪区域 提交更改 然后将所有内
  • 升级到 Xcode 12 后出现问题:ld:为 iOS 模拟器构建,但链接到为 iOS 构建的 dylib,架构 arm64

    我将 Xcode 升级到 Xcode 12 并构建了我的项目 首先 它会出现如下错误 ld 为 iOS 模拟器构建 但链接到为 iOS 构建的 dylib 文件 Users ethanli Documents Aspira RA com4i
  • 为什么 NHibernate 不支持 MySql 上的批处理

    我找到了一个几个地方 http ayende com blog 3830 nh prof new features disabling ignoring alerts人们说它不受支持 但我找不到根本原因是什么 mysql ado net 提
  • Power BI 嵌入 URL - 多个过滤器

    我一直在尝试使用过滤器查询语法来过滤嵌入的 PBI 报告 filter tableName fieldName eq fieldValue 这对我有用 但是 当我应用多个过滤器时 PBI 报告仅根据最后一个 filter 进行过滤 而其他过
  • 表“MyDjango.django_admin_log”不存在

    我无法在 django 应用程序中创建用户和博客 按下保存按钮时 它只是显示错误 表 MyDjango django admin log 不存在 错误消息如下所示 您最近是否启用了管理历史记录 但忘记运行syncdb 据我所知 Django
  • uilabel 尾部截断

    我正在使用 Objective C 开发一个 ios 应用程序 并且我遇到了 uilabel 的问题 我需要一些帮助 基本上我有一个标签 可以更改大小以适应它将显示的文本 但它有一个可能的最大高度 标签本身始终具有固定宽度 我已打开 UIL
  • 如何将视频从 URI 转换为 byte[]

    我已经捕获了视频并获得了该视频的 URI 如何加载该URI指向的内容到byte 结构 看一下 ByteArrayOutputStream http download oracle com javase 6 docs api java io
  • 3.1.4 textAlignment丢失(Android Studio)

    我有新版本的 Android Studio 3 1 4 但我找不到 textAlignment 我已经在 查看所有属性 中进行了搜索 现在就找人在我能找到的地方吧 谢谢回答 以下是我解决该问题的方法 在 Android Studio 3 3
  • JQuery 自动完成自定义显示多列第 2 部分

    我正在尝试获得类似于以下内容的自动完成功能 Here http jqueryui com demos autocomplete custom data在 jquery ui 的自定义示例中 相反 这将使用 ajax 调用而不是硬编码数据 我
  • 如何在核心数据中保存现有的单例表视图数据?

    我的项目中有这样的单例购物车var fromSharedFood SingletonCart sharedFood food 我正在从 MainVC 到 DetailVC gt MyCartVC 获取所有食物数据 我在 MainVC 中有表
  • 将 React 的不可变助手与 Immutable.js 结合使用

    我正在研究助焊剂应用并正在考虑采用不可变 js https github com facebook immutable js来维持状态 我看到 React 提供了自己的帮助器来更新不可变对象 http facebook github io
  • 如何在 Android Studio 中查找 Kotlin 的最新版本

    我打开了一个前段时间创建的 Android Studio 项目 IDE 说 Kotlin 的 gradle 插件支持 Kotlin 版本 1 2 51 或更高版本 我想将其设置为最新版本 但我必须去 Kotlin 网站 在该网站上不容易找到
  • C++ 声明顺序(在多变量声明行中)

    我在我的 C 代码中使用以下内容 int a 0 b a 我想知道这种行为是否可靠且定义良好 名称声明从左到右的顺序 并且我的代码不会与其他带有未申报的名字 error 如果不可靠 我会打破这个说法 int a 0 int b a 谢谢 我
  • 显示电子邮件地址和联系电话的安全方式

    是否有任何提示可以在联系表单网页上显示联系电话号码和电子邮件 我的页面上有一个联系表格 但也希望人们可以选择直接打电话或发送电子邮件 目前它们以纯文本显示 但感觉这是不安全的 并且对爬行网站以获取此类信息的机器人开放 有安全的方法吗 Tha
  • PHP - 设置带有签名验证的 Webhook 接收器

    我需要设置一个 PHP 页面来接收 Webhook 我过去已经做过很多这样的事情 所以这不是问题 但是我正在为这个项目使用的 API 要求我的 webhook 验证标头中提供的签名 作为验证请求的一部分 它将发送以下内容 HEADER x