반응형

이니시스 모바일 결제 API를 구동하는 과정에서 망취소 코드를 구현해보겠습니다.

 


 

1. 이니시스(INICIS) 모바일 결제 API 구동 샘플링

https://manual.inicis.com/mobile/

 

KG INICIS MANUAL

승인요청URL : 인증결과수신 시 P_REQ_URL 통신방식 : http-Client HTTP Method : POST // STEP2 에 이어 인증결과가 성공일(P_STATUS=00) 경우 STEP2 에서 받은 인증결과로 아래 승인요청 진행 if ($_REQUEST["P

manual.inicis.com

 

 

2. 망취소 구현 이유

: 결제는 성공했지만 데이터베이스에 데이터 입력을 실패했거나 제공하는 서비스에 문제가 생겼을 때, 서비스 혼선을 방지하기 위하여 결제가 자동 취소하도록 망취소를 구현하게 되었습니다.

* 망취소는 결제 취소와 다릅니다.

 

 

3. 망취소를 하기 위해 필요한 변수 및 파라미터

// 결제요청 URL
String P_REQ_URL = request.getParameter("P_REQ_URL");

// 인증 상태
String P_STATUS =request.getParameter("P_STATUS");

URI uri = new URI(P_REQ_URL);
String cancelUri = "https://" + uri.getHost() + "/smart/payNetCancel.ini";

// 승인요청을 위한 P_MID, P_TID 세팅
String P_MID = "INIpayTest";

// 인증 거래번호
String P_TID = request.getParameter("P_TID"); 

- 인증 결과를 파라미터로 받습니다.

- 망취소를 구현하기 위해서 cancelUri를 선언했습니다.

 

 

4. 승인결과 수신 후 받은 정보 HashMap에 담기

if( P_STATUS.equals("00") ){ // 인증결과 성공

	// 승인요청할 데이터
	P_REQ_URL = P_REQ_URL + "?P_TID=" + P_TID + "&P_MID=" + P_MID;

	HttpClient client = new HttpClient();
	GetMethod method = new GetMethod(P_REQ_URL);
	method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));

	try {
    
		int statusCode = client.executeMethod(method);

		// -------------------- 승인결과 수신 -------------------------------------------------

		byte[] responseBody = method.getResponseBody();
		String[] values = new String(responseBody).split("&");
		Map<String , String> resultMap = new HashMap<String, String>();

		for( String value : values ) {
        
			resultMap.put(value.substring(0, value.indexOf("=")), value.substring(value.indexOf("=") + 1));
		
        	}
        
        .
        .
        .
        

- 승인결과 수신 후 받은 데이터를 resultMap에 모두 저장합니다.

- 결과 데이터는 00=00과 같은 형식으로 나오기 때문에 "="를 기준으로 나누어서 저장했습니다.

 

 

5. 망취소 구현

// 승인취소 요청할 데이터
cancelUri = cancelUri + "?P_TID=" + P_TID + "&P_MID=" + resultMap.get("P_MID") + "&P_AMT=" + resultMap.get("P_AMT") + "&P_OID=" + resultMap.get("P_OID");

HttpClient cancelClient = new HttpClient();
GetMethod cancelMethod = new GetMethod(cancelUri);
cancelMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));

try {

	int statusCode2 = cancelClient.executeMethod(cancelMethod);

	byte[] cancelBody = cancelMethod.getResponseBody();
	String[] cancelValues = new String(cancelBody).split("&");
	Map<String , String> cancelMap = new HashMap<String, String>();

	for (String value : cancelValues) {
    
		cancelMap.put(value.substring(0, value.indexOf("=")), value.substring(value.indexOf("=") + 1));
	
    	}

	out.println("## 망취소 API 결과 ## : " + cancelMap.get("P_STATUS"));

} catch (Exception e) {

	out.println("## 승인취소 오류 ## :" + e);
    
} finally {

	cancelMethod.releaseConnection();
    
}

- 위에서 선언했던 cancelUri로 승인 취소를 요청합니다.

- 망취소 요청 후 cancelMap.get("P_STATUS")가 "00"이라면 망취소 성공입니다.

 

- 유의할 점은 승인 취소를 요청할 때 보내는 cancelUri에서 P_TID는 인증결과 값을 넣어야 합니다.

- resultMap으로 받게 되면 다른 값이 들어가기 때문에 망취소가 이루어지지 않습니다.

 

 

 

이상으로 이니시스 모바일 결제 망취소 코드를 구현해보았습니다.

 


 

반응형