欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何在NestJS中添加對(duì)Shopify的WebHook驗(yàn)證詳解

 更新時(shí)間:2023年08月08日 10:26:17   作者:阿兵  
這篇文章主要為大家介紹了如何在NestJS中添加對(duì)Shopify的WebHook驗(yàn)證詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

背景介紹

Shopify 是一家一站式SaaS 模式的電商服務(wù)平臺(tái),總部位于加拿大首都渥太華,專注于為跨境電商用戶提供海外品牌建立及銷售渠道管理。

為電商賣家提供搭建網(wǎng)店的技術(shù)和模版,管理全渠道的營銷、售賣、支付、物流等服務(wù)。

代碼實(shí)現(xiàn)

Koa

如果你是想在Koa 中對(duì)接Shopify, 則可以參照下面的做法:

// 這是你從Shopify 上得到的接口校驗(yàn)密鑰
const secret = 'xxxx';
const app = new Koa();
async function run() {
  // 其他的中間件的使用 / app.use...
  app.use(async (ctx, next) => {
    const isShopify = ctx.request.path.startsWith('設(shè)置在Shopify 上的WebHook url');
    if (!isShopify) {
      return koaBody({
        multipart: true,
        formidable: {
          maxFileSize: 2000 * 1024 * 1024, // 設(shè)置上傳文件大小最大限制,默認(rèn)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 中對(duì)接Shopify, 則可以參照下面這篇文章進(jìn)行前期設(shè)置:

我前面寫過一篇在NestJS 中添加對(duì)Stripe 的WebHook 驗(yàn)證。因?yàn)榍捌诘幕玖鞒毯筒襟E是完全一樣的,我在這篇中就不再贅述了。前期如何截獲Response raw body 相關(guān)的內(nèi)容及怎么寫一個(gè)Interceptor 在這就不再重復(fù)了。參照另外一篇的內(nèi)容照做就可以了。下面重點(diǎn)講怎么處理加密內(nèi)容。

// 這是你從Shopify 上得到的接口校驗(yàn)密鑰
const secret = 'xxxx';
// 這是Shopify 響應(yīng)返回的Buffer 體
const buf = '....'
// 這是從響應(yīng)頭里取出來的單次校驗(yàn)哈希
const hash = request.headers['x-shopify-hmac-sha256'];
const isOK = hash === crypto.createHmac('sha256', secret).update(buf).digest('base64')
// 如果isOK === false 則不對(duì),如果是正常的Shopify 通知?jiǎng)t為true.
// crypto 是原生Node 自帶的庫 import * as crypto from 'crypto'

以上就是如何在NestJS中添加對(duì)Shopify的WebHook驗(yàn)證詳解的詳細(xì)內(nèi)容,更多關(guān)于NestJS添加Shopify WebHook的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • nodejs讀取本地mp3和mp4等媒體文件并播放的案例

    nodejs讀取本地mp3和mp4等媒體文件并播放的案例

    fs模塊是nodejs官方提供用來操作文件的模塊,下面這篇文章主要給大家介紹了關(guān)于nodejs讀取本地mp3和mp4等媒體文件并播放的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Docker平臺(tái)下NodeJs?Puppeteer實(shí)現(xiàn)html轉(zhuǎn)pdf過程示例

    Docker平臺(tái)下NodeJs?Puppeteer實(shí)現(xiàn)html轉(zhuǎn)pdf過程示例

    這篇文章主要為大家介紹了Docker平臺(tái)下NodeJs?Puppeteer實(shí)現(xiàn)html轉(zhuǎn)pdf過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 通過NodeJS輕松使用GRPC和協(xié)議緩沖區(qū)的方法

    通過NodeJS輕松使用GRPC和協(xié)議緩沖區(qū)的方法

    本文介紹了GRPC和協(xié)議緩沖區(qū)的基本概念,并展示了如何在NodeJS應(yīng)用程序中使用它們,GRPC是一個(gè)高性能RPC框架,協(xié)議緩沖區(qū)則用于定義服務(wù)和序列化消息,本文給大家介紹如何在NodeJS應(yīng)用程序中使用GRPC和協(xié)議緩沖區(qū),感興趣的朋友一起看看吧
    2024-10-10
  • nodejs 實(shí)現(xiàn)釘釘ISV接入的加密解密方法

    nodejs 實(shí)現(xiàn)釘釘ISV接入的加密解密方法

    這篇文章主要介紹了nodejs 實(shí)現(xiàn)釘釘ISV接入的加密解密方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧,需要的朋友可以參考下
    2017-01-01
  • Node.js中操作MongoDB的CRUD操作指南

    Node.js中操作MongoDB的CRUD操作指南

    在Node.js中操作MongoDB常見的庫有mongodb原生驅(qū)動(dòng)和mongoose等,本文將使用mongodb官方驅(qū)動(dòng)包來進(jìn)行示例,在開始之前,請(qǐng)確保已經(jīng)安裝了MongoDB數(shù)據(jù)庫并且在本地啟動(dòng)了MongoDB服務(wù),需要的朋友可以參考下
    2024-01-01
  • nodejs處理http請(qǐng)求實(shí)例詳解之get和post

    nodejs處理http請(qǐng)求實(shí)例詳解之get和post

    最近一段時(shí)間在學(xué)習(xí)前端向服務(wù)器發(fā)送數(shù)據(jù)和請(qǐng)求數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于nodejs處理http請(qǐng)求實(shí)例詳解之get和post的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • nodejs如何獲取時(shí)間戳與時(shí)間差

    nodejs如何獲取時(shí)間戳與時(shí)間差

    本文詳細(xì)介紹了nodejs獲取時(shí)間戳與時(shí)間差的多種方法,對(duì)平時(shí)nodejs的使用很有幫助,下面一起來看看吧。
    2016-08-08
  • node.js實(shí)現(xiàn)身份認(rèn)證的示例代碼

    node.js實(shí)現(xiàn)身份認(rèn)證的示例代碼

    本文主要介紹了 node.js實(shí)現(xiàn)身份認(rèn)證的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Node.js中流(stream)的使用方法示例

    Node.js中流(stream)的使用方法示例

    Stream 是一個(gè)抽象接口,Node 中有很多對(duì)象實(shí)現(xiàn)了這個(gè)接口。下面這篇文章主要給大家介紹了關(guān)于Node.js中流(stream)的使用方法示例,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • 新手必須知的Node.js 4個(gè)JavaScript基本概念

    新手必須知的Node.js 4個(gè)JavaScript基本概念

    本文介紹了4個(gè)基本JavaScript概念,它是你學(xué)習(xí)node.js所必需要掌握,下面就讓我們來看一下具體是哪4個(gè)基本JavaScript概念
    2018-09-09

最新評(píng)論