2017-12-12 9 views
0

私はPHPを利用したSlackとFilemakerの統合に取り組んでいます。私は、コードがFileMakerでjsonリクエストに基づいてレコードを作成するのに成功しており、チャレンジキーをSlackに返すことも問題ありません。スラックイベントPHPレスポンス

ただし、チャレンジを戻している間、Slackに200 OKというヘッダー応答を渡すのに問題があります。それは、どちらか一方でなければならないように見えます。

私はHTTPヘッダーをコード内の別の領域に移動しようとしましたが、これまでのところ成功しませんでした。ここで

は、現在のコードです:

<?php 



$data = json_decode(file_get_contents('php://input'), true); 

if (!isset($data["challenge"])) { 
    $body = $_SERVER['HTTP_X_SLACK_RETRY_REASON']; 


    require_once ('Filemaker.php'); 

    //$body = file_get_contents('php://input'); 




    $fm = new Filemaker(); 
    $fm->setProperty('database', ''); 
    $fm->setProperty('username', ''); 
    $fm->setProperty('password', ''); 



    $command = $fm->newPerformScriptCommand('PHP_RESPONSE', 'script', $body); 
    $result = $command->execute(); 

} 

else { 

    header("Content-Type: text/plain"); 
    header('X-PHP-Response-Code: 200', true, 200); 
    echo $data["challenge"]; 
} 

?> 

も200 OKのHTTPヘッダーを戻しながらコードは、スラックのためのチャレンジコードを返すようにするために、私は期待する結果があります。

現在、私はSlackから "http_error"というエラーが発生していることがわかります。これは、ヘッダーが正常に返されていないという問題を引き起こしています。

何が間違っているかについてのアイデアや、進めるべき正しい方向への提案は非常に高く評価されます。

答えて

0

documentationは、実際にはこのトピックについて少し矛盾しています。プランテキストでチャレンジに応答できると主張していますが、例ではx-www-form-urlencodedと表示されています。

安全な側にするには、チャレンジをJSONとして返すようにしてください。それは私にとって完璧に機能します。 HTTP 200コードを明示的に設定する必要もありません。

例コード:

$message = [ 
    "challenge" => $data["challenge"] 
]; 
header('content-type: application/json'); 
echo json_encode($message); 
+0

コードの変更は、それ自体で助けにはならなかったが、それは私の最終的な解決に役立ったかもしれないので、私は規則を採用しました。 – MBermejo

0

イベントを送信するときに、イベントのたるみのためのパラメータとして「挑戦」を送信しないため、問題が発生しました。 「チャレンジ」をエコーするのは、イベントAPIのURLを最初に設定するときにのみ必要です。

チャレンジ変数が存在する場合にのみトリガーするifステートメントにチャレンジエコーを入れました。そうすることで、200OKは正常に終了しました。ここで

が私のために問題を解決し、私が使用したコードは次のとおりです。

$data = json_decode(file_get_contents('php://input'), true); 
if (isset($data["challenge"])) { 
    $message = [ 
     "challenge" => $data["challenge"] 
    ]; 

    header('Content-Type: application/json'); 
    echo json_encode($message); 
} 
関連する問題