개발 Q&A

제목 메일API를 통한 발송결과 값 받기
카테고리 PHP
글쓴이 주말생각 작성시각 2021/04/07 22:02:55
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 7192   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
감사합니다.