NodeJS 如何在js中验证cashfree网关的webhook签名

sf6xfgos  于 2023-03-01  发布在  Node.js
关注(0)|答案(1)|浏览(166)

我使用的是无现金支付网关。一切正常,但我不知道如何验证webhooks签名。

这是他们要求的。如何为它编写javascript代码?

mrfwxfqh

mrfwxfqh1#

感谢您的提醒。我们正在改进webhook文档。同时,验证webhook的步骤如下-
1.从webhook端点获取有效负载
1.生成签名
1.验证签名。
这里的有效负载指的是raw json主体,而不是bodyParser解析的内容。

正在获取有效负载
//Set up your server like this 
var express = require('express')
var bodyParser = require('body-parser');
var crypto = require('crypto');
var app = express()

//This part is to get the rawBody
app.use(
    express.json({
        limit: '5mb',
        verify: (req, res, buf) => {
        req.rawBody = buf.toString();
        },
    })
);
app.use(bodyParser.json());
//This is your endpoint
app.post('/webhook', function(req, res) {
    console.log(req.rawBody);
    const ts = req.headers["x-webhook-timestamp"]
    const signature = req.headers["x-webhook-signature"]
    console.log("ts --> ", ts);
    console.log("expected sign --> ", signature);
    const genSignature = verify(ts, req.rawBody)
    if(signature === genSignature){
        res.send('OK')
    } else {
        res.send("failed")
    } 
})
验证签名
function verify(ts, rawBody){
    const body = ts + rawBody
    const secretKey = "<your secret key>";
    let genSignature = crypto.createHmac('sha256',secretKey).update(body).digest("base64");
    return genSignature
}

相关问题