Express JS и CoinPayments: не удалось получить тело запроса уведомления IPN

Итак, вот моя проблема, я работаю с Express JS, я настраиваю платежи с помощью coinPayments, все работает с монетами npm, однако я не мог получить ни одного тела с IPN

      router.post(
  `/notify`,
  (req, res, next) => {
    res.send('ok');
    console.log('------------------------------ipn--------------------------------------');
    console.log('body', req.body);
    console.log('------------------------------ipn--------------------------------------');
    if (
      !req.get(`HMAC`) ||
      !req.body.ipn_mode ||
      req.body.ipn_mode !== `hmac` ||
      MERCHANT_ID !== req.body.merchant
    ) {
      return next(new Error(`Invalid request`));
    }

    let isValid;
    let error;

    try {
      isValid = verify(req.get(`HMAC`), IPN_SECRET, req.body);
    } catch (e) {
      error = e;
    }

    if (error && error) {
      return next(error);
    }

    if (!isValid) {
      return next(new Error(`Hmac calculation does not match`));
    }

    return next();
  }

Я всегда получаю пустой req.body

       ------------------------------ipn--------------------------------------
 body {}
 ------------------------------ipn--------------------------------------
Invalid request at router.post.txn_id.txn_id

Есть ли у кого-нибудь идеи, почему и как я могу это решить?

1 ответ

Из по документациикооплате

Это реализуется путем выполнения стандартного HTTP-запроса POST(application / x-www-form-urlencoded) по URL-адресу https: // или http: // к сценарию или программе CGI на вашем сервере.

На вашем сервере Express вам может потребоваться добавить промежуточное программное обеспечение для анализа запросов в формате urlencoded:

      app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded
Другие вопросы по тегам