2014-12-31 69 views
1

我想讓我的應用程序接受和閱讀條紋webhooks,但我有一個有點不可預知的404問題。我有一個處理來自Stripe的webhook請求的PHP文件。它絕對存在。我可以導航到它,一般來說,我在網絡掛接細節成功的200響應時在文件中的唯一代碼:條紋webhooks越來越404

$input = @file_get_contents("php://input"); 
$event_json = json_decode($input); 
http_response_code(200); 

然而,當我添加更多的代碼(和我添加代碼太複雜到這裏發佈)我開始獲得404s。我已經驗證了額外的代碼不會在錯誤日誌中產生任何致命錯誤甚至是警告/聲明。

此外,使用相同的代碼,當我從https://dashboard.stripe.com/account/webhooks發送多個測試webhook時,其中大約一半會說「測試webhook發送成功」,大約一半會說「測試webhook錯誤:404」。

有誰知道什麼可能會導致這些404s?內存問題?未記錄的錯誤(不知道如何發生,但誰知道)? DNS錯誤?條紋是爲了讓我瘋狂?

謝謝。

+0

你說你「可以導航到它」,但條紋webhooks POST請求不GET,所以聽起來不正確。另外,'http_response_code'需要PHP 5.4+,所以確保你至少運行了這個。 –

+0

@ Pier-LucGendreau謝謝。您使用POST的建議爲我解決了它。我以前使用GET。 –

回答

0

原來,這是一個DNS錯誤。我有一個分佈式主機環境,3個IP地址中的2個返回404。但是我在本地鎖定了1個工作的IP地址。將我的A記錄更改爲一個可用的IP(因爲相關站點是開發站點,而不是活動站點,並且不需要多次回退)並且解決了問題。愚蠢的錯誤。

1

如果您可以使用webhook保存您的帳戶設置,您可以運行測試費用,轉至https://dashboard.stripe.com/events,打開活動並進入底部的webhook詳細信息。這會讓你看到你的服務器發回給Stripe的響應(如果有的話)。

如果那裏沒有任何有用的東西,我會盡量減少你的完整代碼,直到你有儘可能小的例子,但仍然404s。這可能會使問題更容易找到,如果不能,您可以發佈該代碼。

1

這是我工作的webhook的代碼。當被Stripe擊中時,我的總是會產生200點。希望這是有幫助的:

include_once('path/to/Stripe/Stripe.php'); 

// Set your secret key: remember to change this to your live secret key in production 
if($_SERVER['HTTP_HOST'] == 'example.com') 
{ 
    Stripe::setApiKey("sk_live_my_key"); 
} 
else 
{ 
    Stripe::setApiKey("sk_test_my_key"); 
} 
// Retrieve the request's body and parse it as JSON 
$body = @file_get_contents('php://input'); 
$event_json = json_decode($body, true); 

if(!empty($event_json)) 
{ 
    //do stuff... 
    echo '<pre>'; print_r($event_json); die(); 
} 

die('success'); 

值得注意的是,我確實有死在最後。