首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从Shopify Webhook验证HMAC (使用Hapijs)

Shopify Webhook是Shopify平台提供的一种机制,用于在特定事件发生时向外部应用程序发送HTTP请求。这些事件可以是订单创建、产品更新等。为了确保接收到的Webhook请求是来自Shopify平台的有效请求,需要对请求进行验证。

HMAC(Hash-based Message Authentication Code)是一种基于哈希函数的消息认证码,用于验证消息的完整性和真实性。在验证Shopify Webhook的HMAC时,需要使用Hapijs框架进行处理。

下面是验证Shopify Webhook HMAC的步骤:

  1. 获取Shopify Webhook请求中的HMAC和其他相关参数,包括请求头、请求体等。
  2. 使用密钥(由Shopify提供)和请求体计算出一个新的HMAC。
  3. 将计算得到的HMAC与请求中的HMAC进行比较,如果相同,则表示请求是有效的。

以下是使用Hapijs进行验证的示例代码:

代码语言:txt
复制
const Hapi = require('@hapi/hapi');
const crypto = require('crypto');

const server = Hapi.server({
  port: 3000,
  host: 'localhost'
});

server.route({
  method: 'POST',
  path: '/webhook',
  handler: (request, h) => {
    const hmacHeader = request.headers['x-shopify-hmac-sha256'];
    const requestBody = request.payload;

    // 使用密钥和请求体计算HMAC
    const secret = 'your_shopify_webhook_secret';
    const calculatedHmac = crypto
      .createHmac('sha256', secret)
      .update(requestBody, 'utf8')
      .digest('base64');

    // 比较计算得到的HMAC与请求中的HMAC
    if (hmacHeader === calculatedHmac) {
      // HMAC验证通过,处理Webhook请求
      console.log('Valid webhook request');
      return h.response().code(200);
    } else {
      // HMAC验证失败,拒绝请求
      console.log('Invalid webhook request');
      return h.response().code(401);
    }
  }
});

async function startServer() {
  try {
    await server.start();
    console.log('Server running at:', server.info.uri);
  } catch (err) {
    console.log('Error starting server:', err);
  }
}

startServer();

在上述代码中,我们使用x-shopify-hmac-sha256请求头获取到Shopify Webhook请求中的HMAC。然后,使用密钥和请求体计算出一个新的HMAC,并将其与请求中的HMAC进行比较。如果两者相同,则表示请求是有效的。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)、腾讯云对象存储(COS)、腾讯云云函数(SCF)等。你可以通过访问腾讯云官方网站获取更多关于这些产品的详细信息和文档。

请注意,以上答案仅供参考,具体实现方式可能因实际情况而异。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用 GitHub 和 Python

借助 GitHub 的网络钩子webhook,开发者可以创建很多有用的服务。触发一个 Jenkins 实例上的 CI(持续集成) 任务到配置云中的机器,几乎有着无限的可能性。...该签名由一个密码(GITHUB_SECRET),请求体的 HMAC 十六进制摘要,并使用 sha1 哈希生成。 为了验证请求,服务需要在本地计算签名并与请求头中收到的签名做比较。...这可以由 hmac.compare_digest 函数完成。 自定义钩子逻辑 在验证请求后,现在就可以处理了。这篇教程使用 GitPython 模块来与 git 仓库进行交互。...调试打印语句显示了请求体收到的短提交哈希。这个例子展示了如何使用请求体。更多关于请求体的可用数据的信息,请查询 GitHub 文档。 最后该服务返回了一个空的 JSON 字符串和 200 的状态码。...你的 GitHub 仓库的设置中,选择 Webhook 菜单,并且点击“Add Webhook”。

1.7K10

帮助管理Vercel上Webhook的工具

Hookdeck 联合创始人兼首席执行官 Alexandre Bouchard 告诉 The New Stack,该中间件增加了对通过 Webhook 向 Vercel 应用程序发出的异步 HTTP 请求进行身份验证...两个用例是处理来自 Stripe、Shopify 或 Twilio 等 API 提供商的 Webhook,或构建 异步 API。他说,对于自称为事件网关的 Hookdeck 来说,这是一个自然的扩展。...“基本上发生的事情是,中间件将接收来自 Shopify 等的 HTTP 请求,例如 Webhook,”他解释说。...使用中间件,开发者可以管理: 队列; 限制,用于第三方发送的 Webhook 超过系统处理能力的情况; 重试同步 HTTP 请求; 延迟,例如,在客户可以在一定时间内编辑订单的情况下使用; 过滤器,允许根据有效负载中的数据进行筛选...例如,它将允许使用 Shopify 的开发者仅筛选所有产品更新 webhook,以仅筛选库存中没有产品的 webhook,Bouchard 说。

