【问题标题】:404 Error on Stripe Webhook in Node节点中的 Stripe Webhook 出现 404 错误
【发布时间】:2018-08-02 10:15:29
【问题描述】:

我为 webhook 设置了以下代码:

var express = require('express');
var router = express.Router();
var nodemailer = require('nodemailer');
var middleware = require('../middleware');
var stripe = require("stripe")(process.env.SECRET_KEY);

// router.use(require("body-parser").raw({type: "*/*"}));

router.post("/webhook/all", function(req, res) {
  // Retrieve the request's body and parse it as JSON
  // var event_json = JSON.parse(req.body);
  middleware.sendEmail('Webhook Test', 'event_json');
  res.sendStatus(200);
});

module.exports = router;

当我使用 localhost 和 Postman 测试它时它可以工作,但是当它处于活动状态时它会响应 404 错误:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /webhook/all</pre>
</body>
</html>

我唯一的猜测是它与我的HTTPS 有关,因为Stripe Docs 是这样说的:

如果您为 webhook 端点使用 HTTPS URL,Stripe 将 在发送之前验证与您的服务器的连接是安全的 您的 webhook 数据。为此,您的服务器必须正确 配置为通过有效的服务器证书支持 HTTPS。

我的 SSL 证书是在 DO droplet 上使用 Let's Encrypt 设置的,它似乎工作正常,所以我不确定为什么会出现这个问题。

注意:我故意将event_json 设为字符串,因为我试图尽可能多地删除可能的混淆变量。一旦它作为字符串起作用,我将取消注释 body-parser 并再次将 event_json 切换到变量。

【问题讨论】:

    标签: node.js https stripe-payments webhooks stripe.js


    【解决方案1】:

    您需要将您的本地主机隧道连接到公共。请为此使用ngrok。每次运行 ngrok

    时,它都会为您的 localhost 应用程序生成一个随机的公共 url

    假设您的 localhost URL 是 http://localhost:3000/webhook/all,ngrok url 将类似于 https://somerandomurl/webhook/all。

    然后你可以通过这个公共 url 来接收本地主机上的所有 webhook 事件。

    PS:当您在 ngrok 上按 CTRL+C 时,它将停止隧道,您的应用程序将不再能够接收任何 webhook 事件。此外,您将在条带上获得更高的故障率

    【讨论】:

      猜你喜欢
      • 2020-10-14
      • 1970-01-01
      • 2021-07-14
      • 2015-02-27
      • 2021-04-03
      • 2021-08-24
      • 2021-11-28
      • 2021-07-01
      • 2021-08-05
      相关资源
      最近更新 更多