You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JavaScript验证Cashfree支付网关的Webhook签名

Cashfree Webhook 签名验证的 JavaScript 实现

核心验证逻辑

根据官方要求,签名验证流程如下:

  1. 从Webhook请求的Headers中获取x-webhook-timestamp(时间戳)和x-webhook-signature(签名)
  2. 将时间戳字符串与**原始请求体(未解析的JSON字符串)**拼接,形成待签名字符串
  3. 使用Cashfree后台配置的Webhook密钥,通过HMAC-SHA256算法生成哈希值
  4. 对比生成的哈希值与请求头中的签名,一致则验证通过

Node.js 代码示例

以下是基于Express框架的实现(核心逻辑适配其他Node.js框架):

const express = require('express');
const crypto = require('crypto');
const app = express();

// 替换为你在Cashfree后台配置的Webhook密钥
const WEBHOOK_SECRET = '你的Cashfree Webhook密钥';

// 必须用raw模式解析请求体,不能用express.json(),避免破坏原始格式
app.use(express.raw({ type: 'application/json' }));

app.post('/cashfree-webhook', (req, res) => {
    // 从请求头提取验证所需参数
    const timestamp = req.headers['x-webhook-timestamp'];
    const receivedSignature = req.headers['x-webhook-signature'];

    if (!timestamp || !receivedSignature) {
        return res.status(400).send('缺少必要的验证头信息');
    }

    try {
        // 拼接时间戳与原始请求体
        const payload = timestamp + req.body.toString();
        // 生成HMAC SHA256签名
        const generatedSignature = crypto
            .createHmac('sha256', WEBHOOK_SECRET)
            .update(payload)
            .digest('base64');

        // 校验签名
        if (generatedSignature === receivedSignature) {
            console.log('Webhook签名验证通过');
            // 解析请求体处理业务逻辑(按需)
            const webhookData = JSON.parse(req.body);
            // TODO: 编写你的业务处理代码

            res.status(200).send('验证通过');
        } else {
            console.log('Webhook签名验证失败');
            res.status(403).send('签名验证失败');
        }
    } catch (err) {
        console.error('签名验证出错:', err);
        res.status(500).send('服务器内部错误');
    }
});

app.listen(3000, () => {
    console.log('服务器运行在3000端口');
});

关键注意事项

  • 必须使用原始请求体:提前用express.json()解析会改变原始字符串的格式(如空格、换行),导致签名生成不一致
  • 密钥需保密:不要硬编码密钥,建议用环境变量管理,比如process.env.CASHFREE_WEBHOOK_SECRET
  • 建议增加时间戳校验:验证时间戳与当前时间的差值(如5分钟内),防止重放攻击

内容的提问来源于stack exchange,提问作者chaitanya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:40:30