개발 Q&A

제목 [자체완료]업체측과 request 문제....
카테고리 PHP
글쓴이 페이 작성시각 2017/05/12 10:20:29
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 11886   RSS

가비아에 문의한 결과 sms업체 쪽에서 주는 패킷을 확인 후 문제원인을 확인 했습니다.

 

문제는 도메인 처리를 위한 정규식때문이 있네요..

 

웹쪽에서나 php curl 쪽에서나 포트를 명시하더라도 내부처리로 인해 도메인에 포트는 생략된채 넘어왔었고,

자바에서 httpClient로 처리할시에는 포트까지 확실히 명시되어 저희쪽 index를 탔던게 화근이였습니다.

 

결국에는 호스트를 찾지 못했었던거죠..

그래서 정규식 변경하여 처리 후 sms 후처리까지 완료됐네요..

 

답변 달아주신 모든분들 감사드립니다..^^

 

############################

 

카테고리를 php로 할지 서버로 해야할지 모르겟네요 ㅎㅎ;;

 

sms업체와 계약 후 api 연동 중에 문제가 발생하였는데요...

 

저희쪽에서는 curl로 값을 넣기고, response 처리 후 sms업체측에서 문자 발송 정보를 저희쪽에 request 하여 그 결과값을 저희쪽으로 보내주고 있습니다.

 

여기에서 업체가 보내는 정보를 저희측에서 request하는데에서 문제가 발생하였습니다.

 

업체측에서는 저희쪽에서 지정한 url을 java httpClient를 이용하여 get방식으로 보내고 있습니다. 결과는 200

[로그]

183.***.***.*** - - [12/May/2017:09:31:00 +0900] "GET /SMS/Reception?msgid=10018000093600216160&to_country=82&to=1020552355&err_code=1000&network=45008&rescnt=0&sent_date=20170512092601 HTTP/1.1" 200 12 "-" "Apache-HttpClient/4.5 (Java/1.7.0_91)" www.****.co.kr:80 "285 174" KR

 

저희쪽 처리 형태는 간단하게 get으로 보낸 파라메터를 db저장후 xml로 찍어주기만 하면되는 형태입니다.

    public function Reception()
	{
		$aInput = array( 	'msgid'				=> $this->input->get('msgid')
						,	'to'				=> $this->input->get('to')
						,	'to_country'		=> $this->input->get('to_country')
						,	'request_err_code'	=> $this->input->get('err_code')
						,	'network'			=> $this->input->get('network')
						,	'rescnt'			=> $this->input->get('rescnt')
						,	'sent_date'			=> $this->input->get('sent_date')
						,	'REG_IP'			=> $this->input->ip_address()
		);
		/*문제가 발생하여 파라메터값을 모두 로그파일로 저장*/
		$this->logs($aInput);
		
		$this->load->model('www://common/CommonModel_v1', 'CommonModel');
		$bRet = $this->CommonModel->reqSmsLog($aInput);  

		if($bRet){
			
			header("Content-type: application/xml; charset=utf-8");
			echo '<?xml version="1.0" encoding="utf-8"?>';
			echo '<report_response>';
			echo '    <msgid>'.$aInput['msgid'].'</msgid>';
			echo '    <to_country>'.$aInput['to_country'].'</to_country>';
			echo '    <to>'.$aInput['to'].'</to>';
			echo '</report_response>';
		
		}
		
	}

현재 가비아 웹호스팅을 사용하고 있고, 가비아측에서는 서버쪽 문제에는 없다는 식으로 응대하고있습니다.

로그에도 분명 200으로 찍히니 그렇게 말하는거같기도 하구요..

sms업체측에서도 보내지는 로그가 저희쪽 서버에 남으니 알아보겠다고는 하지만 적극적이지는 않은거같습니다..ㅜㅜ

 

참고로 

http://www.******.co.kr/SMS/Reception?msgid=10018000093600216160&to_country=82&to=1020552355&err_code=1000&network=45008&rescnt=0&sent_date=20170512092601

을 브라우저를 통하여 들오면 로그도 남고 db처리도 되고 있습니다...

브라우저 외에도 서버쪽에서 curl을 통하여 위 경로를 찍어도 정상 처리가 되고 있습니다.

 

어제오늘 문제를 계속 찾아보고는 있지만..

도무지 알수가 없네요...

 

그래서 염치 불구하고 문의드립니다..

 

 

 다음글 CodeIgniter 를 localhost 에 등록하려... (3)
 이전글 JUI차트 써보신분 계신가요? (1)

댓글

한대승(불의회상) / 2017/05/12 10:59:17 / 추천 0

로직상으로 보면 $bRet 값에 따라 XML이 출력이 안될수도 있을것 같은데

$bRet 값을 디버깅 해보세요.

페이 / 2017/05/12 11:06:57 / 추천 0

#한대승(불의회상)

$bRet 와는 무관하게 13 라인에 있는 LOG에 조차 흔적이 없습니다.

        public function reqSmsLog($arrayParams){
		
		$sql = "
 				UPDATE TB_SMS_LOG SET
 					request_err_code 	= ?
 				,	network 			= ?
 				,	rescnt 				= ?
 				,	sent_date 			= ?
				WHERE msgid 		 	= ?
 					
					
 		";
 		
		$aBindParams = array(
							$arrayParams['request_err_code']
						,	$arrayParams['network']
						,	$arrayParams['rescnt']
						,	$arrayParams['sent_date']
						,	$arrayParams['msgid']
		);
		
		$bResult = $this->db->query($sql,$aBindParams);
		
		return $bResult;
		
	}

