//구통보와 신통보의 파라미터 명명규칙이 다르므로 확인이 필요합니다.
//아래의 파라미터명은 구통보 파라미터입니다.
boolean result = false;
String PayMethod = request.getParameter("PayMethod");
String Mid = request.getParameter("MID");
String MallUserID = request.getParameter("MallUserID");
String Amt = request.getParameter("Amt");
String Name = request.getParameter("Name");
String GoodsName = request.getParameter("GoodsName");
String TID = request.getParameter("TID");
String OTID = request.getParameter("OTID");
String OID = request.getParameter("OID");
String AuthDate = request.getParameter("AuthDate");
String AuthCode = request.getParameter("AuthCode");
String ResultCode = request.getParameter("ResultCode");
String ResultMsg = request.getParameter("ResultMsg");
String StateCd = request.getParameter("StateCd");
String FnCd = request.getParameter("FnCd");
String FnName = request.getParameter("FnName");
String pinNo = request.getParameter("pinNo");
String CardQuota = request.getParameter("CardQuota");
String BuyerEmail = request.getParameter("BuyerEmail");
String BuyerTel = request.getParameter("BuyerTel");
String BuyerAuthNum = request.getParameter("BuyerAuthNum");
String VbankNum = request.getParameter("VbankNum");
String VbankName = request.getParameter("VbankName");
String ReceiptType = request.getParameter("ReceiptType");
String RcptAppNo = request.getParameter("RcptAppNo");
String RcptCcNo = request.getParameter("RcptCcNo");
String CardUsePoint = request.getParameter("CardUsePoint");
String SignValue = request.getParameter("SignValue");
String merchantKey = ""; // 발급받은 테스트 상점키 설정(Real 전환 시 운영 상점키 설정)
String VerifySignValue = encodeSHA256Base64(TID.substring(0, 10) + ResultCode +TID.substring(10, 15) + merchantKey + TID.substring(15, TID.length()));
//검증에 성공했을 경우
if(SignValue.equals(VerifySignValue)) {
if("3001".equals(ResultCode)){ //CARD
// 결제 성공시 DB처리
// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
//if(DB 처리 및 내부처리 로직 성공시) {
result = true;
//}
}
if("4000".equals(ResultCode)){ //BANK
// 결제 성공시 DB처리
// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
//if(DB 처리 및 내부처리 로직 성공시) {
result = true;
//}
}
if("4100".equals(ResultCode)){ //VBANK 채번완료
// 결제 성공시 DB처리
// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
//if(DB 처리 및 내부처리 로직 성공시) {
result = true;
//}
}
if("4110".equals(ResultCode)){ //VBANK 입금완료
// 결제 성공시 DB처리
// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
//if(DB 처리 및 내부처리 로직 성공시) {
result = true;
//}
}
if("A000".equals(ResultCode)){ //CELLPHONE
// 결제 성공시 DB처리
// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
//if(DB 처리 및 내부처리 로직 성공시) {
result = true;
//}
}
if("7001".equals(ResultCode)){ //현금영수증
// 결제 성공시 DB처리
// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
//if(DB 처리 및 내부처리 로직 성공시) {
result = true;
//}
}
if("2001".equals(ResultCode)){ //결제 취소
// 취소 성공시 DB처리
//TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
//if(DB 처리 및 내부처리 로직 성공시) {
result = true;
//}
}
if("2211".equals(ResultCode)){ //환불
}
if("2013".equals(ResultCode)){ //기취소 거래
}
}
// SHA256 암호화 함수
public static final synchronized String encodeSHA256Base64(String strPW) {
String passACL = null;
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA-256");
} catch (Exception e) {
e.printStackTrace();
}
md.update(strPW.getBytes());
byte[] raw = md.digest();
byte[] encodedBytes = Base64.encodeBase64(raw);
passACL = new String(encodedBytes);
return passACL;
}
//구통보와 신통보의 파라미터 명명규칙이 다르므로 확인이 필요합니다.
//아래의 파라미터명은 구통보 파라미터입니다.
$result = false;
$PayMethod = $_REQUEST['PayMethod']; //지불수단
$MID = $_REQUEST['MID']; //상점 ID
$MallUserID = $_REQUEST['MallUserID']; //고객ID
$Amt = $_REQUEST['Amt']; //금액
$Name = $_REQUEST['Name']; //구매자명
$GoodsName = $_REQUEST['GoodsName']; //상품명
$TID = $_REQUEST['TID']; //거래번호
$OTID = $_REQUEST['OTID']; //원거래거래번호
$OID = $_REQUEST['OID']; //주문번호
$AuthDate = $_REQUEST['AuthDate']; //승인 및 취소일시
$AuthCode = $_REQUEST['AuthCode']; //승인번호
$ResultCode = $_REQUEST['ResultCode']; //결과코드
$ResultMsg = $_REQUEST['ResultMsg']; //결과메시지
$StateCd = $_REQUEST['StateCd']; //승인취소구분
$FnCd = $_REQUEST['FnCd']; //결제카드사코드
$FnName = $_REQUEST['FnName']; //결제카드사명
$pinNo = $_REQUEST['pinNo']; //카드번호
$CardQuota = $_REQUEST['CardQuota']; //할부개월수
$BuyerEmail = $_REQUEST['BuyerEmail']; //구매자이메일
$BuyerTel = $_REQUEST['BuyerTel']; //구매자전화번호
$BuyerAuthNum = $_REQUEST['BuyerAuthNum'];//구매자주민번호
$VbankNum = $_REQUEST['VbankNum']; //가상계좌번호
$VbankName = $_REQUEST['VbankName']; //가상계좌은행명
$ReceiptType = $_REQUEST['ReceiptType']; //현금영수증유형
$RcptAppNo = $_REQUEST['RcptAppNo']; //현금영수증승인번호
$RcptCcNo = $_REQUEST['RcptCcNo']; //현금영수증취소번호
$CardUsePoint = $_REQUEST['CardUsePoint'];//사용포인트(국민카드전용)
$SignValue = $_REQUEST['SignValue']; //위변조 사인값
$MerchantKey = ""; // 발급받은 테스트 상점키 설정(Real 전환 시 운영 상점키 설정)
$VerifySignValue = base64_encode(hash('sha256', substr($TID,0,10).$ResultCode.substr($TID,10,5).$MerchantKey.substr($TID,15,15),true));
//위변조 검증
if($SignValue == $VerifySignValue){
if("3001" == $ResultCode){ //CARD
// 결제 성공시 DB처리 하세요.
// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
//if(DB 처리 및 내부처리 로직 성공시) {
$result = true;
//}
}
if("4000" == $ResultCode){ //BANK
// 결제 성공시 DB처리 하세요.
// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
//if(DB 처리 및 내부처리 로직 성공시) {
$result = true;
//}
}
if("4100" == $ResultCode){ //VBANK 체번완료
// 결제 성공시 DB처리 하세요.
// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
//if(DB 처리 및 내부처리 로직 성공시) {
$result = true;
//}
}
if("4110" == $ResultCode){ //VBANK 입금완료
// 결제 성공시 DB처리 하세요.
// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
//if(DB 처리 및 내부처리 로직 성공시) {
$result = true;
//}
}
if("A000" == $ResultCode){ //cellphone
// 결제 성공시 DB처리 하세요.
// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
//if(DB 처리 및 내부처리 로직 성공시) {
$result = true;
//}
}
if("7001" == $ResultCode){ //현금영수증
// 결제 성공시 DB처리 하세요.
// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
//if(DB 처리 및 내부처리 로직 성공시) {
$result = true;
//}
}
// 결제 취소
if("2001" == $ResultCode){
// 취소 성공시 DB처리 하세요.
//TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
//if(DB 처리 및 내부처리 로직 성공시) {
$result = true;
//}
}
if("2211" == $ResultCode){
// 환불
}
if("2013" == $ResultCode){
// 이미(기) 취소 거래임
}
}
'구통보와 신통보의 파라미터 명명규칙이 다르므로 확인이 필요합니다.
'아래의 파라미터명은 구통보 파라미터입니다.
result = "" '가맹점 DB 처리 및 내부처리 로직 성공 여부
PayMethod = request("PayMethod") '지불수단
merchantID = request("MID") '상점 ID
MallUserID = request("MallUserID") '회원사고객 ID
Amt = request("Amt") '금액
Name = request("Name") '구매자명
GoodsName = request("GoodsName") '상품명
TID = request("TID") '거래번호
OTID = request("OTID") '원거래 거래번호
OID = request("OID") '주문번호
AuthDate = request("AuthDate") '승인 및 취소 일시
AuthCode = request("AuthCode") '승인번호
ResultCode = request("ResultCode") '결과코드
ResultMsg = request("ResultMsg") '결과메시지
StateCd = request("StateCd") '승인취소구분
FnCd = request("FnCd") '결제카드사코드
FnName = request("FnName") '결제카드사명
pinNo = request("pinNo") '카드번호
CardQuota = request("CardQuota") '할부개월수
BuyerEmail = request("BuyerEmail") '구매자이메일주소
BuyerTel = request("BuyerTel") '구매자전화번호
BuyerAuthNum = request("BuyerAuthNum") '구매자주민번호
VbankNum = request("VbankNum") '가상계좌번호
VbankName = request("VbankName") '가상계좌은행명
ReceiptType = request("ReceiptType") '현금영수증유형
RcptAppNo = request("RcptAppNo") '현금영수증승인번호
RcptCcNo = request("RcptCcNo") '현금영수증취소번호
CardUsePoint = request("CardUsePoint") '할인금액
SignValue = request("SignValue") '위변조 사인값
merchantKey = "" '발급받은 테스트 상점키 설정(Real 전환 시 운영 상점키 설정)
VerifySignValue = CryptoUtil.Sha256Encrypt(Mid(TID,1,10) & ResultCode&Mid(TID,11,5) & merchantKey & Mid(TID,16,15))
'위변조 검증
IF SignValue = VerifySignValue Then
IF ResultCode = "3001" Then 'CARD
'승인 성공 시 DB 처리 하세요.
'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
response.write "결제성공"
//IF(DB 처리 및 내부처리 로직 성공시)
result = "OK"
//end if
Elseif ResultCode = "4000" Then 'BANK
'승인 성공 시 DB 처리 하세요.
'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
response.write "결제성공"
//IF(DB 처리 및 내부처리 로직 성공시)
result = "OK"
//end if
Elseif ResultCode = "4100" Then 'VBANK 체번완료
'승인 성공 시 DB 처리 하세요.
'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
response.write "가상계좌발급완료"
//IF(DB 처리 및 내부처리 로직 성공시)
result = "OK"
//end if
Elseif ResultCode = "4110" Then 'VBANK 입금완료
'승인 성공 시 DB 처리 하세요.
'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
response.write "가상계좌입금완료"
//IF(DB 처리 및 내부처리 로직 성공시)
result = "OK"
//end if
Elseif ResultCode = "A000" Then 'cellphone
'승인 성공 시 DB 처리 하세요.
'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
response.write "결제성공"
//IF(DB 처리 및 내부처리 로직 성공시)
result = "OK"
//end if
Elseif ResultCode = "7001" Then '현금영수증
'승인 성공 시 DB 처리 하세요.
'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
response.write "현금영수증처리완료"
//IF(DB 처리 및 내부처리 로직 성공시)
result = "OK"
//end if
Elseif ResultCode = "2001" Then '결제 취소
'승인 성공 시 DB 처리 하세요.
'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
response.write "결제취소성공"
//IF(DB 처리 및 내부처리 로직 성공시)
result = "OK"
//end if
Elseif ResultCode = "2211" Then '계좌이체 결제환불
'승인 성공 시 DB 처리 하세요.
'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
response.write "결제환불성공"
//IF(DB 처리 및 내부처리 로직 성공시)
result = "OK"
//end if
Elseif ResultCode = "2013" Then
'이미(기) 취소 거래임
end if
'IF DB 처리 및 내부처리 로직 성공시 Then
result = "OK"
'end if
end if
DB 처리 및 내부처리 로직 성공시 OK 출력