设置X.Reach & Re.Boost回调地址

如果你想要接入开放平台的回调,你需要在Dashboard后台-开发配置中设置X.Reach或Re.Boost回调地址来使用它们。

callback

回调信息安全验证

请在回调请求的Header中验证数据是否篡改及请求是否有效,验证的方式如下: 注: md5为小写32位

  • 请求方法:POST
  • 请求认证:Authorization: Bearer md5(OpenSecret+(空格)+md5(请求body))
  • 内容类型:application/json

下面是服务器验证回调是否安全的参考示例:

Node
const http = require('http');
const crypto = require('crypto');
 
// 定义OpenSecret
const OpenSecret = 'your_open_secret';
 
// 创建HTTP服务器
const server = http.createServer((req, res) => {
  if (req.method === 'POST') {
    let body = '';
 
    // 接收请求体数据
    req.on('data', (chunk) => {
      body += chunk.toString();
    });
 
    // 请求体接收完毕
    req.on('end', () => {
      // 获取Authorization头中的Bearer值
      const authHeader = req.headers['authorization'];
      if (!authHeader || !authHeader.startsWith('Bearer ')) {
        res.statusCode = 401;
        res.end('Unauthorized: Missing or invalid Authorization header');
        return;
      }
 
      const bearerToken = authHeader.split(' ')[1]; // 提取Bearer的值
 
      // 计算请求体的MD5哈希值
      const bodyMD5 = crypto.createHash('md5').update(body).digest('hex');
 
      // 计算md5(OpenSecret + ' ' + md5(请求body))
      const expectedToken = crypto
        .createHash('md5')
        .update(OpenSecret + ' ' + bodyMD5)
        .digest('hex');
 
      // 验证Bearer的值是否等于计算的值
      if (bearerToken === expectedToken) {
        res.statusCode = 200;
        res.end('Verification successful: Token is valid');
      } else {
        res.statusCode = 401;
        res.end('Unauthorized: Token verification failed');
      }
    });
  } else {
    res.statusCode = 405;
    res.end('Method Not Allowed');
  }
});
 
// 启动服务器
server.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});