본문 바로가기
Program/PHP

우체국 계약택배 택배접수 API 연동 - PHP

by 너부리공작소 2020. 5. 29.
반응형

우체국 계약택배 택배접수 API 연동

우체국 계약택배를 이용해 택배 접수 API 연동작업을 진행한다. 

연동 절차는 

1. 데이터 암호화

2. 고객번호 조회

3. 계약승인번호 조회

4. 접수신청(픽업요청)

4-2. 접수신청 확인

4-3. 접수신청 취소

로 진행한다. 

 

우체국 택배신청(접수) api의 경우 암호화가 필요한데 우체국에서 제공하는 암호화 파일을 이용해 데이터를 암호화해서 통신해야 한다. 

우체국에서 제공하는 예제 파일에서는 html 문서상에서 암호화할 코드를 form 으로 전달해서 암호화 한 후 전송하는데 실제 작업에서는 굳이 필요하지 않으므로 해당파일을 include 하여 사용하였다. 

우체국 api 데이터 전송은 SEED128 함수를 통해 보안키와 데이터를 암호화 하여 우체국 api 서버로 curl을 이용해 전송하고 데이터를 받았다. 

우체국 api를 이용해 택배신청(접수)를 하기 위해서는 고객번호/계약승인번호가 필수항목이기 때문에 고객번호/계약승인번호를 받아오는 절차를 진행해야 한다. 

 

get방식으로 데이터를 주고받기 위해 curl 을 처리하기 위한 함수를 설정했다. 

function get($url, $params=array()) 
{ 
    $url = $url.'?'.http_build_query($params, '', '&');
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $response = curl_exec($ch);
    curl_close($ch);
    return $response;
}
 

 

위의 함수를 이용해서 데이터를 받아온다.

// 암호화 코드 실행
$seed = new SEED128();
$rdata = "memberID=xxxxxxxxx";

$rdata = $seed->getEncryptData($sckey, $rdata);


// get함수 호출(우체국 api 연결)
$service_url = "http://ship.epost.go.kr/api.GetCustNo.jparcel";
$getC = get($service_url, array('regData'=>$rdata,'key'=>$skey));

 

전송코드 $skey 는 우체국 오픈api 신청결과 페이지의 택배접수항목에서 확인이 가능하다. 

택배접수 항목에 보면 인증키가 있고 아래에 보안키보기가 있는데 해당버튼을 눌러서 나온 키값을 넣어준다. 

 

 

위의 순서로 데이터를 보내면 특별한 이상이 없는한 고객번호를 받아오게 된다. 

보안키값이 정확하지 않은 경우에는 memberID가 없다고 메시지가 회신되기도 한다. 

 

우체국api는 결과값을 xml 형식으로 보내주는데

foreach 문을 통해 해당 값을 처리했다. 

 

// curl 로 받아온 데이터 파싱하기
$obj = simplexml_load_string($getC);

// foreach 문을 통해서 key와 value 를 분리해준다. 
foreach($obj as $key=>$val) {
	$epost[$key] = $val;
}

 

회신되는 데이터 항목이 한 개 뿐이라서 굳이 위와 같이 변수선언을 안해줘도 되나 나중에 계속 사용해야 하므로 배열처리를 해줬다. 이부분은 사용하는 편리에 따라 각자 적용하면 된다. 

 

우체국api 에서 확인된 고객번호는 custNo라를 key 값으로 확인되므로 이를 이용해 계약 승인번호를 가져온다. 

$rdata = "custNo=$epost[custNo]"; // 위에서 받아온 고객번호를 넣어준다.

$rdata = $seed->getEncryptData($sckey, $rdata);


// get함수 호출(우체국 api 연결)
$service_url = "http://ship.epost.go.kr/api.GetApprNo.jparcel";
$getD = get($service_url, array('regData'=>$rdata,'key'=>$skey));

 

계약 승인번호 조회는 api 항목이 달라지므로 주소를 변경해서 작성한다. 

보낸 데이터가 일치하면 다시 데이터를 회신해준다. 

우체국 api에서 제공하는 출력 예제는 아래와 같다. 

우체국 api 계약승인번호 조회 xml 결과예제

 

위의 결과값을 다시 변수로 처리해주기 위해 foreach 문을 이용해 처리했다. 

// foreach 문을 두번 이용해서 최종 변수값을 가져온다.
foreach($obj as $key) {
	foreach($key as $keys=>$val) {
		$keys = iconv("utf-8","euc-kr",$keys); // 개발환경이 euc-kr 이라 iconv를 이용해 인코딩 변환
		$val = iconv("utf-8","euc-kr",$val);
		$epost[$keys] = $val;
	}
}


 

위의 내용대로 결과값을 변수로 처리하여 우체국api를 통해 택배신청을 하기 위한 필수요소를 다 받았다. 

$custNo = $epost[custNo]; // 고객번호

$apprNo = $epost[apprNo]; // 계약승인번호

 

 

 이제 위의 결과값을 이용해 실제 우체국api를 이용해 택배신청을 할 수 있다. 

 

반응형

댓글