plusfriend / auto_reply

플러스친구 자동응답 API
307 stars 92 forks source link

euc-kr환경에서 php로 문제시 디버깅 #488

Open SSangD opened 6 years ago

SSangD commented 6 years ago

안녕하세요 카카오톡 api형 스마트채팅에 관심이 있어

서버 구축 후 테스트를 진행한 결과 궁금한 점이 있어서 이렇게 글을 남깁니다.

일단 서버환경은 CentOS7 에 APM 설치하여 진행하고 있으며

이슈사항은 현재 서버가 euc-kr 기반으로 구축되어 있다는 점입니다.

우선 간단히 작성된 소스를 남겨보자면

keyboard.php에서는

==============================

$msg = "{ \"type\" : \"buttons\", \"buttons\" : [\"처음시작\", \"단가문의\"] }";

//echo iconv("euc-kr","utf-8",$msg); echo $msg;

==============================

charset을 맞추기 위해서

  1. 헤더값을 변경하였으나 실패 header("Content-Type: text/html; charset=UTF-8");
  2. HereDoc(<<<EOD)을 이용했으나 iconv가 적용되지 않아서 포기
  3. 결국 변수에 텍스트를 저장하여 iconv로 변환하여 출력 하여서 keyboard에서는 정상결과 값을 받았으나

message.php 소스에서는 keyboard에서 넘어오는 응답값을 체크하여

로직을 구현해야 하지만 정상적으로 형변환이 되지 않아서인지

마지막에 echo에 정상적으로 찍히는 값이 없어서인지

정상적인 동작이 되지 않았습니다.

다른 빌더나 url과 파라메터를 이용하여 값을 보내고 디버깅을 하고 싶었으나

message 페이지에 대해 정확한 디버깅 방법을 알 수가 없더군요 ㅠ

혹시 제가 시도한 방법중에 잘못된 방법이 있을까요? 아니면 디버깅 할 수 있는 방법을 알려주시면

금방 해결 할 수 있을듯 싶습니다 ㅠ

==============================

//header("Content-Type: text/html; charset=UTF-8"); => 실패

//$data = json_decode(mb_convert_encoding( file_get_contents('php://input'), 'HTML-ENTITIES', "UTF-8")); => 실패 //file_get_contents가 정상작동하지 않는다면 $_POST를 이용하여 데이터를 받을 생각 $data = json_decode(file_get_contents('php://input'));

// 받은 요청에서 content 항목 설정 $content = $data["content"];

// 버튼 처리 if( $content == "처음시작" ) { $msg = "{ \"message\": { \"text\":\"기본 단가는 32만원이며 추가적인 할인이 가능합니다.\" }";

echo iconv("euc-kr","utf-8",$msg);

}

==============================

카카오톡에서 아무런 메시지도 뜨지 않아요 ㅠ 오류코드나 어떠한 멘트도 오지 않네요 ㅠ

danics7 commented 6 years ago

기본적으로 카카오톡 자동응답 API에서 엔드포인트는 example.com/message 가 되어야합니다. example.com/message.php가 엔드포인트라면 이 API는 동작하지 않으니, 한번 확인하셔야 할 것 같아요

SSangD commented 6 years ago

@danics7 현재 message로 값은 넘어오나 캐릭터 셋이 깨지는 부분이 문제여서요 ㅎㅎ

keyboard.php도 keyboard만으로도 호출 되도록 설정되어서 말씀해주신 문제는 아닌거 같아요.

danics7 commented 6 years ago

아 그러셨구나... ㅠ 혹시 캐릭터셋이 깨진다는게 출력부에서 그런건가요? echo 로 값을 확인하기 이전에 echo "<meta charset='utf-8'>"; 을 먼저 해보시면 해결이 될까요? 아니면 그 값( file_get_contents('php://input') 으로 받은 값 )을 그대로 로그에찍어보면 그 로그에서조차도 깨지나요?

SSangD commented 6 years ago

@danics7

header 함수를 이용해서 페이지에 캐릭터 셋도 변경해보았고

file_get_contents 함수를 mb_convert_encoding도 해보았는데 결과값이 찍히질 않아서

깨지는 글씨조차 표시되지 않더라구요

만약에 뭐 깨지는 글씨라도 표시가되면 디버깅을 해볼텐데 따로 해볼만한 접근법이 떠오르지

않아서 글을 남겼었어요 ㅎㅎ 지금은 저 부분을 보고 있지 않게되서 긴가민가 하지만요..ㅋㅋ

humit0 commented 6 years ago

일단 PHP에서는 '와 "를 구분해서 사용하셔야 합니다. 지금 $msg 변수를 보면 "를 이용해서 문자열을 묶어 놓으셨는데, "는 멀티 라인 문장을 허용하지 않습니다. 그래서 '를 사용하셔야 합니다.

추가로 디버깅의 경우에는 Postman과 같이 REST client 툴을 사용하시면 됩니다.