2017-02-17 3 views
-1

По некоторым причинам я не могу сделать эту работуОбеспечение убер не webhook работает

require crypto = require('crypto') 

const hmac = crypto.createHmac('sha256', 'clientSecret') 
const hash = hmac.update(JSON.stringify(req.body)).digest('hex') 

if (hash !== req.header('X-Uber-Signature')) { 
    return res.json('something is wrong ' + hash + ' ' + req.header('X-Uber-Signature')) 
} 

return res.json('you got in!') 

Я следую инструкции здесь https://developer.uber.com/docs/riders/guides/webhooks#security

но хэш генерирует различные значения

Другие подходы Добро пожаловать.

+0

Что значение, которое вы ожидаете, и что вы получите? –

ответ

1

Вот рабочая реализация в Python для проверки webhook:

import hmac 
import hashlib 

# Compute hmac sha256 signature from payload + client secret 
digester = hmac.new(
    UBER_CLIENT_SECRET, 
    request.data, 
    hashlib.sha256 
) 

# Parse json post data 
event = request.get_json(force=True) 

# Validate webhook signature for our app 
if request.headers.get('X-Uber-Signature') == digester.hexdigest(): 
    pass 
+0

Как это решить вопрос? Это вопрос node.js! – gaskbr

0

У меня была такая же проблема. Uber отправляет json с пробелами перед ключами и значениями. Нравится

 
{"event_id": "...", "resource_href": "...", "meta": {"status": "...", "rider_id": "...", "user_id": "...", "resource_id": "..."}, "event_type": "...", "event_time": ...} 

Вы можете сделать это до активации борипарса. И создать шестигранные из этих данных

app.use(function (req, res, next) { 

let data = ""; 
req.on('data', function(chunk){data += chunk}); 
req.on('end', function(){ 
    req.jsonBody = JSON.parse(data); 
    req.rawBody = data; 
    req.originalUberReq = data; 
}); 
next(); 
}); 

затем

const hash = crypto.createHmac('sha256', secret) 
.update(req.originalUberReq) 
.digest('hex'); 
Смежные вопросы