国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

本地開發如何測試Webhook

開發 后端
Webhook 可用于外部系統通知你的系統發生了某個事件或更新。可能最知名的 Webhook 類型是支付服務提供商(PSP)通知你的系統支付狀態有了更新。

[[273544]]

 Webhook 可用于外部系統通知你的系統發生了某個事件或更新。可能最知名的 Webhook 類型是支付服務提供商(PSP)通知你的系統支付狀態有了更新。

它們通常以監聽的預定義 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 是我們為開發設置定義的本地虛擬主機。它無法從外部世界進入。

  1. <?php
  2. /*
  3. * This file creates a payment and tells the PSP what webhook URL to use for updates
  4. * After creating the payment, we get a URL to send the customer to in order to pay at the PSP
  5. */
  6. $payment = [
  7. 'order_id' => 123,
  8. 'amount' => 25.00,
  9. 'description' => 'Test payment',
  10. 'redirect_url' => 'http://webhook.example.vagrant/redirect.php',
  11. 'webhook_url' => 'http://webhook.example.vagrant/webhook.php',
  12. ];
  13.  
  14. $payment = $paymentProvider->createPayment($payment);
  15. header("Location: " . $payment->getPaymentUrl());

第二個文件:webhook.php。此文件等待 PSP 調用以獲得有關更新的通知。

  1. <?php
  2. /*
  3. * This file gets called by the PSP and in the $_POST they submit an 'id'
  4. * We can use this ID to get the latest status from the PSP and update our internal systems afterward
  5. */
  6. $paymentId = $_POST['id'];
  7. $paymentInfo = $paymentProvider->getPayment($paymentId);
  8. $status = $paymentInfo->getStatus();
  9.  
  10. // Perform actions in here to update your system
  11. if ($status === 'paid') {
  12. ..
  13. }
  14. elseif ($status === 'cancelled') {
  15. ..
  16. }

我們的 webhook URL 無法通過互聯網訪問(請記住它:webhook.example.vagrant)。因此,PSP 永遠不可能調用文件 webhook.php,你的系統將永遠不會知道付款狀態,這最終導致訂單永遠不會被運送給客戶。

幸運的是,ngrok 可以解決這個問題。 ngrok 將自己描述為:

ngrok 通過安全隧道將 NAT 和防火墻后面的本地服務器暴露給公共互聯網。

讓我們為我們的項目啟動一個基本的隧道。在你的環境中(在你的系統上或在 VM 上)運行以下命令:

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

閱讀其文檔可以了解更多配置選項:https://ngrok.com/docs

會出現這樣的屏幕:

ngrok 輸出

我們剛剛做了什么?基本上,我們指示 ngrok 在端口 80 建立了一個到 http://webhook.example.vagrant 的隧道。同一個 URL 也可以通過 http://39741ffc.ngrok.iohttps://39741ffc.ngrok.io 訪問,它們能被任何知道此 URL 的人通過互聯網公開訪問。

請注意,你可以同時獲得 HTTP 和 HTTPS 兩個服務。這個文檔提供了如何將此限制為 HTTPS 的示例:https://ngrok.com/docs#bind-tls

那么,我們如何讓我們的 webhook 現在工作起來?將 payment.php 更新為以下代碼:

  1. <?php
  2. /*
  3. * This file creates a payment and tells the PSP what webhook URL to use for updates
  4. * After creating the payment, we get a URL to send the customer to in order to pay at the PSP
  5. */
  6. $payment = [
  7. 'order_id' => 123,
  8. 'amount' => 25.00,
  9. 'description' => 'Test payment',
  10. 'redirect_url' => 'http://webhook.example.vagrant/redirect.php',
  11. 'webhook_url' => 'https://39741ffc.ngrok.io/webhook.php',
  12. ];
  13.  
  14. $payment = $paymentProvider->createPayment($payment);
  15. header("Location: " . $payment->getPaymentUrl());

現在,我們告訴 PSP 通過 HTTPS 調用此隧道 URL。只要 PSP 通過隧道調用 webhook,ngrok 將確保使用未修改的有效負載調用內部 URL。

如何監控對 webhook 的調用?

你在上面看到的屏幕截圖概述了對隧道主機的調用,這些數據相當有限。幸運的是,ngrok 提供了一個非常好的儀表板,允許你檢查所有調用:

