Я пытаюсь аутентифицировать сообщение, отправленное из 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'
}