상위와 같이 처리하고 있어 db update 실패시에는 말씀하신대로 기록이 없을수도 있지만..

그렇다 하더라도 log는 남아 있어야하는데.. log 조차 남지 않고 있어요

kaido / 2017/05/12 11:12:55 / 추천 0

아파치 로그도 확인해 보세요

접속 로그는 남을 테니.

$this->logs() 해당 기능이 무결하다는 것을 증명해야 합니다.

페이 / 2017/05/12 11:18:05 / 추천 0

#kaido

[로그]

183.***.***.*** - - [12/May/2017:09:31:00 +0900] "GET /SMS/Reception?msgid=10018000093600216160&to_country=82&to=1020552355&err_code=1000&network=45008&rescnt=0&sent_date=20170512092601 HTTP/1.1" 200 12 "-" "Apache-HttpClient/4.5 (Java/1.7.0_91)" www.****.co.kr:80 "285 174" KR

이게 아파치 로그입니다...

보시다 시피 status 200 으로 되어 있어요..

이러니 제가 참 난감한 상태에요..

kaido / 2017/05/12 12:23:04 / 추천 0

아차피 로그가 남았는데 logs 함수가 작동 안했다는 것은 결론적으로 logs 함수가 결함이 있다는 것밖에 안됩니다.

테스트 해보셔야 할것 같습니다.

페이 / 2017/05/12 12:29:52 / 추천 0

#kaido

        public function logs($aInput){

		$filepath = ZS_BATCH_LOG_PATH.'/sms-log'.EXT;
		$message  = '';

		if ( ! file_exists($filepath))
		{
			$message .= "<"."?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed'); ?".">\n\n";
		}

		if ( ! $fp = @fopen($filepath, FOPEN_WRITE_CREATE))
		{
			return FALSE;
		}
			
			$inCnt = count($aInput);
			$i = 0;
		foreach ($aInput as $key => $value) {
			$i++;
			$message .= $level.' - '.date('Y.m.d H:i:s'). ' --> key::'.$key.' |||| value :: '.$value."\n";
			if($inCnt <= $i){$message .="\n";}
		}	

		flock($fp, LOCK_EX);
		fwrite($fp, $message);
		flock($fp, LOCK_UN);
		fclose($fp);

		@chmod($filepath, FILE_WRITE_MODE);
		return TRUE;
		
	}

해당 로그 함수입니다..

꽤 오랫동안 쓰던 로그기록함순데 문제가 있을까싶어요 ...

 - 2017.05.12 10:31:54 --> key::msgid |||| value :: 10018000093600216150
 - 2017.05.12 10:31:54 --> key::to |||| value :: 1020552355
 - 2017.05.12 10:31:54 --> key::to_country |||| value :: 82
 - 2017.05.12 10:31:54 --> key::request_err_code |||| value :: 1000
 - 2017.05.12 10:31:54 --> key::network |||| value :: 45008
 - 2017.05.12 10:31:54 --> key::rescnt |||| value :: 0
 - 2017.05.12 10:31:54 --> key::sent_date |||| value :: 20170511162236
 - 2017.05.12 10:31:54 --> key::REG_IP |||| value :: 211.43.***.***

 

웹 또는 curl로 처리 시에는 이런식으로 쌓이고 있습니다..

 

 

한대승(불의회상) / 2017/05/12 12:46:37 / 추천 0
log_message() 함수를 사용하여 각 Step별로 어디까지 실행이 되는지 확인해 보세요.
변종원(웅파) / 2017/05/12 12:48:40 / 추천 0

단계별로 echo로 메세지 넣어서 어디서 걸리는지 체크해보세요.

아파치로그에 있는데 작동 안한다는 것은 작성하신 프로그램에 문제가 있거나 파일명규칙이 틀려서 컨트롤러를 못찾거나입니다.

/SMS/ 가 디렉토리인가요? 컨트롤러인가요? ci인가요? 일반 php인가요?

적어주신 소스로는 ci가 아닌 일반 함수형태인데 주소체계는 프레임워크네요.

정보가 부족합니다.

페이 / 2017/05/12 12:58:18 / 추천 0

#한대승(불의회상) 

log_message() 처리는 시도해보도록 하겠습니다.

#변종원(웅파) 

현재 echo로 찍을수 없는 형태입니다..

request 는  sms업체측 자바에서 실행되고 있어서 echo로 찍을시에는 확인이 불가능합니다.

그래서 log함수를 따로 처리해놓았던것이구요.

그리고 SMS 클래스(컨트롤러) 명이고 , Reception은 함수명입니다.

기본 구조는 CI이 이긴한데 내부를 제가 원하는 방식대로 대부분 수정해놓은 상태입니다.

 

제가 의심 하는 부분은 가비아측쪽입니다.

해당 로직이 웹 또는 php cUrl을 사용시 정상 처리된다는 것은 프로그램상에 문제가 없다고 느껴지기때문이거든요..

SMS업체쪽에서는 자바를 사용해서 request를 하고 있고, 포트를 반드시 명시해야하는 상황이라고 전해들었습니다.

 

이러한 부분에서 웹호스팅시에 중간에서 가로채는 것이 있지 않을까 하고 추측만 하고 있습니다..