怎么添加对Shopify 的WebHook 验证
怎么添加对Shopify 的WebHook 验证
背景介绍
Shopify 是一家一站式SaaS 模式的电商服务平台,总部位于加拿大首都渥太华,专注于为跨境电商用户提供海外品牌建立及销售渠道管理。为电商卖家提供搭建网店的技术和模版,管理全渠道的营销、售卖、支付、物流等服务。
代码实现
Koa
如果你是想在Koa 中对接Shopify, 则可以参照下面的做法:
// 这是你从Shopify 上得到的接口校验密钥
const secret = 'xxxx';
const app = new Koa();
async function run() {
// 其他的中间件的使用 / app.use...
app.use(async (ctx, next) => {
const isShopify = ctx.request.path.startsWith('设置在Shopify 上的WebHook url');
if (!isShopify) {
return koaBody({
multipart: true,
formidable: {
maxFileSize: 2000 * 1024 * 1024, // 设置上传文件大小最大限制,默认2M
},
})(ctx, next);
} else {
let str = '';
await new Promise((resolve, reject) => {
try {
ctx.req.on('data', function(data: string) {
str += data;
});
ctx.req.on('end', function(chunk: string) {
resolve(str);
});
} catch (e) {
str = '{}';
reject(e);
}
});
const buf = Buffer.from(str);
const hash = crypto.createHmac('sha256', secret).update(buf).digest('base64');
const isOK = hash === ctx.request.headers['x-shopify-hmac-sha256'];
ctx.request.body = JSON.parse(str);
if (!isOK) {
ctx.status = 403;
ctx.body = 'Forbidden';
return;
}
return await next();
}
})
Nest
如果你是想在Nest 中对接Shopify, 则可以参照下面这篇文章进行前期设置:
我前面写过一篇在NestJS 中添加对Stripe 的WebHook 验证。因为前期的基本流程和步骤是完全一样的,我在这篇中就不再赘述了。前期如何截获Response raw body 相关的内容及怎么写一个Interceptor 在这就不再重复了。参照另外一篇的内容照做就可以了。下面重点讲怎么处理加密内容。
// 这是你从Shopify 上得到的接口校验密钥
const secret = 'xxxx';
// 这是Shopify 响应返回的Buffer 体
const buf = '....'
// 这是从响应头里取出来的单次校验哈希
const hash = request.headers['x-shopify-hmac-sha256'];
const isOK = hash === crypto.createHmac('sha256', secret).update(buf).digest('base64')
// 如果isOK === false 则不对,如果是正常的Shopify 通知则为true.
// crypto 是原生Node 自带的库 import * as crypto from 'crypto'
怎么添加对Shopify 的WebHook 验证的更多相关文章
- 在NestJS 中添加对Stripe 的WebHook 验证
在NestJS 中添加对Stripe 的WebHook 验证 背景介绍 Nest 是一个用于构建高效,可扩展的NodeJS 服务器端应用程序的框架.它使用渐进式JavaScript, 内置并完全支持T ...
- C# mvc中为Controller或Action添加定制特性实现登录验证
在本文开始前,先简单讲两个知识点: 1.每个action执行前都会先执行OnActionExecuting方法: 2.FCL提供了多种方式来检测特性的存在,比如IsDefined.GetCustomA ...
- jQueryeasyUI+Hibernate+struts2实现商城后台管理之添加操作时的unique验证
1. 在admin.js中添加扩展验证的操作checkName var checkUrl = "./hytc/AdminAction_check.action";
- 关于boostrapValidator动态添加字段(addField)验证的bug
每次码博客,都觉得自己怀才不遇,哎~脑袋有瑕疵,文笔拿不粗手,就直接上干货吧. 在使用boostrapValidator这个验证插件的时候,如果某一个字段是动态添加来的,我们需要调用方法:addFie ...
- asp.net Core 2.0 MVC为Controller或Action添加定制特性实现登录验证
前言:最近在倒腾 微软的新平台 asp.net Core 2.0,在这个过程中有些东西还是存在差异.下面是我在学习过程的一点笔记.有不妥之处,望各位大虾指正! 一.先创建一个控制器继承于Control ...
- Adding Validation to our Album Forms 添加类属性的一些验证特性
Adding Validation to our Album Forms We’ll use the following Data Annotation attributes: Required – ...
- ASP.NET MVC 5 学习教程:添加验证
原文 ASP.NET MVC 5 学习教程:添加验证 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控 ...
- 【译】ASP.NET MVC 5 教程 - 10:添加验证
原文:[译]ASP.NET MVC 5 教程 - 10:添加验证 在本节中,我们将为Movie模型添加验证逻辑,并确认验证规则在用户试图使用程序创建和编辑电影时有效. DRY 原则 ASP.NET M ...
- 将最小的OWIN身份验证添加到现有的ASP.NET MVC应用程序
https://weblog.west-wind.com/posts/2015/Apr/29/Adding-minimal-OWIN-Identity-Authentication-to-an-Exi ...
随机推荐
- Kettle通过Http post请求webservice接口以及结果解析处理
kettle中有两种方式请求webservice服务,一个是Web服务查询,但是这个有缺陷,无法处理复杂的需求,遇到这种情况就需要用Http post来处理了. 网上也有很多关于Http post请求 ...
- 剑指 Offer 07. 重建二叉树
链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/ 标签:树.递归 题目 输入某二叉树的前序遍历和中序遍历的结果,请重建该二 ...
- .NET平台系列26:在 Windows 上安装 .NET Core/.NET5/.NET6
系列目录 [已更新最新开发文章,点击查看详细] 本文介绍如何在 Windows 上安装 .NET. .NET 由运行时和 SDK 组成. 运行时用于运行 .NET 应用,应用可能包含也可能不包 ...
- pytest命令行参数
1.-v:可以输出用例更加详细的执行信息,如下图 C:\Users\cale\checkapi\test_cc>pytest test_m1.py -v ==================== ...
- Spring Boot WebFlux-01——WebFlux 快速入门实践
第01课:WebFlux 快速入门实践 Spring Boot 2.0 spring.io 官网有句醒目的话是: BUILD ANYTHING WITH SPRING BOOT Spring Boot ...
- 题解 P5318 【【深基18.例3】查找文献】
题目传送门 根据本蒟蒻细致粗略的分析 这明显是一道水题模(du)板(liu)题 可我竟然没有一遍AC; 为更好地食用本题解需要了解以下内容 1.dfs(大法师深搜) 2.bfs(冰法师广搜)/dij最 ...
- HTTP首部字段详解
HTTP首部字段详解 在HTTP/1.1规范中定义了47种首部字段,总共分为四大类: 通用首部字段 -- 请求报文和响应报文两方都会使用的首部 请求首部字段 -- 从客户端向服务器端发送请求报文时使用 ...
- C程序从编译到运行
第一篇文章 一.前言 最近在看CSAPP(深入理解计算机系统)然后以前也学过C语言,但是从来没有深究写好的C代码是怎么编译再到执行的. 所以现在自己学习,然后记录下来. 以最常用的hello worl ...
- ES7扩展
前一段时间小编一直在更新javascript es6版本的部分新语法和新特性,鉴于现在js一直在更新,接下来小编将和大家一起进步,一块探究js的新特性.今天小编就和大家一起来看看es7更新的语法和新特 ...
- VisualCom软件仿真平台V1.0发布(附安装包下载链接)
自我们借助VisualCom(暂定名称,后续可能会变更)软件平台撰写技术文章以来,有不少粉丝发私信询问该软件哪里来的,以及哪里有安装包,这里回复一下:VisualCom软件平台是由本微信公众号组织开发 ...