通过 HTTPS 测试 Stripe webhook 不断失败:超时

Posted

技术标签:

【中文标题】通过 HTTPS 测试 Stripe webhook 不断失败:超时【英文标题】:Testing Stripe webhook over HTTPS keep failing : Timed out 【发布时间】:2018-11-02 21:14:03 【问题描述】:

短版

我正在尝试创建一个非常基本的 webhook,它重定向到本地主机上的 ASP.NET MVC 控制器方法。但是,我的网站使用完整的 HTTPS,而且似乎我的隧道客户端 (ngrok) 使用 HTTPS 失败。 创建一个新的 ASP.NET MVC 网站并实现我的 webhook 工作正常,但我的 HTTPS 网站一直失败。

加长版

这是我到目前为止所做的:

1/ 在我的 ASP.NET MVC5 网站上创建一个端点并在 localhost 上运行它。它在端口 44368 上运行,因为我的完整网站使用 HTTPS。

public class StripeWebhookController : BaseController

    [HttpPost]
    [AllowAnonymous]
    public ActionResult Index()
    
         // ...
    

2/ 安装ngrok 并按照this SO answer 中的说明进行配置

3/ 转到我的 Stripe 测试仪表板并复制要这样调用的 URL: (我尝试检查另一个 RadioButton,“最新”,但效果不佳。我还尝试将 https 替换为 http,也不是更好)

当我使用 Stripe 仪表板发送测试 webhook 时,我可以在 http://localhost:4040/inspect/http 中看到请求:

但是我在StripeWebhook/Index 方法的第一行放置的断点永远不会被命中。 Stripe 中会出现一个弹出窗口,发送的请求带有以下错误消息:Test webhook error: Timed out

但是,如果我使用默认模板创建一个全新的 ASP.NET MVC 网站,并按照完全相同的步骤操作,它就可以工作。这是因为我的项目使用 HTTPS,而 ngrok 无法通过 HTTPS 方法重定向(据我了解。)

如何使用 ngrok(或任何其他免费隧道工具)通过 HTTPS 重定向到控制器方法?

【问题讨论】:

【参考方案1】:

从可用信息中很难说问题是与 ngrok 相关还是与您的代码相关或介于两者之间。

使用 ngrok 你必须重写主机,参见ngrok with https on localhost returns 502

我们还有一个名为 Conveyor 的免费隧道工具,它作为 VS 扩展安装。您可以从 Tools -> Extensions 安装它并通过 UI 注册一个帐户。一旦您拥有公共 URL(将是 https),它应该“正常工作”。可能会出现同样的问题,但我很乐意帮助您解决问题。您可能会发现 this video 也很有帮助。

由 OP 编辑​​:为了更清楚起见,我必须安装 Conveyor,然后单击“通过 Internet 访问”并在他们的网站上注册。然后,您将获得一个类似https://projectName.conveyor.cloud 的地址。我只需要用这个域名在 Stripe 上创建一个新端点并添加我的 /StripeWebhook/Index 路由,它就像一个魅力

【讨论】:

是的,太棒了!我刚刚编辑了您的答案,以便将来的用户更清楚

以上是关于通过 HTTPS 测试 Stripe webhook 不断失败:超时的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 API 清除 Stripe 中的测试数据?

如何通过 Stripe Elements 在服务器端销售产品

如何在 React 测试中加载 Stripe?

使用 Stripe 测试订阅试用期

如何使用 ngrok 测试接收 Stripe webhook

Stripe 不会尝试联系我的 Webhook