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

Node.js集成CoinGate加密支付时回调POST请求req.body为空问题求助

解决Node.js中CoinGate回调req.body为空的问题

以下是几种常见的排查和解决方法:

1. 确保启用了正确的请求体解析中间件

CoinGate的回调请求默认使用application/json格式发送数据,因此在Express应用中必须启用JSON解析中间件,否则req.body会为空:

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

// 关键:启用JSON请求体解析
app.use(express.json());

app.post('/coingate-webhook', (req, res) => {
  console.log('订单数据:', req.body);
  res.status(200).send('OK');
});

如果CoinGate发送的是application/x-www-form-urlencoded格式(极少数情况),还需要添加表单解析中间件:

app.use(express.urlencoded({ extended: true }));

2. 检查请求头并验证签名

先打印请求头确认Content-Type是否匹配,同时建议验证CoinGate的签名(确保请求来自官方):

const crypto = require('crypto');
const COINGATE_API_SECRET = '你的CoinGate API密钥';

app.post('/coingate-webhook', express.json(), (req, res) => {
  // 打印请求头确认Content-Type
  console.log('请求头:', req.headers['content-type']);

  // 验证CoinGate签名
  const signature = req.headers['coingate-signature'];
  const payload = JSON.stringify(req.body);
  const hmac = crypto.createHmac('sha256', COINGATE_API_SECRET)
                     .update(payload)
                     .digest('hex');

  if (signature !== hmac) {
    return res.status(403).send('无效签名');
  }

  // 此时req.body应包含完整订单数据,比如order_id、status等字段
  console.log('验证通过的订单数据:', req.body);
  // 这里可以调用其他API处理订单逻辑
  res.status(200).send('OK');
});

3. 排查反向代理导致的请求体丢失

如果你的Node.js应用部署在Nginx等反向代理之后,需要确保代理配置没有丢弃请求体:

location /coingate-webhook {
  proxy_pass http://你的Node应用地址:端口;
  proxy_set_header Content-Type $content_type;
  proxy_pass_request_body on; # 确保传递请求体
  proxy_set_header X-Forwarded-For $remote_addr;
}

4. 手动读取原始请求体(备选方案)

如果上述方法都无效,可以直接读取原始请求体并解析:

app.post('/coingate-webhook', (req, res) => {
  let rawBody = '';

  req.on('data', (chunk) => {
    rawBody += chunk.toString();
  });

  req.on('end', () => {
    try {
      // 尝试JSON解析
      const orderData = JSON.parse(rawBody);
      console.log('订单数据:', orderData);
    } catch (err) {
      // 解析失败则按表单格式处理
      const formData = Object.fromEntries(new URLSearchParams(rawBody));
      console.log('订单数据:', formData);
    }
    res.status(200).send('OK');
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:21:07