【问题标题】:Is it possible to set localhost as a Stripe webhook URL?是否可以将 localhost 设置为 Stripe webhook URL?
【发布时间】:2023-03-08 01:23:01
【问题描述】:

我正在使用 Stripe 创建一个支付网关。

我想将我的 localhost url localhost/stripe/webhook.php 设置为我的 webhook url。是否可以将 localhost 地址设置为 webhook url?这将用于创建在 Stripe 中每次成功收费时触发的邮件服务。

【问题讨论】:

标签: php stripe-payments webhooks


【解决方案1】:

Stripe 现在有一个官方工具,Stripe CLI 可以让这变得简单(但仍然需要安装另一个工具)。

请参阅this answer belowofficial Stripe CLI docs

另外,实现此目的的另一种方法是使用http://www.ultrahook.com,它允许您在 localhost 上接收 webhook。这种替代方案适用于所有 webhook,而不仅仅是 Stripe 的

【讨论】:

  • 正如其他人在下面回答的那样,可能需要考虑更流行的ngrok,它是开源的。
  • ngrok 每分钟都有限制,这使得它对开发毫无用处。
  • ultrahook 似乎没有返回 https 端点。像微软这样的 webhook 提供商不接受 http 端点。我在这里错过了什么吗?
  • 我今天切换到stripe。我曾经使用ngrok,但大约在 4 或 5 年前就停止了开发。因此,我更喜欢stripe,因为它是他们的官方工具。话虽如此,我还没有使用它,所以我不知道它与ngrok相比表现如何。
  • 警告使用 Stripe CLI 会将事件发送到 localhost 和任何 staging webhook 设置中定义的 webhook URL , 同时地。在多次失败后,Stripe 会提醒帐户持有人(通常是客户端)并完全删除 webhook URL。
【解决方案2】:

如何使用 ngrok 并设置 Stripe Webhooks url

Source Link

  1. 首先下载ngrok并解压到你的电脑上
  2. 双击 ngrok.exe
  3. 尝试在此终端提示符下键入 ngrok.exe http 80 以公开端口 80

  4. 例如,如果我们在 localhost 上有 Stripe webhooks url,就像这样 http://localhost/stripeproject/webhook.php

  5. 只需将您的 ngrok url 指定为您的 webhook 的端点 服务,您就快完成了。

  6. 你可以设置这个网址 http://f253021b.ngrok.io/stripeproject/webhook.php发送测试 webhook 到您帐户中的集成端点 webhook 设置。

对我来说效果很好。

更多详情click here

【讨论】:

  • 只是补充一点,如果您有自定义本地域,例如“server1.dev”,您可以将它作为主机头传递给 ngrok。因此,如果您希望 ngrok 专门指向 server1.dev,您将发出以下命令:ngrok http --host-header "server1.dev" 80
【解决方案3】:

现在有另一种选择:您现在可以使用 the Stripe CLI 在本地无缝测试 webhook,而无需第三方工具。

在这种情况下,您只需执行 something like this 将您的 Stripe 事件检测到您的本地 webhook 处理程序代码:

stripe listen --forward-to localhost/stripe/webhook.php

【讨论】:

  • 它可能不是第 3 方,但您确实需要安装另一个不幸的工具。但是,这应该是现在推荐的答案。
【解决方案4】:

不,这行不通。 Stripe 服务器必须能够联系您的服务器以发送 webhook。 Stripe 不知道如何联系您的“本地主机”。您需要一个可访问网络的地址或 IP 地址才能正常工作

【讨论】:

  • 这就是 ngrok 的用途。它使您的本地访问
【解决方案5】:

尝试使用条带 CLI:

在这里您可以将事件转发到您的本地主机服务器。

https://stripe.com/docs/webhooks/test

【讨论】:

  • 请不要包含仅链接的答案,即使它是官方文档。请务必复制并粘贴代码的相关部分。
【解决方案6】:

更简单的是,在本地运行时将此端点添加到您的应用程序中(而不是在产品中!):

const eventsSeen = new Set();

app.post("/test/simulate-stripe-webhook", async (req, res) => {
  const events = await stripe.events.list({ limit: req.query.limit || 10 });
  for (const event of events) {
    if (eventsSeen.has(event.id)) continue;
    await processStripeEvent(event);
    eventsSeen.add(event.id);
  }
  return res.status(200).end();
});

...processStripeEvent 是您的 webhook 触发的任何逻辑。

那么就不需要在 Stripe 中管理 webhook。

【讨论】:

    【解决方案7】:

    可以将 webhook 发送到您的本地主机。查找“ngrok”,当你运行它时,它会打开一个公共互联网访问端口,并为你提供一个可以访问你的本地主机的 url。获取此 url 并将其设置为您的 webhook 地址并通过将其指向您的 webhook.php 文件来完成 url。

    * 编辑 *

    这仅适用于测试。

    【讨论】:

      【解决方案8】:

      您可以使用expose.sh 通过公共HTTPS URL 公开您的服务器。

      安装expose.sh

      对于 Mac 或 Linux,请转到 Expose.sh 并将显示的安装代码复制/粘贴到终端中。

      对于 Windows,请转到 Expose.sh,下载二进制文件并将其放在 PATH 中的某个位置。

      向网络公开你的 api

      启动您的 API 服务器。然后运行expose <port>,其中端口是您的 API 服务器运行的端口,例如 80 或 8080。

      Expose.sh 会随机生成一个公开的expose.sh URL。你会看到类似的输出

      https://s3rh.expose.sh is forwarding to localhost:80
      http://s3rh.expose.sh is forwarding to localhost:80
      

      然后您可以让 Stripe 使用公共 HTTPS URL,该 URL 将转发到 localhost。 我已经写了一个完整的指南here

      免责声明:我构建了expose.sh

      【讨论】:

        【解决方案9】:

        就像马特说的那样,你需要把它放在网上的某个地方——最好使用 https://。供您参考,我在 2 个月前在这里放置了一个示例邮件 webhook:https://github.com/pnommensen/Stripe-Webhook-Emails

        【讨论】:

          【解决方案10】:

          是的,可以在本地主机上测试条形网络挂钩 转到此 URL https://dashboard.stripe.com/test/webhooks/ 并打开您的端点 对于即 https://test.com/api/StripeHook 现在打开您的 Webhook 尝试,然后剥离并复制所有 json 代码。

          现在在本地主机上运行您的项目并打开邮递员并点击 https://localhost/api/StripeHook 并将所有复制的 json 文本放入邮递员的正文数据中。

          【讨论】:

          • 我们需要设置哪些标题才能让邮递员工作?当我从邮递员发送时,它抱怨没有提供 API 密钥。
          猜你喜欢
          • 2013-08-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-18
          • 1970-01-01
          • 2020-12-17
          • 2011-03-03
          • 1970-01-01
          相关资源
          最近更新 更多