首页 » SEO优化 » phpgithubwebhook技巧_本地开拓若何测试 Webhook

phpgithubwebhook技巧_本地开拓若何测试 Webhook

访客 2024-11-23 0

扫一扫用手机浏览

文章目录 [+]

Webhook 可用于外部系统关照你的系统发生了某个事宜或更新。

-- Stefan Doorn(作者)

phpgithubwebhook技巧_本地开拓若何测试 Webhook

Webhook 可用于外部系统关照你的系统发生了某个事宜或更新。
可能最有名的 Webhook 类型是支付做事供应商(PSP)关照你的系统支付状态有了更新。

phpgithubwebhook技巧_本地开拓若何测试 Webhook
(图片来自网络侵删)

它们常日以监听的预定义 URL 的形式涌现,例如 http://example.com/webhooks/payment-update。
同时,另一个别系向该 URL 发送具有特定有效载荷的 POST 要求(例如支付 ID)。
一旦要求进入,你就会得到支付 ID,可以通过 PSP 的 API 用这个支付 ID 向它们讯问最新状态,然后更新你的数据库。

其他例子可以在这个对 Webhook 的出色的阐明中找到: https://sendgrid.com/blog/whats-webhook/ 。

只要系统可通过互联网公开访问(这可能是你的生产环境或可公开访问的临时环境),测试这些 webhook 就相称顺利。
而当你在条记本电脑上或虚拟机内部(例如,Vagrant 虚拟机)进行本地开拓时,它就变得困难了。
在这些情形下,发送 webhook 的一方无法公开访问你确当地 URL。
此外,监视发送的要求也很困难,这可能使开拓和调试变得困难。

因此,这个例子将办理:

测试来自本地开拓环境的 webhook,该环境无法通过互联网访问。
从做事器向 webhook 发送数据的做事无法访问它。
监控发送的要乞降数据,以及运用程序天生的相应。
这样可以更轻松地进行调试,从而缩短开拓周期。

前置需求:

可选:如果你利用虚拟机(VM)进行开拓,请确保它正在运行,并确保在 VM 中完成后续步骤。
对付本教程,我们假设你定义了一个 vhost:webhook.example.vagrant。
我在本教程中利用了 Vagrant VM,但你可以自由选择 vhost。
按照这个 安装解释 安装 ngrok。
在 VM 中,我创造它的 Node 版本也很有用: https://www.npmjs.com/package/ngrok ,但你可以随意利用其他方法。

我假设你没有在你的环境中运行 SSL,但如果你利用了,请将不才面的示例中的端口 80 更换为端口 433,http:// 更换为 https://。

使 webhook 可测试

我们假设以下示例代码。
我将利用 PHP,但请将其视作伪代码,由于我留下了一些关键部分(例如 API 密钥、输入验证等)没有编写。

第一个文件:payment.php。
此文件创建一个 $payment 工具,将其注册到 PSP。
然后它获取客户须要访问的 URL,以便支付并将用户重定向到客户那里。

请把稳,此示例中的 webhook.example.vagrant 是我们为开拓设置定义确当地虚拟主机。
它无法从外部天下进入。

