반응형
이니시스 모바일 결제 API를 구동하는 과정에서 망취소 코드를 구현해보겠습니다.
1. 이니시스(INICIS) 모바일 결제 API 구동 샘플링
https://manual.inicis.com/mobile/
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으로 받게 되면 다른 값이 들어가기 때문에 망취소가 이루어지지 않습니다.
이상으로 이니시스 모바일 결제 망취소 코드를 구현해보았습니다.
반응형
'Web Developer's Story > JAVA' 카테고리의 다른 글
[JAVA] 반복문에서 continue, break 차이 (2) | 2020.09.10 |
---|---|
[JAVA] 이미지 리사이즈, 썸네일 만들기 - Thumbnails.of (0) | 2020.09.02 |
[JAVA] String 문자열에서 배열, 코드 한 줄로 바꾸기 (0) | 2020.08.30 |
[JAVA] Apache POI를 이용해 Excel 출력하기 (0) | 2020.08.26 |
[JAVA] 반복문 사용법 총 정리 - while문, do-while문 (0) | 2020.08.21 |