我不會深入研究這個問題,因為它是不言自明的,你只要運行它就行了。因此,我將解釋如何在 Vagrant 虛擬機上訪問它,因為它不是開箱即用的。

儀表板將允許你查看所有調用、其狀態代碼、標頭和發送的數據。你將看到應用程序生成的響應。

儀表板的另一個優點是它允許你重放某個調用。假設你的 webhook 代碼遇到了致命的錯誤,開始新的付款并等待 webhook 被調用將會很繁瑣。重放上一個調用可以使你的開發過程更快。

默認情況下,儀表板可在 http://localhost:4040 訪問。

虛擬機中的儀表盤

為了在 VM 中完成此工作,你必須執行一些額外的步驟:

首先,確保可以在端口 4040 上訪問 VM。然后,在 VM 內創建一個文件已存放此配置:

  1. web_addr: 0.0.0.0:4040

現在,殺死仍在運行的 ngrok 進程,并使用稍微調整過的命令啟動它:

  1. 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

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2023-11-27 13:41:00

Kubernete本地調試

2017-01-13 14:32:50

Azurewebhoo自動化AzureWebhook

2018-04-04 14:52:04

2016-10-28 08:39:23

WebHook運維工具

2023-10-07 08:49:56

測試驅動開發Xunit 框架

2011-06-24 16:19:59

QT web Webkit

2011-05-30 17:11:08

測試策略

2023-12-11 08:25:15

Java框架Android

2021-05-18 05:40:27

kubebuilderwebhook進階

2021-05-07 09:31:33

KindK8s Operator

2017-01-01 09:43:40

2011-05-26 17:28:48

軟件本地化測試

2011-09-23 09:46:09

軟件項目

2009-09-07 08:37:44

VMware測試和開發

2016-09-08 23:28:06

2010-10-12 09:17:42

本地代碼Native CodeNative Clie

2018-03-26 14:25:55

KubernetesSkaffold命令

2011-06-08 17:07:55

本地化測試

2023-04-24 13:37:04

Unity游戲開發

2020-05-20 08:57:14

JavaScript讀取文件開發
點贊
收藏

51CTO技術棧公眾號