<?php/ This file creates a payment and tells the PSP what webhook URL to use for updates After creating the payment, we get a URL to send the customer to in order to pay at the PSP /$payment = [ 'order_id' => 123, 'amount' => 25.00, 'description' => 'Test payment', 'redirect_url' => 'http://webhook.example.vagrant/redirect.php', 'webhook_url' => 'http://webhook.example.vagrant/webhook.php',];$payment = $paymentProvider->createPayment($payment);header(\公众Location: \"大众 . $payment->getPaymentUrl());

第二个文件:webhook.php。
此文件等待 PSP 调用以得到有关更新的关照。

<?php/ This file gets called by the PSP and in the $_POST they submit an 'id' We can use this ID to get the latest status from the PSP and update our internal systems afterward / $paymentId = $_POST['id'];$paymentInfo = $paymentProvider->getPayment($paymentId);$status = $paymentInfo->getStatus();// Perform actions in here to update your systemif ($status === 'paid') { ..}elseif ($status === 'cancelled') { ..}

我们的 webhook URL 无法通过互联网访问(请记住它:webhook.example.vagrant)。
因此,PSP 永久不可能调用文件 webhook.php,你的系统将永久不会知道付款状态,这终极导致订单永久不会被运送给客户。

幸运的是,ngrok 可以办理这个问题。
ngrok 将自己描述为:

ngrok 通过安全隧道将 NAT 和防火墙后面确当地做事器暴露给公共互联网。

让我们为我们的项目启动一个基本的隧道。
在你的环境中(在你的系统上或在 VM 上)运行以下命令:

ngrok http -host-header=rewrite webhook.example.vagrant:80

阅读其文档可以理解更多配置选项: https://ngrok.com/docs 。

会涌现这样的屏幕:

ngrok 输出

我们刚刚做了什么?基本上,我们指示 ngrok 在端口 80 建立了一个到 http://webhook.example.vagrant 的隧道。
同一个 URL 也可以通过 http://39741ffc.ngrok.io 或 https://39741ffc.ngrok.io 访问,它们能被任何知道此 URL 的人通过互联网公开访问。

请把稳,你可以同时得到 HTTP 和 HTTPS 两个做事。
这个文档供应了如何将此限定为 HTTPS 的示例: https://ngrok.com/docs#bind-tls 。

那么,我们如何让我们的 webhook 现在事情起来?将 payment.php 更新为以下代码:

<?php/ This file creates a payment and tells the PSP what webhook URL to use for updates After creating the payment, we get a URL to send the customer to in order to pay at the PSP /$payment = [ 'order_id' => 123, 'amount' => 25.00, 'description' => 'Test payment', 'redirect_url' => 'http://webhook.example.vagrant/redirect.php', 'webhook_url' => 'https://39741ffc.ngrok.io/webhook.php',];$payment = $paymentProvider->createPayment($payment);header(\"大众Location: \"大众 . $payment->getPaymentUrl());

现在,我们见告 PSP 通过 HTTPS 调用此隧道 URL。
只要 PSP 通过隧道调用 webhook,ngrok 将确保利用未修正的有效负载调用内部 URL。

如何监控对 webhook 的调用?

你在上面看到的屏幕截图概述了对隧道主机的调用,这些数据相称有限。
幸运的是,ngrok 供应了一个非常好的仪表板,许可你检讨所有调用:

我不会深入研究这个问题,由于它是不言自明的,你只要运行它就行了。
因此,我将阐明如何在 Vagrant 虚拟机上访问它,由于它不是开箱即用的。

仪表板将许可你查看所有调用、其状态代码、标头和发送的数据。
你将看到运用程序天生的相应。

仪表板的另一个优点是它许可你重放某个调用。
假设你的 webhook 代码碰着了致命的缺点,开始新的付款并等待 webhook 被调用将会很繁琐。
重放上一个调用可以使你的开拓过程更快。

默认情形下,仪表板可在 http://localhost:4040 访问。

虚拟机中的仪表盘

为了在 VM 中完成此事情,你必须实行一些额外的步骤:

首先,确保可以在端口 4040 上访问 VM。
然后,在 VM 内创建一个文件已存放此配置:

web_addr: 0.0.0.0:4040

现在,杀去世仍在运行的 ngrok 进程,并利用轻微调度过的命令启动它:

ngrok http -config=/path/to/config/ngrok.conf -host-header=rewrite webhook.example.vagrant:80

只管 ID 已经变动,但你将看到类似于上一屏幕截图的屏幕。
之前的网址不再有效,但你有了一个新网址。
此外,Web Interface URL 已变动:

现在将浏览器指向 http://webhook.example.vagrant:4040 以访问仪表板。
其余,对 https://e65642b5.ngrok.io/webhook.php 做个调用。
这可能会导致你的浏览器出错,但仪表板应显斧正有一个要求。

末了的备注

上面的例子是伪代码。
缘故原由是每个外部系统都以不同的办法利用 webhook。
我试图基于一个虚构的 PSP 实现给出一个例子,由于可能很多开拓职员在某个时候肯定会处理付款。

请把稳,你的 webhook 网址也可能被意图不好的其他人利用。
确保验证发送给它的任何输入。

更好的的,可以向 URL 添加令牌,该令牌对付每个支付是唯一的。
只有你的系统和发送 webhook 的系统才能知道此令牌。

祝你测试和调试你的 webhook 顺利!

把稳:我没有在 Docker 上测试过本教程。
但是,这个 Docker 容器看起来是一个很好的出发点,并包含了明确的解释: https://github.com/wernight/docker-ngrok 。

via: https://medium.freecodecamp.org/testing-webhooks-while-using-vagrant-for-development-98b5f3bedb1d

作者: Stefan Doorn 译者: wxy 校正: wxy

本文由 LCTT 原创编译, Linux中国 名誉推出

点击“理解更多”可访问文内链接

相关文章

今日头条算法岗三面算法工程师的面试之路

大数据和人工智能技术逐渐成为各行各业的热门话题。今日头条作为中国领先的资讯平台,其算法岗位一直是求职者争相竞逐的焦点。本文将针对今...

SEO优化 2025-01-31 阅读3 评论0

今日头条算法如何打造个化内容推荐

在移动互联网时代,信息爆炸已成为常态。如何在海量信息中找到自己感兴趣的内容,成为了一个亟待解决的问题。今日头条作为一款备受瞩目的新...

SEO优化 2025-01-31 阅读1 评论0

今日头条算法推荐其弊端与反思

算法推荐已经成为各大平台的核心竞争力。今日头条作为国内领先的资讯平台,凭借其强大的算法推荐系统,吸引了大量用户。在享受算法带来的便...

SEO优化 2025-01-31 阅读1 评论0

今日头条算法思维导图信息推荐的奥秘

信息传播速度越来越快,用户对信息的需求也越来越多样化。今日头条作为一款备受关注的新闻资讯平台,其背后的算法推荐机制一直是业界关注的...

SEO优化 2025-01-31 阅读1 评论0