Проверка HMAC MD5 с помощью Node.js, Express и Trialpay

Я пытаюсь аутентифицировать сообщение, отправленное из TrialPay, используя Node.js и Express. TrialPay подписывает запросы хэшем HMAC -MD5 и предоставляет эти инструкции при проверке.

Это мой код:

app.post('/trialpay', function(req, res) {

    var key = "[MY MERCHANT KEY]";
    var hash = req.header("TrialPay-HMAC-MD5");
    var data = req.body.toString();

    var crypted = require("crypto").createHmac("md5", key)
       .update(data)
       .digest("hex");

    if (hash == crypted) {
        res.writeHead(200, {"Content-Type": "plain/text"});
        res.end("Success!");
    } else {
        throw new Error("Invalid TrialPay Hash");
    }  
});

Это, очевидно, не работает (хеш не совпадает ).

Заявление об ограничении ответственности :Я новичок в Node.js и, во-первых, мало знаком с Javascript.

ОБНОВЛЕНИЕ

Я не знал, что ссылка защищена.

TrialPay использует ваш ключ уведомления -(, указанный в информации вашей учетной записи )в качестве секретного ключа для подписи HMAC. Для запросов GET строка запроса после вопросительного знака (в URL-адресе ). для поста запросы, все тело POST подписывается.

Вот пример того, как TrialPay предлагает вам выполнить проверку в Google App Engine (Python):

class MyHandler(webapp.RequestHandler):
  def post(self):
  key = '[YOUR MERCHANT KEY]'
  tphash = self.request.headers['TrialPay-HMAC-MD5'] 
  if hmacmd5(key,self.request.body) != tphash:
    logging.info('invalid trialpay hash')
    return 

ОБНОВЛЕНИЕ 2

req.bodyраспечатывается как:

{ 
  oid: 'sample-order-id',
  sid: 'customer-sid',
  order_date: '04/24/2012',
  timestamp: '04/24/2012 16:28:46',
  first_name: 'customer-firstname',
  last_name: 'customer-lastname',
  email: 'customer@trialpay.com',
  revenue: '10.00',
  zip_code: '94041',
  country: 'US' 
}

7
задан Paul Burke 25 April 2012 в 15:19
поделиться