亚洲精品美女久久久久| 国产精品久久一区| 日本精品在线| 亚洲三级免费电影| 成品人视频ww入口| 麻豆精品国产91久久久久久| 国产二区一区| 中文字幕一区二区三区乱码图片 | 一区av在线播放| 亚洲五月天综合| 成人av网站在线观看免费| 综合久久国产| 国内精品伊人久久久久av一坑 | 另类小说第一页| 豆国产96在线|亚洲| 欧美一区二区三区在线播放| 亚洲每日在线| 国产免费一区二区三区| 伊人成人在线| 欧美一级二级三级九九九| 久久午夜精品| 免费观看中文字幕| 成人午夜在线免费| 久久久久国产精品熟女影院| 337p粉嫩大胆噜噜噜噜噜91av| 国产黄色激情视频| 91免费看`日韩一区二区| 欧美精品色婷婷五月综合| 99久久国产免费看| 污网站免费在线| 亚洲高清在线精品| 国产色a在线| 91精品国产色综合久久ai换脸| 美女航空一级毛片在线播放| 日韩久久免费视频| 美国十次综合久久| 538国产精品视频一区二区| 欧美性感美女一区二区| 国产精品免费视频一区二区| 欧美a一区二区| 美女日批免费视频| 亚洲欧美激情视频在线观看一区二区三区 | 欧美成人一级| 欧美中文在线观看| 欧美一区国产在线| 色播亚洲婷婷| 国产日韩av一区| 日韩精品视频无播放器在线看| 91精品国产综合久久久蜜臀图片 | 色哟哟精品丝袜一区二区| 国产精品第一页在线| 精品网站aaa| 国产一区二区三区精品久久久| 青青九九免费视频在线| 日韩欧美亚洲成人| 色网站免费在线观看| 色婷婷激情综合| а√在线中文在线新版| 国产区视频在线观看| 欧美在线999| 黄毛片在线观看| 久久久久在线观看| 激情六月综合| 亚洲自偷自拍熟女另类| 同产精品九九九| 另类图片综合电影| 国产精品99导航| 蜜臂av日日欢夜夜爽一区| 香港日本韩国三级网站| 欧美日韩日日骚| 天堂va欧美ⅴa亚洲va一国产| 91久久久久久久久久久久久| 韩国三级电影一区二区| 麻豆影视在线观看| 亚洲乱码一区二区| 91成人国产| 国产中文字幕在线免费观看| 欧亚洲嫩模精品一区三区| 伊人久久大香线蕉综合影院首页| 91免费国产网站| 99re8在线精品视频免费播放| 黄色片免费在线| 久久久999国产精品| 欧美在线黄色| 国产精品一区在线看| 一本一本久久a久久精品综合麻豆| 欧美日韩精品一区| 俺来也官网欧美久久精品| 欧美日韩国产bt| av在线播放国产| 欧美激情视频一区二区| 久久国产中文字幕| 热99这里只有精品| 欧美性受极品xxxx喷水| 97久久综合区小说区图片区| 久久精品一区二区三区不卡免费视频| 国产亚洲短视频| 77thz桃花论族在线观看| 成人黄色午夜影院| 国产日产精品1区| 成人小电影网站| 极品日韩久久| 一区精品在线播放| 视频91a欧美| 99re99热| 欧美精品粉嫩高潮一区二区| 成人亚洲一区| 国产无遮挡又黄又爽免费软件| 亚洲天堂男人天堂女人天堂| 中文国产一区| 日本一区二区三区在线观看视频| 欧美人交a欧美精品| 国产成人亚洲综合色影视| 青草在线视频在线观看| 国产另类第一区| 精品露脸国产偷人在视频| 91久久精品无嫩草影院 | 久久久久99精品成人片| 欧美电影精品一区二区| 一区二区三区午夜视频| 免费男女羞羞的视频网站主页在线观看 | 国产高清精品久久久久| av在线小说| 日韩精品国内| 91精品国产91综合久久蜜臀| 亚洲无线一线二线三线区别av| 四虎影院在线播放| 91免费看网站| 欧美日韩视频在线一区二区 | 99精品视频在线播放观看| 久草免费在线色站| 明星裸体视频一区二区| 91精品国产欧美日韩| 视频一区二区国产| 秋霞伦理一区| 国产精品69久久久| 久久成人这里只有精品| 亚洲国产电影在线观看| 成人中文字幕视频| 艹b视频在线观看| 国产成人精品在线观看| 精品国产精品自拍| 亚洲高清成人| 久久亚洲资源| 九九九九免费视频| 欧美亚洲在线观看| 亚洲国产精品精华液网站| 欧美日韩三级电影在线| 成人精品一区二区三区免费| 四虎永久在线| 亚洲一区二区久久久久久| 亚洲免费看黄网站| 欧美日韩精品一区二区| 在线不卡欧美| 性爱视频在线播放| 成人手机视频在线| 亚洲人成亚洲人成在线观看| 99久久精品情趣| 日韩激情电影免费看| 快播电影网址老女人久久| 国产一级不卡毛片| 国产精品成人v| 天天操天天色综合| 色愁久久久久久| 污视频网站免费看| 高清日韩一区| 亚洲男人天堂网站| 国产精品毛片大码女人| 亚洲成人日韩| av资源中文在线| 国产日韩成人内射视频| 国产日韩精品电影| 精品国产91洋老外米糕| 国产欧美日韩麻豆91| 亚洲色图88| 国产极品人妖在线观看| 免费av观看网址| 91精品综合视频| 亚洲欧洲偷拍精品| 亚洲一区免费观看| 日本sm残虐另类| 国产精品18hdxxxⅹ在线| 日本成人一区二区三区| 日韩一级片一区二区| 国产精品一区二区三区久久久| 亚洲福利在线观看| 日韩一区有码在线| 蜜桃av一区二区三区电影| 欧美freesex8一10精品| 国产精品一级伦理| 精品欧美一区免费观看α√| 91中文在线观看| 久久中文字幕一区| 欧美日韩在线播| 国产精品视频你懂的| 亚洲免费影视| 久久不见久久见免费视频7| aa级大片免费在线观看| 一本免费视频| 日本午夜激情视频|