怎么添加对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 ...
随机推荐
- 从C到C++过渡的3个原因
从C到C++过渡的3个原因 3 reasons to transition from C to C++ 几十年来,嵌入式软件工程师们一直在争论他们是否应该使用C或C++.根据2019年嵌入式市场调查, ...
- Contos8 安装 MariaDb 时报错:Could not open mysql.plugin table: table mysql.plugin
导语: 因个人服务器误删了一些文件导致MariaDB崩溃,一直在报错,所以想着重装一下,没想到在重装后启动时再次报错(与之前报错不同),这次的报错原因大致是因为某些插件表找不到. 因此又开启了漫长的寻 ...
- MapReduce —— MapTask阶段源码分析(Input环节)
不得不说阅读源码的过程,极其痛苦 .Dream Car 镇楼 ~ ! 虽说整个MapReduce过程也就只有Map阶段和Reduce阶段,但是仔细想想,在Map阶段要做哪些事情?这一阶段具体应该包含数 ...
- 《精通 ASP.NET Core MVC (第七版)》开始发售
学习 Web 开发技术很难吗?没有适合的学习资料,确实很枯燥,很难.如果有一本如同良师益友的优秀图书辅助,就很轻松,一点也不难! 对于优秀的技术图书来说,必须从读者的角度来编写,而不是从作者的角度来编 ...
- Web打印插件实现思路(C#/Winform)
最近,客户有个需求过来,Web端无预览打印,美其名曰:快捷打印. 当时第一反应就是找插件,拿来主义永远不过时.找了一圈发现,免费的有限制,没限制的需要收费(LODOP真的好用).说来就是一个简单的无预 ...
- 一、安装Tomcat服务器
[root@ web1 ~]# yum -y install java-1.8.0-openjdk #安装jdk [root@web1 ~]# yum -y install java-1.8.0- ...
- Vue3中toRefs的使用
1 使用reactive 实现数据的响应式 <template> <div> <h2>toRef的使用</h2> <p> 姓名:{{stat ...
- UF_DRAW 制图操作
Open C uc6476uc6477uc6478uc6479uc6480uc6481uc6482uc6483uc6484uc6485uc6486uc6488uc6489uc6492uc6494uc6 ...
- 07:JS(03)
BOM与DOM操作 # 截至目前为止 我们虽然已经学会了js语法 但是你会发现跟浏览器和html文件还是一点关系没有 """ BOM 浏览器对象模型 Browser Ob ...
- 面试官:MySQL的可重复读级别能解决幻读问题吗?
引言 之前在深入了解数据库理论的时候,了解到事务的不同隔离级别可能存在的问题.为了更好的理解所以在MySQL数据库中测试复现这些问题.关于脏读和不可重复读在相应的隔离级别下都很容易的复现了. 但是对于 ...