2017-12-12 9 views
0

나는 PHP를 활용하여 슬랙과 Filemaker 사이의 통합 작업을하고 있습니다. 나는 codeson이 json 요청을 기반으로 Filemaker에서 레코드를 생성하는 데 성공했으며, Challenge 키를 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"]; 
} 

?> 

도 OK (200)의 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 문에 챌린지 에코를 포함했습니다. 그렇게 한 후에 200 OK는 성공적으로 통과되었습니다. 여기

나를 위해 문제를 해결 내가 사용하는 코드입니다 :

$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); 
}