2017-05-25 21 views
0

ストライプのドキュメントでモデル化され、以下にリストされているように、基本的なwebhook PHPページをセットアップしました。ストライプwebhooksダッシュボードからテストイベントを送信すると、ストライプはブランク応答で「Test webhook sent successfully」に応答します。ただし、出力ログファイルには書き込まれません。電子メールは送信されず、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. あなたのハンドラが正しく自体をログに記録されていない

後者最初:そのストライプがトリガされることが考えられ、あなたのその事実をうまく記録していません。これは、あなたのメールロギングとファイルロギングの両方が失敗していることを意味します。それは実際にはかなり可能です。メール機能を使った電子メールのロギングは、実際に動作していることがわからない限り、実際には非常に信頼性がありません。あなたのDNSレコードが正しく設定されていない限り、ほとんどの人はそうでない限り、メール機能を使って送信されたメールは最新の電子メールシステム(gmailなど)によって静かに削除されます。あなたのメールの試みが適切に機能しているかどうか分からない限り、おそらくそうではありません。新しく設定されたサーバーでは一般的ではないログファイルに書き込む際にアクセス権の問題が発生した場合でも、ログに障害が発生している可能性があります。これを確認する最も簡単な方法は、Webhook URLをブラウザで自分でロードすることです。そうすれば、それが引き起こされていることが分かり、問題が不適切なログであるか、ストライプがウェブフックに電話していないかどうかを確実に知ることができます。

ストライプがWebHookを呼び出さないことを確認した場合、最も可能性の高い原因は無効なHTTPS証明書になります。 WebhookはHTTPS経由で接続されていますか?もしそうなら、それは有効な証明書ですか?自分のサイトを参照するときに無効な証明書を無視するようにブラウザに指示することはできますが、ストライプは無効な証明書が見つかると要求の送信を拒否します。

上記のいずれにも該当しない場合は、それ以上の掘り下げが必要になりますが、それから始めるのはおそらく最も問題の可能性が高いです。

+0

Thank you Conor。おそらく私はブラウザを通してテストし、ロギングと電子メールの両方がうまくいったと述べていたはずです。私はngrokを通してテストし、jsonを受け取りました。 httpとhttpsの両方で、ストライプはテストが成功したと応答します。私はStripeが受け取ったと認めた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

関連する問題