我正在尝试通过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。
答案 0 :(得分:0)
确保在路由的配置中将payload.parse
设置为false,并使用request.raw.req
来获取原始信息