如何在NestJS中添加对Shopify的WebHook验证详解
作者:阿兵
这篇文章主要为大家介绍了如何在NestJS中添加对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'
以上就是如何在NestJS中添加对Shopify的WebHook验证详解的详细内容,更多关于NestJS添加Shopify WebHook的资料请关注脚本之家其它相关文章!