개발 Q&A

제목 메일API를 통한 발송결과 값 받기
카테고리 PHP
글쓴이 주말생각 작성시각 2021/04/07 22:02:55
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 67   RSS

제목과 같이 메일API를 통해서 메일을 전송하고 발송 결과값을 받고 저장하는 것을 구현 중입니다.

발송을 보내는 것은 구현이 되었고, 발송결과를 받아서 db테이블에 저장을 하려고 합니다.(API는 다이렉트센드라는 회사 이용)

API매뉴얼을 읽어도 

[{"mail_id":123,"Result":"success","Success":1,"Failed":0,"IsNeedResend":false,"SendTime":"2020-09-04 10:10:23","Recipients":[{"Email":"receipt@test.kr","State":"2","SmtpCode":"250","SmtpMsg":""}]}] 

형태의 반환값을 POST로 받는다고 하는데 이것을 어떻게 받아야 하는지 감을 못 잡겠습니다.

코드이그나이터 방식으로 $this->input->post('State');형식으로 해도 받아지지 않고

단순 PHP문법인 $_POST['State']나 매뉴얼에 있는 코드인

$_POST = array_merge($_POST, (array) json_decode(trim(file_get_contents('php://input')), true));를 사용해도 받아오는 것이 되지 않습니다.

 

 다음글 .doc 파일 첨부했는데 mine type이 text/... (4)
 이전글 개발환경 조언 듣고 싶습니다. (1)

댓글

변종원(웅파) / 2021/04/08 08:28:38 / 추천 0

api 전송에 어떤 라이브러리를 사용하는건가요? curl?

사용하는 라이브러리에 전송후 리턴값 받는 부분 매뉴얼 참고하세요. 예를 들면 ci4에서는 request class(http://ci4doc.cikorea.net/incoming/incomingrequest.html)가 있어서  아래와 같은 형태로 json 데이터를 처리합니다.

$json = $request->getJSON();  

질문의 리턴값은 json입니다.

토끼깽깽 / 2021/04/08 09:55:35 / 추천 0

CASE 1.  발송 요청을 하고 요청에 대한 응답 및 결과값을 바로 받을 수 있는 경우

요청에 대한 응답 자체가 JSON 형식 [{"mail_id":123,"Result":"success","Success":1,"Failed":0,"IsNeedResend":false,"SendTime":"2020-09-04 10:10:23","Recipients":[{"Email":"receipt@test.kr","State":"2","SmtpCode":"250","SmtpMsg":""}]}]  이므로 파싱해서 사용.

 

CASE 2. 발송 요청을 하고 요청에 대한 응답을 받음,  다이렉트센드에서 스케쥴링 발송 후 별도의 응답을 보내주는 경우

발송요청을 하고 요청에 대한 응답만 처리, 예를들면 요청성공, 요청실패 같은... 요청시 콜백주소(응답을 받을 요청자의 서버 URL)를

보통은 미리 정해놓거나 요청할때 담아서 보내주면 처리 후 콜백URL로 응답을 해줌.

이후에  다이렉트센드에서 스케쥴링 처리(시간이 소요됨) 후 개별 처리 결과나 전체 처리 결과를 위해서 정한 콜백URL(POST방식이겠죠?) 로  JSON 형식 [{"mail_id":123,"Result":"success","Success":1,"Failed":0,"IsNeedResend":false,"SendTime":"2020-09-04 10:10:23","Recipients":[{"Email":"receipt@test.kr","State":"2","SmtpCode":"250","SmtpMsg":""}]}]  받아 되므로 처리 해주시면 됩니다.

 

대용량 발송 시스템이라면 아마 CASE 2 일 가능성이...^^

주말생각 / 2021/04/08 12:09:35 / 추천 0

토끼깽깽

말씀하신대로 CASE 2의 경우입니다. 위와 같이 json형식으로 post로 오면 지금까지는 json배열의 네임값을 알고 있어서

$this->input->post(''name);과 같이 받았는데, 이번 API는 배열에 네임값도 정해지지 않았고 json형식으로 와도 문자열로는 오는데

어떻게 받아야 하는지 도통 모르겠습니다. 일반적으로 $_POST로 하고 $_POST를 DB의 TB컬럼에 그대로 저장하려고 해도 안되네요. 애당초 값이 어떻게 오고 체크해야 하는지를 알아야하는데, 센스사의 문의글을 올려도 개발의 영역이라 답변이 힘들다고해서 명확히 알 수 없네요.

PureAni / 2021/04/08 14:41:04 / 추천 0

$_REQUEST 해보세요.

간혹가다가 METHOD 만 POST이고 GET으로 날라오는 경우도 있습니다.

주말생각 / 2021/04/08 15:20:21 / 추천 0
$_REQUEST로도 해보았습니다만 여전히 값을 받아오지 못하네요.
토끼깽깽 / 2021/04/08 17:19:58 / 추천 0

데이터를 받을때 name=value 형식이 아니라면 rawdata 일 수 있습니다.

일반적으로 $_GET, $_POST, $_REQUEST 는 name=value 형식의 값을 가져오는데 사용할 수 있을 것이고

rawdata 인 경우에는  file_get_contents("php://input") 같은 것을 사용해서 POST로 실어 보내는 body의 데이터를 가져올 수 있어요.

토끼깽깽 / 2021/04/08 17:22:35 / 추천 0
그리고 json 은 문자열의 값 형태일지라도 객체로 변환할 수 있으니 관련 내용은 찾아보시면 될 것 같습니다.
주말생각 / 2021/04/08 17:30:42 / 추천 0
감사합니다.