2017-02-11 43 views
1

當我嘗試驗證來自WooCommerce webhooks的簽名時,我遇到了一個奇怪的問題。這裏是一部分,我用它來創建簽名:正確的方式來驗證來自WooCommerce webhooks的簽名

verified = crypto.createHmac('SHA256', secret).update(new Buffer(JSON.stringify(body), 'utf8')).digest('base64'); 

它適用於有removed話題每一個網絡掛接,並請求主體等於這樣的:

{"id":360} 

不幸的是,對於每一個與updatedcreated主題的webhook,我的簽名是不一樣的。請求主體也更復雜。

{"product":{"title":"Test","id":392,"created_at":"2017-02-11T21:40:37Z","updated_at":"2017-02-11T21:40:37Z","type":"simple","status":"publish","downloadable":false,"virtual":false,"permalink":"http://cedrus.ma/chezalfred/livraison/non classu00e9/test/","sku":"","price":"","regular_price":"","sale_price":null,"price_html":"","taxable":true,"tax_status":"taxable","tax_class":"","managing_stock":false,"stock_quantity":null,"in_stock":true,"backorders_allowed":false,"backordered":false,"sold_individually":false,"purchaseable":false,"featured":false,"visible":true,"catalog_visibility":"visible","on_sale":false,"product_url":"","button_text":"","weight":null,"dimensions":{"length":"","width":"","height":"","unit":"cm"},"shipping_required":true,"shipping_taxable":true,"shipping_class":"","shipping_class_id":null,"description":"","short_description":"","reviews_allowed":true,"average_rating":"0.00","rating_count":0,"related_ids":[],"upsell_ids":[],"cross_sell_ids":[],"parent_id":0,"categories":[],"tags":[],"images":[{"id":0,"created_at":"2017-02-11T21:40:40Z","updated_at":"2017-02-11T21:40:40Z","src":"http://cedrus.ma/chezalfred/wp-content/plugins/woocommerce/assets/images/placeholder.png","title":"Etiquette","alt":"Etiquette","position":0}],"featured_src":"","attributes":[],"downloads":[],"download_limit":0,"download_expiry":0,"download_type":"","purchase_note":"","total_sales":0,"variations":[],"parent":[],"grouped_products":[],"menu_order":0}} 

我認爲當請求主體更復雜時,會發生JSON.stringify()發生錯誤。

驗證來自WooCommerce webhook的簽名的正確方法是什麼?

回答

1

我遇到了類似的問題,因爲你,使用相同的代碼(它顯然適用於某些人來說,這裏提到:SHA256 webhook signature from WooCommerce never verifies

什麼終於爲我工作在不同的獲取原始體值這樣,使用bodyParser中間件:
app.use(bodyParser.json({verify:function(req,res,buf){req.rawBody=buf}}))
(說明:https://github.com/expressjs/body-parser/issues/83#issuecomment-80784100

使用 new Buffer(JSON.stringify(body), 'utf8')代替現在我只是用req.rawBody
我希望這也能解決你的問題。

相關問題