Я точно следовал коду из документов shopify ( Приложение Shopify с Node и Express ) для интеграции приложения с Express, но, похоже, я все еще нажимаю HMAC Validation Failed.
const map = Object.assign({}, req.query);
delete map['signature'];
delete map['hmac'];
const message = querystring.stringify(map);
const providedHmac = Buffer.from(hmac, 'utf-8');
const generatedHash = Buffer.from(
crypto
.createHmac('sha256',this.configService.get('SHOPIFY_API_SECRET'))
.update(message)
.digest('hex'),
'utf-8'
);
let hashEquals = false;
// timingSafeEqual will prevent any timing attacks. Arguments must be buffers
try {
hashEquals = crypto.timingSafeEqual(generatedHash, providedHmac)
// timingSafeEqual will return an error if the input buffers are not the same length.
} catch (e) {
hashEquals = false;
};
if (!hashEquals) {
return res.status(400).send('HMAC validation failed');
}
Я ожидаю, что приведенный выше код будет работать и не вернет ошибку.