首页 > 解决方案 > 从 Shopify Webhook 验证 HMAC(使用 Hapijs)

问题描述

我正在尝试在 webhook 中验证 Shopify 的 HMAC。这是我的控制器的外观:

  newOrder: {
    payload: {
      parse: false
    },
    handler: function(request, reply) {
      const hmac = request.headers['x-shopify-hmac-sha256'];
      let generatedHash = crypto
        .createHmac('sha256', utils.SHOPIFY_API_SECRET)
        .update(JSON.stringify(request.payload))
        .digest('base64');

      if (generatedHash == hmac) {
        console.log("Validated");
      } else {
        console.log("Not validated");
      }



      console.log(hmac, generatedHash.toString(), utils.SHOPIFY_API_SECRET)
      reply().code(200);
    },
    auth: false,
    notes: 'Shopifys new order webhook',
    tags: ['api'],
    id: 'newOrder'
  }

hmac永远不等于generatedHash。我认为它与 req.rawBody (来自 Express)有关,但我不知道如何从 Hapijs 获得相同的有效负载,或者我遗漏了一些东西。

我正在使用 HapiJs v14.0.0。

标签: javascriptshopifyhapijshapi

解决方案


确保您payload.parse在路线的配置中设置为 false 并request.raw.req用于获取原始正文


推荐阅读