Проверка подписи Razorpay не выполняется, поскольку дайджест SHA256 неверен NodeJS

Я делаю приложение, в котором после успешной оплаты я создаю дайджест, который проверяю, используя предлагаемый способ проверки подписи Razorpay.

Мой бэкэнд находится на NodeJS, и вот как я создаю дайджест.

const crypto = require("crypto");

 var generatedSignature = crypto
      .createHmac(
        "SHA256",
        razorpay_order_id + "|" + razorpay_payment_id
      )
      .update(key_secret)
      .digest("hex");  

var isSignatureValid = generatedSignature == payload.razorpay_signature // false

Я ошибаюсь в создании подписи?


person sidd    schedule 13.06.2019    source источник


Ответы (5)


Вы можете использовать следующий код. Надеюсь, это сделает код более понятным.

const crypto = require("crypto");
const hmac = crypto.createHmac('sha256', RAZORPAY_KEY_SECRET);

hmac.update(razorpayOrderId + "|" + razorpayPaymentId);
let generatedSignature = hmac.digest('hex');

let isSignatureValid = generatedSignature == payload.razorpay_signature;

Перейдите по этой ссылке, чтобы узнать больше о https://nodejs.org/api/crypto.html#crypto_class_hmac

person Mathew John    schedule 16.08.2019
comment
по существу ответ. Это действительно очень помогает. Спасибо - person Hrishikesh Baidya; 06.01.2021

Вам просто нужно изменить createHmac и обновить, как показано ниже, заменяя в них параметры.

const crypto = require("crypto");

var generatedSignature = crypto
  .createHmac(
    "SHA256",
    key_secret
  )
  .update(razorpay_order_id + "|" + razorpay_payment_id)
  .digest("hex");  

 var isSignatureValid = generatedSignature == payload.razorpay_signature;
person Anish Antony    schedule 30.06.2019

введите здесь описание изображения Пройдя через официальный модуль razorpay npm, я нашел эту функцию, которая делает всю работу за вас. Можно также использовать это.

имя файла и каталог: node_modules / razorpay / dist / utils / razorpay-utils.js, имя функции: validateWebhookSignature

Принимает 'body' - последовательность хеширования, 'signature' - подпись, возвращенную razorpay, 'key_secret' - с панели управления razorpay

При этом используется та же функция crypto.hmac_256, которая упоминалась ранее в этом потоке.

ОБНОВЛЕНИЕ: проверено с использованием этой функции, возвращает false ==> подпись не соответствует.

Прочтите на GitHub, что подпись не будет совпадать с использованием тестового ключа. Это будет работать при использовании живого ключа.

Обновлю этот поток, когда я попытаюсь использовать производственные ключи. Ваше здоровье!

person Alp4x    schedule 13.04.2020
comment
Проверял это. Возвращает false == ›хеш не соответствует. - person Alp4x; 13.04.2020

const crypto=require('crypto');
const json = JSON.stringify(req.body); // req.body is entire body payload 
const expectedSignature = 
crypto.createHmac('sha256',secretKey).update(json).digest('hex');
// secretKey is configured key provided by us while creating webhook


//--- Or Use razorpay static method 

/*
@params body string (body is req.body data)
@params razorpayHeaderSignature string (x-razorpay-signature of header section 
provided by webhook)
@params secretKey (secretKey is configured key provided by us while creating webhook)
*/

const json = JSON.stringify(req.body); // req.body is entire body payload 
Razorpay.validateWebhookSignature(body, razorpayHeaderSignature, secretKey);

ПРИМЕЧАНИЕ. В теле запроса не используйте некоторые специальные символы, такие как '/' и т. д. Это приводит к сбою проверки подписи.

person Bharath S    schedule 25.01.2021

Приведенное ниже решение сработало для меня

     import crypto from 'crypto';

     const signature = req.headers['x-razorpay-signature'];
     const generatedSignature = crypto
      .createHmac('sha256', RAZOR_PAY_WEBHOOK_SECRET)
      .update(JSON.stringify(req.body))
      .digest('hex');

    if (signature === generatedSignature) {
      console.log('request is legit');
    }
    else{
      console.log('Wrong Signature!');
    }
person Suraj Krishan    schedule 24.05.2021
comment
Не могли бы вы добавить к своему вопросу образец действующей подписи, образец текста запроса и сгенерированную подпись? - person tantalum; 24.05.2021