7110
  • PHP实现码云Gitee的WebHook密钥验证算法

    gitee.png 码云的 WebHook 支持两种验证方式,一种是明文密码验证,另外一种是密钥验证 用户通过配置不公开的 WebHook 密钥,在请求时对请求内容签名,服务端在收到请求后以同样的密钥进行签名验证...整个过程 WebHook 密钥只存在于 Gitee 和服务端,不在网络传输中暴露。 那么 PHP 应该如何验证呢?文档只提供了 Java 和 Python2 的示例代码,我大 PHP 不配验证?...文档中说明了对应的参数:需要一个 timestamp 和 secret,这两个参数哪来呢?...== $compute_token) { echo '验证失败'; } 最后,可以直接使用我的 git-deploy 项目 任何个人或团体,未经允许禁止转载本文:《PHP 实现码云 Gitee...的 WebHook 密钥验证算法》,谢谢合作!

    1K00

    GitHub WebHook 使用教程

    使用 WebHook 可以让我们在关注的事件发生时收到通知,而不是不断轮训 API 确认事件是否发生, GitHub 允许我们配置 WebHook ,它允许我们配置某个仓库发生某个事件时,通知指定的外部服务...发挥想象力,GitHub 的 WebHook 结合 GitHub Action 可以做很多事情,文末有具体例子。 这篇文章介绍 GitHub Web Hooks 的使用。...GitHub WebHook 使用 Secret 对 Post Body 内容进行哈希(HMAC 十六进制摘要)计算,得到一个哈希值,如 xxyyzz。 2....Java 验证 WebHook 网上有很多使用 Java 语言验证 GitHub WebHook 消息的代码实现,这里使用第三方依赖进行验证,省去哈希算法的编写。...使用 HTTPS 提高安全性,HTTPS 已经是 Web 服务的标配。 3. 配置白名单或验证策略,确保消息发送方可信,比如文中提到的秘钥哈希验证。 4.

    44810

    使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)

    协议,webhook呢是一个api概念,是微服务api的使用范式之一,也被成为反向api,即前端不主动发送请求,完全由后端推送,有机会会单门写一篇文章阐述webhook     在添加机器人界面里...,填写一些机器人的信息     需要注意的是,在安全设置一栏里,我们选择加签的方式来验证,在此说明一下,钉钉机器人的安全策略有三种,第一种是使用关键字,就是说你推送的消息里必须包含你创建机器人时定义的关键字...,如果不包含就推送不了消息,第二种就是使用加密签名,第三种是定义几个ip源,非这些源的请求会被拒绝,综合来看还是第二种又安全又灵活。    ...= hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() sign = urllib.parse.quote...(base64.b64encode(hmac_code)) # print(timestamp) # print(sign) import requests,json #导入依赖库 headers

    88320

    EDA 使用,捋数字芯片设计实现流程 | 验证

    接着《EDA 使用,捋数字芯片设计实现流程 | 上》捋,实际项目中验证跟综合RTL coding 开始就会交叉进行,反复迭代。...验证在数字芯片设计中占很大比例,近些年在设计复杂度的推动下验证方法学跟验证手段在不断更新,OVM 到UVM, Dynamic verification 到Static verification, ...验证涉及到许多方面,验证工程师一方面要对相关协议算法有足够了解,根据架构、算法工程师设定的目标设计仿真向量;另一方面要对设计本身足够了解,以提高验证效率,缩短验证时间。...验证工程师需要掌握许多技术,需要使用许多工具。 语言:各种脚本语言之外,C/C++, SystemVerilog, Verilog....数字验证领域,依旧是C, S, M 三家几乎全霸,老驴已不做验证多年,对S, M 两家验证相关工具除了VCS, Verdi, Modelsim 其他几乎无知,此处拿C 家验证全套为例。

    2.6K30

    使用joi来验证数据模型

    本文作者:IMWeb zzbozheng 原文出处:IMWeb社区 未经同意,禁止转载 我们用nodejs实现一些功能时,往往需要对用户输入的数据进行验证。...然而,验证是一件麻烦的事情,很有可能你需要验证数据类型,长度,特定规则等等,在前端做表单验证时,我们常用的做法是使用正则,正则表达式也许可以一步到位,但是他只会给你true or false,如果想要知道数据不符合哪些条件时...Joi 是 hapijs 自带的数据校验模块,他已经高度封装常用的校验功能,本文就是介绍如何优雅地使用 joi 对数据进行校验。相信你会喜欢上他。...也可以使用正则: Joi.object({ password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/) }); 在 hapijs使用Joi hapijs...Joi 的更多用法可以参考文档:https://github.com/hapijs/joi/blob/v8.0.5/API.md

    1.2K50

    Python - 抓取 iphone13 pro 线下店供货信息并发送到钉钉机器人,最后设置为定时任务

    ,然后做成定时任务,当有货的时候第一时间通知我 完成步骤 打开官网,找到获取线下门店供应情况的接口 抓包接口,猜测哪个字段影响供货显示情况 改包接口,将该字段改成有货,验证猜测 Python 请求该接口...,取到该字段值 接入钉钉机器人,将广州线下门店的供货情况发送到钉钉上 使用 mac 自带的 crontab 定时任务,创建执行 Python 脚本的定时任务 找接口 https://www.apple.com.cn...找字段 盲猜是这个 storeSelectionEnabled 字段影响的,因为只有它是 False,当然也有猜过是下面的 pickupDisplay,但从命名来看,第一个才是影响是否可选中的字段 验证字段...(base64.b64encode(hmac_code)) def dingmessage(): # 请求的URL,WebHook地址 webhook = f"https://oapi.dingtalk.com...} } message_json = json.dumps(message) info = requests.post(url=webhook

    87050

    钉钉常用的消息类型与数据格式总结

    记录发送钉钉的几种格式消息的使用方式。 目前通过webhook向钉钉发送消息,必须要有安全配置: 自定义关键词:最多可以设置10个关键词,消息中至少包含其中1个关键词才可以发送成功。...下面记录一个使用Python编写的生成加签字符串的脚本: #python 3.8 import time import hmac import hashlib import base64 import...(base64.b64encode(hmac_code)) #webhook机器人设置界面上复制的Webhook地址 webhook_url_base = 'https://oapi.dingtalk.com....format(webhook_url_base,timestamp,sign) print(webhook_url) 准备好加签后的webhook地址后,就可以通过http请求,向钉钉模拟发送消息了...,需要在content中使用@183xxxxxxxx即可 如果想要群里艾特所有人,只需要保留at.isAtAll即可,at.atMobiles则不需配置 如果想要逐个艾特at.atMobiles里面的人

    1.2K80

    把盏言欢,款款而谈,ChatGPT结合钉钉机器人(outgoing回调)打造人工智能群聊单聊场景,基于Python3.10

    注册和使用OpenAi的ChatGPT     首先注册OpenAi平台:https://beta.openai.com/ ,由于ChatGPT过于火爆,导致很多地区无法正常注册,这里推荐使用北美地区的代理...IP,与此同时,一定要注意,如果之后希望使用后端的API接口方式调用ChatGPT,就不要使用谷歌或者微软的三方账号进行登录,否则无法通过邮箱和秘钥交换OpenAi平台的access_token,切记。...同时,接受验证码手机号也必须是北美地区的手机号,这里推荐一个北美地区的接码平台:https://sms.qisms.com/index  非常好用。    ...(hmac_code).decode('utf-8') if sign !...    群聊效果:     这里需要注意的是,单聊是通过接口的方式进行推送,而群内聊天是通过webhook方式进行推送,关于webhook,请移玉步至:使用python3.7配置开发钉钉群自定义机器人

    1.8K40

    分享10个NodeJS相关的专业级工具

    FeathersJS具有活跃的社区支持和庞大的用户群体,开发人员可以社区中获取支持和参与交流,共同推动FeathersJS的发展和改进。 7....HapiJS具有高度可扩展的架构,使开发人员能够根据应用程序的需求进行定制和扩展。这使得HapiJS适用于各种规模的项目,从小型应用到大型企业级应用。 全面的验证和输入处理机制。...HapiJS提供了全面的验证和输入处理机制,帮助开发人员确保数据的完整性和安全性。它提供了各种验证选项和插件,简化了数据验证和处理的过程。 内置的缓存、身份验证和授权支持。...HapiJS内置了缓存、身份验证和授权支持,使开发人员能够轻松添加这些常用功能,提高应用程序的性能和安全性。 支持加密和签名的Cookie、密钥轮换和HTTP安全头。...通过使用HapiJS,开发人员可以构建安全可靠、可扩展的Node.js应用程序。HapiJS提供了丰富的功能和工具,使开发人员能够更高效地构建和管理应用程序,并满足各种需求。

    1.2K20

    解决 GraphQL 的限流难题

    Shopify 今年 6 月份发了一篇《Rate Limiting GraphQL APIs by Calculating Query Complexity》[3]的文章,讲了他们在使用 GraphQL...Shopify 用的是 Relay 兼容的 Connection 概念,也就是说这里的 Connection 也遵循常见的规范,比如可以和 edges,node,cursor 以及 pageInfo 一起混合使用...Mutations:十点 Mutations 指的是那些有 side effect 的请求,即该请求会影响数据库中的数据或索引,甚至可能触发 webhook 和 email 通知。...currentlyAvailable": 997, "restoreRate": 50.0 } } } } 对本文中的 Query Cost 模型进行有效性验证...The calculated query complexity and execution time have a linear correlation 使用了查询复杂度计算规则之后,我们能够让查询的成本和服务端的负载基本线性匹配

    1.3K20

    揭秘JWT:CTF实战到Web开发,使用JWT令牌验证

    揭秘JWT:CTF实战到Web开发,使用JWT令牌验证 介绍 JWT(JSON Web Tokens)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在网络上安全地传输信息。...这种信息可以验证和信任,因为它是数字签名的。JWT可以使用HMAC算法或者是RSA的公私秘钥对进行签名。 「优点」: 「无状态」:服务器不需要保存会话信息,减轻了服务器负担。...这种信息可以验证和信任,因为它是数字签名的。JWT可以使用HMAC算法或者是RSA的公私秘钥对进行签名。 它的主要应用场景: 授权:这是JWT最常见的使用场景。...因为JWT可以被签名,例如,使用公钥/私钥对,你可以确定发送方就是它们所说的那个人。此外,由于签名是使用标头和有效负载计算的,您还可以验证内容是否被篡改。...headers:头部通常包含两部分:令牌的类型(即JWT)和所使用的哈希算法(如HMAC SHA256或RSA)。

    16910

    使用joi来验证数据模型

    我们用nodejs实现一些功能时,往往需要对用户输入的数据进行验证。...然而,验证是一件麻烦的事情,很有可能你需要验证数据类型,长度,特定规则等等,在前端做表单验证时,我们常用的做法是使用正则,正则表达式也许可以一步到位,但是他只会给你true or false,如果想要知道数据不符合哪些条件时...Joi 是 hapijs 自带的数据校验模块,已经高度封装常用的校验功能,本文就是介绍如何优雅地使用 joi 对数据进行校验。相信你会喜欢上他。...也可以使用正则: Joi.object({ password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/) }); 在 hapijs使用Joi hapijs...Joi 的更多用法可以参考文档:https://github.com/hapijs/joi/blob/v8.0.5/API.md

    2.6K00

    使用joi来验证数据模型

    我们用nodejs实现一些功能时,往往需要对用户输入的数据进行验证。...然而,验证是一件麻烦的事情,很有可能你需要验证数据类型,长度,特定规则等等,在前端做表单验证时,我们常用的做法是使用正则,正则表达式也许可以一步到位,但是他只会给你true or false,如果想要知道数据不符合哪些条件时...Joi 是 hapijs 自带的数据校验模块,他已经高度封装常用的校验功能,本文就是介绍如何优雅地使用 joi 对数据进行校验。相信你会喜欢上他。...也可以使用正则: Joi.object({ password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/) }); 在 hapijs使用Joi hapijs...Joi 的更多用法可以参考文档:https://github.com/hapijs/joi/blob/v8.0.5/API.md 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

    1.1K10

    【玩转云函数】打通Github到企微的消息通知

    NodeJs开发服务来连接内部使用的工蜂平台和企微平台,做到自动发送和提醒对应的同事来做代码评审,当评审通过后主动通知发起人来完成合并。...:配置一个随机密钥,可以通过工具生成长度32位,云函数对数据验证时会使用; 选择事件:勾选Let me select individual events.选择Issue comments。...通过云端编辑器来新增/webhook路由,具体实现暂时不做,我们想通过在Github提交一次Issues来验证连通性。...为了保证数据的安全,我们需要在云函数中使用相同的密钥来验证数据的有效性(GitHub文档)。...在开发中遇到了很少使用Hmac256加密耽误的时间最长,原因是秘钥长度不够导致。不知道这一篇的云函数开发有没有讲的明白呢?

    1.2K40

    Lighthouse搭建UptimeKuma监控网站连通与证书状态并接入腾讯SMS通知

    使用Python实现一个WebHook接口,用于发送通知短信。 安装Nginx反代Uptime和WebHook接口,并绑定域名,更加美观。 不使用宝塔等面板程序。...接口对接短信推送 用python写一个接口,用来给uptime做webhook告警推送 import hashlib, hmac, json, time, requests, uvicorn, re from...+ "\n" + hashed_canonical_request) def sign(key, msg): return hmac.new...因为接口使用的是POST,使用浏览器测试是GET请求,所以显示如下内容是正常的,不影响实际使用 uptime的使用与接入短信通知 新建监控项 登录以后,直接点击左上角新建监控项 这里拿腾讯云举例 在高级处可以找到证书通知...除了网站,uptime还能监控许多不同类型的服务 设置通知 找到webhook 填入刚才部署的webhook的url 注意不用点右下角的测试,右下角的测试发送的内容不完整,是无法收到信息的 完成设置

    38021
    领券