从Shopify Webhook验证HMAC(使用Hapijs)

时间:2019-12-28 02:02:31

标签: javascript shopify hapijs hapi

我正在尝试通过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。

1 个答案:

答案 0 :(得分:0)

确保在路由的配置中将payload.parse设置为false,并使用request.raw.req来获取原始信息