2017-05-25 37 views
0

我已經設置了一個基本的webhook php頁面,仿照條紋文檔和下面列出。當我從Stripe webhooks儀表板發送測試事件時,條帶響應「測試webhook發送成功」並帶有空白迴應。但是,輸出日誌文件沒有寫入,沒有發送電子郵件,也沒有任何記錄到http服務器錯誤日誌或php錯誤日誌。我的PHP版本是5.3.3。我究竟做錯了什麼?php webhook沒有響應條紋測試事件

<?php 
error_reporting(15); 
// Set your secret key: remember to change this to your live secret key in production 
// See your keys here: https://dashboard.stripe.com/account/apikeys 
require_once('vendor/autoload.php'); 

\Stripe\Stripe::setApiKey("secret_test_key"); 

$handle = fopen("webhook.log","a"); 

// Retrieve the request's body and parse it as JSON 
$input = file_get_contents("php://input"); 

$event_json = json_decode($input); 

// Do something with $event_json 
if (fwrite($handle, $event_json) === FALSE) { 
    mail("[email protected]","Cannot write to webhook.log",""); 
    echo "Cannot write to webhook.log"; 
    exit; 
} 

mail('[email protected]','Webhook Event',$event_json); 
header(':', true, 200); 
//http_response_code(200); // PHP 5.4 or greater 
?> 

回答

0

您有幾個潛在的問題。作爲一個快速的經驗法則,調試這個最好的方法是從觸發事件開始,你可以簡單地通過在瀏覽器中加載自己的webhook url來完成。然後你可以直接測試它,並確保它正在做你期望的事情。顯然有兩種可能性:

  1. 條紋沒有觸發您的網絡掛接處理程序因某種原因
  2. 您的處理程序無法正常登錄自己

後者第一:它可能是條紋觸發您處理程序,但它沒有成功記錄該事實。這意味着您的電子郵件日誌記錄和文件日誌記錄都失敗了。這實際上很有可能。使用郵件功能進行電子郵件記錄實際上是非常不可靠的,除非您知道它的工作原理。通過郵件功能發送的郵件會被大多數現代電子郵件系統(Gmail等)無聲地丟棄,除非您的DNS記錄已正確配置,而大多數人不這麼做。所以除非你確定你的郵件嘗試工作正常,否則它可能不是。如果您在嘗試寫入日誌文件時碰巧遇到權限問題(這對於新設置的服務器來說並不罕見),那麼您的日誌可能會失敗。檢查的最簡單方法是自己在瀏覽器中加載webhook URL。這樣你就知道它被觸發了,並且可以肯定地知道問題是不正確的日誌記錄還是Stripe沒有調用你的webhook。

如果您確定條帶未調用WebHook,則最有可能的罪魁禍首將是無效的HTTPS證書。您的webhook是否通過HTTPS連接(應該是)?如果是這樣,它是一個有效的證書?您可以告訴瀏覽器在瀏覽自己的站點時忽略無效證書,但如果遇到無效證書,條帶會拒絕發送請求。

如果以上都沒有修復它,那麼它將是更多挖掘的時間,但我會從這些開始:它們可能是最可能發生的問題。

+0

謝謝Conor。我也許應該提到我已經通過瀏覽器進行測試,並且日誌和電子郵件都可以工作。我也通過ngrok進行了測試並收到了json。使用http和https,條帶響應該測試成功。我還返回了一個條帶確認收到的500錯誤。我很困惑。 – user1142052

0

解決方案是$ event_json是一個對象,並且fwrite失敗,因爲它期望一個字符串不是對象。通過轉換爲一個數組然後序列化,我能夠寫入日誌併發送電子郵件。

$event_json = (array)json_decode($input); 
$event = serialize($event_json); 
+0

順便說一句,json_decode有一個設計用於返回數組而不是對象的標誌:'$ event_json = json_decode($ input,true)'。另外,當您將JSON寫入日誌文件時,您不必重新序列化它。你已經將它作爲一個字符串,因爲它原來是這樣:'fwrite($ handle,$ input)' –

+0

@conor明白了。謝謝 – user1142052