제목 | 메일API를 통한 발송결과 값 받기 | ||
---|---|---|---|
카테고리 | PHP | ||
글쓴이 | 주말생각 | 작성시각 | 2021/04/07 22:02:55 |
|
|||
제목과 같이 메일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
|
토끼깽깽
/
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
감사합니다.
|
api 전송에 어떤 라이브러리를 사용하는건가요? curl?
사용하는 라이브러리에 전송후 리턴값 받는 부분 매뉴얼 참고하세요. 예를 들면 ci4에서는 request class(http://ci4doc.cikorea.net/incoming/incomingrequest.html)가 있어서 아래와 같은 형태로 json 데이터를 처리합니다.
질문의 리턴값은 json입니다.