전자결제 [티지코프/KG모빌리언스] 전자결제 PHP 적용예제
페이지 정보
첨부파일
-
KG_pay.zip (23.5K)
162회 다운로드 | DATE : 2014-09-12 15:36:34
본문
파일 구조
KG_pay
├ img ... 이미지폴더
├ bill.php ... 수정이 필요함
├ dbpath.php ... 수정이 필요함
├ redirepath.php
└ result.php
개별결제창을 새창으로 열때 ...
<script type="text/javascript">
function win_cardbill(url) {
if (!url)
url = "/KG_pay/bill.php";
window.open(url, "hp_cardbill", "left=20, top=20, width=480, height=465, scrollbars=1");
}
</script>
<a href="javascript:win_cardbill();" style="font-size:12px;" class="hp_main_news_one">개별결제</a>
1. bill.php
<!DOCTYPE html PUBLIC "-//W3C//Dtd html 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<title>해피정닷컴 개별결제</title>
<style type="text/css">
body {
scrollbar-3dlight-color:#888888;
scrollbar-arrow-color:#888888;
scrollbar-track-color:#FFFFFF;
scrollbar-darkshadow-color:#888888;
scrollbar-face-color:#FFFFFF;
scrollbar-highlight-color:#FFFFFF;
scrollbar-shadow-color:#FFFFFF
FONT-family:돋움; FONT-size:9pt;color:#000000; text-decoration:none;
}
td { FONT-family:돋움; FONT-size:9pt;color:#000000; text-decoration:none;}
</style>
<script src="https://pg.mcash.co.kr/dlp/js/npgIF.js"></script>
<?php $hp_timestamp = date("Ymd").substr(microtime(), 2, 5); ?>
<script language="javascript">
/**
결제 요청 함수 (결제창 호출)
*/
function reqPayment() {
var form = document.payform;
PAY_REQUEST(form);
}
/**
거래시간은 편의상 구매자 PC 시간을 사용합니다.
실제로는 쇼핑몰 서버의 시간을 사용해야 합니다.
*/
function setTxTime() {
var time = new Date();
var year = time.getFullYear() + "";
var month = time.getMonth()+1;
var date = time.getDate();
var hour = time.getHours();
var min = time.getMinutes();
var sec = time.getSeconds();
if(month<10) month = "0" + month;
if(date<10) date = "0" + date;
if(hour<10) hour = "0" + hour;
if(min<10) min = "0" + min;
if(sec<10) sec = "0" + sec;
return year + month + date + hour + min + sec;
}
/**
거래번호(MxIssueNO), 거래일시(MxIssueDate) 생성 예제
예제에서는 편의상 거래시간을 거래번호로 사용합니다.
실제로는 쇼핑몰의 고유 주문번호를 사용해야 합니다.
*/
function initValue() {
var tmp = setTxTime();
//document.payform.MxIssueNO.value = "TEST_"+tmp;
document.payform.MxIssueNO.value = <?php echo $hp_timestamp; ?>;
document.payform.MxIssueDate.value = tmp;
}
</script>
</head>
<body onload="initValue();">
<form name="payform" accept-charset="euc-kr">
<!-- 결제 결과의 REDIRPATH 페이지 전송을 위한 parameter 시작 (수정하지 말것) -->
<input type="hidden" name="ReplyCode" value="">
<input type="hidden" name="ReplyMessage" value="">
<input type="hidden" name="CcCode" value="">
<input type="hidden" name="Installment" value="">
<!-- 결제 결과의 REDIRPATH 페이지 전송을 위한 parameter 끝 -->
<input type="hidden" name="MxID" id="MxID" value="가맹점ID">
<?php // 32byte : 가맹점 계약 시 발급되는 고유 아이디 ?>
<input type="hidden" name="URL" id="URL" value="www.happyjung.com">
<?php // 100byte : 가맹점 서버 URL (‘http://’ 제외) ?>
<input type="hidden" name="DBPATH" id="DBPATH" value="/KG_pay/dbpath.php">
<?php // 70byte : 결과 저장 DBPATH 파일 경로
// context root 부터 입력 (예: /pg/DBPATH.jsp) ?>
<input type="hidden" name="REDIRPATH" id="REDIRPATH" value="/KG_pay/result.php">
<?php // 70byte : 결과 화면 REDIRPATH 파일 경로
// context root 부터 입력 (예: /pg/REDIRPATH.jsp) ?>
<input type="hidden" name="MxIssueNO" id="MxIssueNO" value="">
<?php // 32byte : 가맹점 거래번호. (특수문자 |, &, ?, ^, % 사용 불가) ?>
<input type="hidden" name="MxIssueDate" id="MxIssueDate" value="">
<?php // 14byte : 결제 요청 시간. YYYYMMDDHH24MISS 형식 / 년월일시분초 14byte 전부 세팅해야 함 ?>
<input type="hidden" name="Currency" id="Currency" value="KRW">
<input type="hidden" name="CcMode" id="CcMode" value="11">
<?php // 2byte : 거래 종류. 11 고정 ?>
<input type="hidden" name="Smode" id="Smode" value="3001">
<?php // 4byte : 3001: DBPATH 실패 리턴 시 결제건 자동 취소. ?>
<input type="hidden" name="MSTR" id="MSTR" value="MSTR">
<?php // 1024byte : 가맹점 DBPATH로 리턴 되는 값
// 가맹점에서 추가적으로 파라미터가 필요한 경우 사용하며 &,%,?,^ 는 사용불가! (예: MSTR="a=1|b=2|c=3") ?>
<input type="hidden" name="MSTR2" id="MSTR2" value="MSTR2">
<?php // 1024byte : 가맹점 REDIRPATH로 리턴 되는 값
// 가맹점에서 추가적으로 파라미터가 필요한 경우 사용하며 &,%,?,^ 는 사용불가! (예: MSTR="a=1|b=2|c=3") ?>
<input type="hidden" name="connectionType" id="connectionType" value="http">
<?php // 5byte : 가맹점 서버 프로토콜. http 또는 https 세팅 ?>
<input type="hidden" name="dlpType" id="dlpType" value=""><?php // 2byte : 결제창의 오픈 방식
// 11 또는 미설정: 기본 값으로 팝업 오픈
// 00: 페이지 전환. 결제취소 시 결제창 종료 후 가맹점측 REDIRPATH 호출.
// * iframe 호출은 미지원 합니다. * ?>
<input type="hidden" name="AutoRedirCall" id="AutoRedirCall" value="">
<?php // 1byte : 결제완료 후 가맹점 REDIRPATH 자동 호출.
// N 또는 미설정: 기본값으로 PG사 결제완료 화면에서 [다음]을 클릭하면 가맹점측 REDIRPATH 페이지 호출
// Y: 결제 완료 후 PG사 결제완료 화면에서 곧바로 가맹점측 REDIRPATH 호출 ?>
<input type="hidden" name="signType" id="signType" value="">
<?php // byte : ?>
<input type="hidden" name="Install" id="Install" value="">
<?php // 26byte : 할부 개월 수를 지정 하고자 할 때 사용 ?>
<input type="hidden" name="BillType" id="BillType" value="">
<?php // 2byte : 매출전표 출력 시 과세/비과세 구분.
// 00: 과세, 10: 비과세 ?>
<input type="hidden" name="PAN" id="PAN" value="">
<?php // 16byte : 포인트 결제 시 해당 카드사 PAN코드 입력.
// (사전에 포인트 결제 계약이 되어 있어야 함.)
?>
<input type="hidden" name="InstallType" id="InstallType" value="">
<?php // 2byte : 할부 수수료 가맹점 부담 여부.
// (사전에 무이자 계약이 되어 있어야 함.)
// 00: 미부담, 01: 부담 ?>
<input type="hidden" name="Userid" id="Userid" value="">
<?php // 64byte : 사용자 ID ?>
<!-- 영카트4 시작 -->
<input type="hidden" name="mb_id" value="<?php echo $hp_timestamp; ?>">
<input type="hidden" name="od_id" value="<?php echo $hp_timestamp; ?>">
<input type="hidden" name="od_ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>">
<input type="hidden" name="od_hope_date" value="<?php echo date("Y-m-d"); ?>">
<input type="hidden" name="od_time" value="<?php echo date("Y-m-d H:i:s"); ?>">
<input type="hidden" name="od_settle_case" value="신용카드">
<!-- 영카트4 끝 -->
<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width=9 height=7><img src="img/line_t_left.gif"></td>
<td style="background-image:url(img/line_t_center.gif);" width="400"></td>
<td><img src="img/line_t_right.gif"></td>
</tr>
<tr>
<td background="img/line_m_left.gif"></td>
<td bgcolor="#FFFFFF"><table width="400" align="center" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="45" style="background-image:url(img/top_banner.gif); background-position:center; background-repeat:no-repeat; font-weight:bold; font-size:18px; color:#FFFFFF; text-align:center">해피정닷컴 개별결제</td>
</tr>
<tr>
<td height="20"> </td>
</tr>
<tr>
<td bgcolor="#FFFFFF" align="center" valign="top"><table width="370" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="7" height="7" style="line-height:0px;"><img src="img/inline_t_left.gif"></td>
<td style="line-height:0px;" width="556" background="img/inline_t_center.gif"></td>
<td style="line-height:0px;" width="7" height="7"><img src="img/inline_t_right.gif"></td>
</tr>
<tr>
<td style="background-image:url(img/inline_m_left.gif); background-position:left; background-repeat:repeat-y;"></td>
<td width="356" align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr style=" background-image:url(img/bg_dot.gif); background-position:bottom; background-repeat:repeat-x;">
<td colspan="2" align="left" height="30" bgcolor="#F7D9FF" style="padding-left:20px;">
<img align="absmiddle" src="img/icon_member_02.gif"> 주문 정보
</td>
</tr>
<tr style="background-image:url(img/bg_dot.gif); background-position:bottom; background-repeat:repeat-x;">
<td width="80" align="center">주문번호</td>
<td style="padding:3px 0 3px 0;"><?php echo $hp_timestamp; ?> (재주문시 키보드 F5를 누르세요)</td>
</tr>
<tr style="background-image:url(img/bg_dot.gif); background-position:bottom; background-repeat:repeat-x;">
<td width="80" align="center">상품이름</td>
<td style="padding:3px 0 3px 0;"><input type="text" name="CcProdDesc" id="CcProdDesc" style="width:150px;" value="">(회사명 또는 상품명)</td>
</tr>
<tr style="background-image:url(img/bg_dot.gif); background-position:bottom; background-repeat:repeat-x;">
<td align="center">주문자명</td>
<td style="padding:3px 0 3px 0;"><input type="text" name="CcNameOnCard" id="CcNameOnCard" style="width:100px;" value="">
(회사명 또는 담당자명)</td>
</tr>
<tr style="background-image:url(img/bg_dot.gif); background-position:bottom; background-repeat:repeat-x;">
<td align="center">전화번호</td>
<td style="padding:3px 0 3px 0;"><input type="text" name="PhoneNO" id="PhoneNO" maxlength="15" value=""></td>
</tr>
<tr style="background-image:url(img/bg_dot.gif); background-position:bottom; background-repeat:repeat-x;">
<td align="center">이 메 일</td>
<td style="padding:3px 0 3px 0;"><input type="text" name="email" id="email" style="width:200px;" value=""></td>
</tr>
<tr>
<td align="center">결제금액</td>
<td style="padding:3px 0 3px 0;"><input type="text" name="Amount" id="Amount" style="width:100px;" maxlength="8" value="">원<br>
(<span style="padding:15px 0 0 0;"> VAT 포함된 금액으로 숫자만 입력해주세요.</span>)</td>
</tr>
</table>
</td>
<td style="background-image:url(img/inline_m_right.gif);"></td>
</tr>
<tr>
<td width="7" height="7"><img src="img/inline_b_left.gif"></td>
<td style="background-image:url(img/inline_b_center.gif); background-position:bottom; background-repeat:repeat-x;"></td>
<td width="7" height="7"><img src="img/inline_b_right.gif"></td>
</tr>
</table></td>
</tr>
<tr>
<td height="15"> </td>
</tr>
<tr>
<td align="center" height="40"><input type="image" src="img/btn_payment.gif" onclick="reqPayment();"></td>
</tr>
<tr>
<td height="20"></td>
</tr>
<tr>
<td height="45" align="center" style="background-image:url(img/top_banner.gif); background-position:center; color:#FFFFFF;">Copyright(c) 1999-<?php echo date("Y"); ?> by KG Mobilians All rights reserved</td>
</tr>
</table></td>
<td style=" background-image:url(img/line_m_right.gif); background-position:right; background-repeat:repeat-y;"></td>
</tr>
<tr>
<td width="9" height="10"><img src="img/line_b_left.gif"></td>
<td style=" background-image:url(img/line_b_center.gif); background-position:bottom; background-repeat:repeat-x;"></td>
<td><img src="img/line_b_right.gif"></td>
</tr>
</table>
</form>
</body>
</html>
2. dbpath.php
<?php
/*
DBPATH 페이지는 결제가 완료되면, 결과를 전송 받아서 주문 DB에 저장 합니다.
결제 완료와 동시에 DBPATH로 결과를 전송하고, DBPATH로 부터 return 메시지가
확인이 되면, 결제 진행 중이던 결제 창은 최종 결제 완료 페이지를 출력합니다.
따라서, DBPATH가 비 정상적인 경우에는 결제 지연의 원인이 될 수 있습니다.
아래와 같은 값이 POST 방식으로 전송됩니다. 자세한 설명은 매뉴얼을 참고바랍니다.
$ReplyCode //결과 코드
$ReplyMessage //결과 메시지
$MxIssueDate //거래 일시 (결제 요청시 사용값)
$MxIssueNO //거래 번호 (결제 요청시 사용값)
$Amount //거래 금액
$Smode //결제 수단 구분 코드
$MxHASH //결과 검증값(데이터 조작 여부 확인)
$MSTR //가맹점 return 값
$CcNO //카드 번호. 9 ~ 12 자리 마스킹 처리. (신용카드 결제인 경우에만 처리)
$CcCode //카드 코드 (신용카드 결제인 경우에만 처리)
$Installment //할부 개월수 (신용카드 결제인 경우에만 처리)
$TxNO //모빌리언스 거래번호 (결제 취소일 경우 리턴하지 않음)
*/
//POST, GET 방식에 관계 없이 사용하기 위해서
if (phpversion() >= 4.2) {
if (count($_POST)) extract($_POST, EXTR_PREFIX_SAME, 'VARS_');
if (count($_GET)) extract($_GET, EXTR_PREFIX_SAME, '_GET');
}
/*
결제 정보의 위/변조 여부를 확인하기 위해,
주요 결제 정보를 MD5 암호화 알고리즘으로 HASH 처리한 MxHASH 값을 받아
동일한 규칙으로 DBPATH에서 생성한 값(output)과 비교합니다.
mxotp(접근키) 값은 최초 계약 후 서비스ID 발급 시 같이 발급되는 키로
32byte 길이의 암호화 키 입니다.
*/
$mxid = "가맹점ID"; // 가맹점 ID (고정 값 : 테스트용이므로 발급된 ID로 변경바람)
$mxotp = "접근키"; // 접근키 (고정 값 : 테스트용이므로 발급된 ID로 변경바람)
$currency = "KRW"; //화폐코드 (고정 값)
$mxissueno = $MxIssueNO; //거래 번호 (결과로 전송받은 값)
$mxissuedate = $MxIssueDate; //거래 일시 (결과로 전송받은 값)
$amount = ""; //가맹점 주문 DB에 기록되어 있는 거래금액
/*
반드시 가맹점 주문 DB에서 거래금액(amount) 값을 가져와야 합니다.
(주문 DB는 최초 결제 요청 시에 '입금대기' 상태로 기록한 초기 장바구니 정보)
예) query = "select amount01 from 주문테이블 where 거래번호='"+MxIssueNO+"', and 거래일시='"+MxIssueDate;
=> amount01;
amount = amount01;
*/
// 그누보드4 , 영카트4
include_once "../gnuboard/dbconfig.php";
$dbconn = mysql_connect("$mysql_host","$mysql_user","$mysql_password") or die("데이터베이스 연결에 실패하였습니다.");
mysql_select_db($mysql_db,$dbconn);
$query = "select od_temp_card from yc4_order where on_uid ='". $MxIssueNO ."' and od_card_time ='". $MxIssueDate ."'";
$result = mysql_query($query);
if (!$result) {
$isOK = 0;
} else {
$data = mysql_fetch_array($result);
$amount = $data["od_temp_card"];
$isOK = 1;
}
// 그누보드4 , 영카트4
$amount = $amount; // 예제 테스트를 위해 결과값을 사용 (위와 같이 주문 DB 이용바람)
/*
MD5 알고리즘을 이용한 HASH 값 생성
*/
$output = md5($mxid.$mxotp.$mxissueno.$mxissuedate.$amount.$currency);
$returnMsg = "ACK=400FAIL";
/*
105번째 라인에서 hash값이 일치하면 가맹점측 DB 업데이트 작업을 수행한 후
해당 작업이 정상적으로 완료가 되면 isOK = 1 로 세팅한다.
*/
$isOK = 0;
//$isOK = 1; //dbpath 처리 테스트 시에 임시로 가맹점 DB처리를 성공으로 하드코딩한다.
/*
MxHASH 값과 output 생성 값을 비교해서 일치하는 경우에만 결과 저장
*/
//hash값이 일치하는 경우
if($MxHASH!=null && $MxHASH==$output) {
//리턴 결과가 결제 성공인 경우
//모빌리언스 배치방식의 자동결제 2회차부터는 00004000 리턴 시 정상결제 처리를 해주시기 바랍니다.
if($ReplyCode=="00003000") {
/*
이 부분에서 주문 DB에 결과를 저장하는 소스 코딩 필요
예) $isOK = (DB 업데이트 결과);
*/
//DB 저장 성공이면
if($isOK==1) {
$returnMsg = "ACK=200OKOK";
//DB 저장 실패이면
} else {
$returnMsg = "ACK=400FAIL";
}
//리턴 결과가 결제 실패인 경우
} else {
/*
이 부분에서 주문 DB에 결과를 저장하는 소스 코딩 필요
예) $isOK = (DB 업데이트 결과);
*/
//DB 저장 성공이면
if($isOK==1) {
$returnMsg = "ACK=200OKOK";
//DB 저장 실패이면
} else {
$returnMsg = "ACK=400FAIL";
}
}
//결제 정보가 일치하지 않는 경우 : 데이타 조작의 가능성이 있으므로, 결제 취소
} else {
$returnMsg = "ACK=400FAIL";
}
?>
<?php echo $returnMsg; ?> <?php //return 메시지('ACK=200OKOK' or 'ACK=400FAIL')를 출력해야 정상 처리됩니다. ?>
3. redirpath.php
<?php
/*
결제창 종료, 구매자 결제 결과 확인 페이지(RESULT 페이지)를 호출하기 위한 페이지 입니다.
(결제 완료 -> DBPATH 결과전송 -> REDIRPATH 페이지 -> 결제창 종료-> RESULT 페이지)
$ReplyCode //결과 코드
$ReplyMessage //결과 메시지
$MxIssueDate //거래 일시 (결제 요청시 사용값)
$MxIssueNO //거래 번호 (결제 요청시 사용값)
$Amount //거래 금액
$Smode //결제 수단 구분 코드
$CLOSETYPE //가맹점 결과 페이지 호출 방법
$MSTR2 //가맹점 return 값
$CcCode //카드 코드 (신용카드 결제인 경우에만 처리)
$Installment //할부 개월수 (신용카드 결제인 경우에만 처리)
*/
//POST, GET 방식에 관계 없이 사용하기 위해서
if (phpversion() >= 4.2) {
if (count($_POST)) extract($_POST, EXTR_PREFIX_SAME, 'VARS_');
if (count($_GET)) extract($_GET, EXTR_PREFIX_SAME, '_GET');
}
$RESULTPATH = "./result.php"; // 결과 확인 페이지의 페이지명과 경로를 설정합니다.
//null 처리
if($MSTR2 == null) $MSTR2 = "";
if($ReplyMessage == null) $ReplyMessage = "";
if($CcCode == null) $CcCode = "";
if($Installment == null) $Installment = "";
?>
<!DOCTYPE html PUBLIC "-//W3C//Dtd html 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<script language="javascript">
<!--
<?php
//팝업으로 결제 페이지를 호출했을 경우
if($CLOSETYPE == "OFF") {
?>
function proceed() {
opener.document.payform.ReplyCode.value = "<?php echo $ReplyCode; ?>";
opener.document.payform.ReplyMessage.value = "<?php echo $ReplyMessage; ?>";
opener.document.payform.MxIssueDate.value = "<?php echo $MxIssueDate; ?>";
opener.document.payform.MxIssueNO.value = "<?php echo $MxIssueNO; ?>";
opener.document.payform.Amount.value = "<?php echo $Amount; ?>";
opener.document.payform.Smode.value = "<?php echo $Smode; ?>";
opener.document.payform.MSTR2.value = "<?php echo $MSTR2; ?>";
//신용카드 결제인 경우에만 주석 제거 후 사용
opener.document.payform.CcCode.value = "<?php echo $CcCode; ?>";
opener.document.payform.Installment.value = "<?php echo $Installment; ?>";
opener.document.payform.action = "<?php echo $RESULTPATH; ?>";
opener.document.payform.method = "post";
opener.document.payform.target = "_self";
opener.document.payform.submit();
self.close();
}
<?php
//페이지 전환으로 결제 페이지를 호출했을 경우
} else {
?>
function proceed(){
document.payform.action = "<?php echo $RESULTPATH; ?>";
document.payform.method = "post";
document.payform.target = "_self";
document.payform.submit();
}
<?php
}
?>
-->
</script>
</head>
<body onload="proceed();">
<form name="payform">
<input type="hidden" name="ReplyCode" value="<?php echo $ReplyCode; ?>">
<input type="hidden" name="ReplyMessage" value="<?php echo $ReplyMessage; ?>">
<input type="hidden" name="MxIssueDate" value="<?php echo $MxIssueDate; ?>">
<input type="hidden" name="MxIssueNO" value="<?php echo $MxIssueNO; ?>">
<input type="hidden" name="Amount" value="<?php echo $Amount; ?>">
<input type="hidden" name="Smode" value="<?php echo $Smode; ?>">
<input type="hidden" name="MSTR2" value="<?php echo $MSTR2; ?>">
<input type="hidden" name="CcCode" value="<?php echo $CcCode; ?>">
<input type="hidden" name="Installment" value="<?php echo $Installment; ?>">
</form>
</body>
</html>
4. result.php
<?php
/*
REDIRPATH 페이지에서 redirection 되는 구매자 결제 정보 확인 페이지 입니다.
아래와 같은 값이 전송됩니다. 자세한 설명은 매뉴얼을 참고바랍니다.
$ReplyCode //결과 코드
$ReplyMessage //결과 메시지
$MxIssueDate //거래 일시 (결제 요청시 사용값)
$MxIssueNO //거래 번호 (결제 요청시 사용값)
$Amount //거래 금액
$Smode //결제 수단 구분 코드
$CLOSETYPE //가맹점 결과 페이지 호출 방법
$MSTR2 //가맹점 return 값
$CcCode //카드 코드 (신용카드 결제인 경우에만 처리)
$Installment //할부 개월수 (신용카드 결제인 경우에만 처리)
*/
//POST, GET 방식에 관계 없이 사용하기 위해서
if (phpversion() >= 4.2) { // POST, GET 방식에 관계 없이 사용하기 위해서
if (count($_POST)) extract($_POST, EXTR_PREFIX_SAME, 'VARS_');
if (count($_GET)) extract($_GET, EXTR_PREFIX_SAME, '_GET');
}
$Sname = "";
$retPage = "";
if(Smode != null) {
if($Smode == "3001" || $Smode == "3005" || $Smode == "3007") {
$Sname = "신용카드 결제";
$retPage = "cn_web.html";
}else if($Smode == "5101") {
$Sname = "틴캐시 결제";
$retPage = "tn_web.html";
}else if($Smode == "0000") {
$Sname = "결제 취소";
$retPage = "cncl_web.html";
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//Dtd html 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<style type="text/css">
body {
scrollbar-3dlight-color:#888888;
scrollbar-arrow-color:#888888;
scrollbar-track-color:#FFFFFF;
scrollbar-darkshadow-color:#888888;
scrollbar-face-color:#FFFFFF;
scrollbar-highlight-color:#FFFFFF;
scrollbar-shadow-color:#FFFFFF
}
body { FONT-family:돋움; FONT-size:9pt;color:#000000; text-decoration:none;}
td { FONT-family:돋움; FONT-size:9pt;color:#000000; text-decoration:none;}
</style>
</head>
<body bgcolor="#ffffff" leftmargin="10" topmargin="10" marginwidth="0" marginheight="0">
<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width=9 height=7 ><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_t_left.gif"></td>
<td width="600" background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_t_center.gif"></td>
<td><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_t_right.gif"></td>
</tr>
<tr>
<td background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_m_left.gif"></td>
<td bgcolor="#FFFFFF" align="center" width="600">
<table width="100%" align="center" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/top_banner.gif"></td>
</tr>
<tr>
<td height="20"> </td>
</tr>
<tr>
<td bgcolor="#FFFFFF" align="center" valign="top">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right" height="30"><b>요청 결과</b> (<?php echo $Sname; ?>) : </td>
<?php if($ReplyCode == "00003000") { ?>
<td align="left" height="30"> 성공했습니다.</td>
<?php } else{ ?>
<td align="left" height="30"> 실패했습니다.</td>
<?php } ?>
</tr>
</table>
</td>
</tr>
<tr>
<td height="20"> </td>
</tr>
<tr>
<td width="100%" bgcolor="#FFFFFF" align="center" valign="top">
<table align="center" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="20"> <td>
<td width="560">
<table align="center" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="7" height="7"><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_t_left.gif"></td>
<td width="546" background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_t_center.gif"></td>
<td width="7" height="7"><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_t_right.gif"></td>
</tr>
<tr>
<td background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_m_left.gif"></td>
<td width="546" align="center">
<!--결제 내역-->
<table width="100%" align="center" border="0" cellspacing="0" cellpadding="0">
<tr>
<td colspan="2" align="center" height="30" bgcolor="#F7D9FF">
<img align="absmiddle" src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/icon_member_02.gif">
<font style="color:black;"> 결과 확인</font>
</td>
</tr>
<tr>
<td width="45%" align="right" height="20">거래번호 : </td>
<td width="55%" align="left" height="20"> <?php echo $MxIssueNO; ?></td>
</tr>
<tr><td height="1" colspan="2" background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/bg_dot.gif"></td></tr>
<tr>
<td width="45%" align="right" height="20">거래일자 : </td>
<td width="55%" align="left" height="20"> <?php echo $MxIssueDate; ?></td>
</tr>
<tr><td height="1" colspan="2" background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/bg_dot.gif"></td></tr>
<tr>
<td width="45%" align="right" height="20">결제금액 : </td>
<td width="55%" align="left" height="20"> <?php echo $Amount; ?> 원</td>
</tr>
<tr><td height="1" colspan="2" background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/bg_dot.gif"></td></tr>
<tr>
<td width="45%" align="right" height="20">결과코드 : </td>
<td width="55%" align="left" height="20"> <?php echo $ReplyCode; ?></td>
</tr>
<tr><td height="1" colspan="2" background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/bg_dot.gif"></td></tr>
<tr>
<td width="45%" align="right" height="20">결과메시지 : </td>
<td width="55%" align="left" height="20"> <?php echo $ReplyMessage; ?></td>
</tr>
</table>
</td>
<!--결제 내역 끝-->
<td background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_m_right.gif"></td>
</tr>
<tr>
<td width="7" height="7"><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_b_left.gif"></td>
<td background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_b_center.gif"></td>
<td width="7" height="7"><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_b_right.gif"></td>
</tr>
</table>
</td>
<td width="20"> </td>
</tr>
</table>
</td>
</tr>
<tr><td> </td></tr>
<tr>
<td height="46" align="center" valign="middle">
<a href="<?php echo $retPage; ?>"><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/btn_payresult.gif" border="0"></a>
</td>
</tr>
<tr><td> </td></tr>
<tr>
<td><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/allright.gif"></td>
</tr>
</table>
</td>
<td background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_m_right.gif"></td>
</tr>
<tr>
<td width=9 height=10><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_b_left.gif"></td>
<td background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_b_center.gif"></td>
<td><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_b_right.gif"></td>
</tr>
</table>
</body>
</html>
KG_pay
├ img ... 이미지폴더
├ bill.php ... 수정이 필요함
├ dbpath.php ... 수정이 필요함
├ redirepath.php
└ result.php
개별결제창을 새창으로 열때 ...
<script type="text/javascript">
function win_cardbill(url) {
if (!url)
url = "/KG_pay/bill.php";
window.open(url, "hp_cardbill", "left=20, top=20, width=480, height=465, scrollbars=1");
}
</script>
<a href="javascript:win_cardbill();" style="font-size:12px;" class="hp_main_news_one">개별결제</a>
1. bill.php
<!DOCTYPE html PUBLIC "-//W3C//Dtd html 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<title>해피정닷컴 개별결제</title>
<style type="text/css">
body {
scrollbar-3dlight-color:#888888;
scrollbar-arrow-color:#888888;
scrollbar-track-color:#FFFFFF;
scrollbar-darkshadow-color:#888888;
scrollbar-face-color:#FFFFFF;
scrollbar-highlight-color:#FFFFFF;
scrollbar-shadow-color:#FFFFFF
FONT-family:돋움; FONT-size:9pt;color:#000000; text-decoration:none;
}
td { FONT-family:돋움; FONT-size:9pt;color:#000000; text-decoration:none;}
</style>
<script src="https://pg.mcash.co.kr/dlp/js/npgIF.js"></script>
<?php $hp_timestamp = date("Ymd").substr(microtime(), 2, 5); ?>
<script language="javascript">
/**
결제 요청 함수 (결제창 호출)
*/
function reqPayment() {
var form = document.payform;
PAY_REQUEST(form);
}
/**
거래시간은 편의상 구매자 PC 시간을 사용합니다.
실제로는 쇼핑몰 서버의 시간을 사용해야 합니다.
*/
function setTxTime() {
var time = new Date();
var year = time.getFullYear() + "";
var month = time.getMonth()+1;
var date = time.getDate();
var hour = time.getHours();
var min = time.getMinutes();
var sec = time.getSeconds();
if(month<10) month = "0" + month;
if(date<10) date = "0" + date;
if(hour<10) hour = "0" + hour;
if(min<10) min = "0" + min;
if(sec<10) sec = "0" + sec;
return year + month + date + hour + min + sec;
}
/**
거래번호(MxIssueNO), 거래일시(MxIssueDate) 생성 예제
예제에서는 편의상 거래시간을 거래번호로 사용합니다.
실제로는 쇼핑몰의 고유 주문번호를 사용해야 합니다.
*/
function initValue() {
var tmp = setTxTime();
//document.payform.MxIssueNO.value = "TEST_"+tmp;
document.payform.MxIssueNO.value = <?php echo $hp_timestamp; ?>;
document.payform.MxIssueDate.value = tmp;
}
</script>
</head>
<body onload="initValue();">
<form name="payform" accept-charset="euc-kr">
<!-- 결제 결과의 REDIRPATH 페이지 전송을 위한 parameter 시작 (수정하지 말것) -->
<input type="hidden" name="ReplyCode" value="">
<input type="hidden" name="ReplyMessage" value="">
<input type="hidden" name="CcCode" value="">
<input type="hidden" name="Installment" value="">
<!-- 결제 결과의 REDIRPATH 페이지 전송을 위한 parameter 끝 -->
<input type="hidden" name="MxID" id="MxID" value="가맹점ID">
<?php // 32byte : 가맹점 계약 시 발급되는 고유 아이디 ?>
<input type="hidden" name="URL" id="URL" value="www.happyjung.com">
<?php // 100byte : 가맹점 서버 URL (‘http://’ 제외) ?>
<input type="hidden" name="DBPATH" id="DBPATH" value="/KG_pay/dbpath.php">
<?php // 70byte : 결과 저장 DBPATH 파일 경로
// context root 부터 입력 (예: /pg/DBPATH.jsp) ?>
<input type="hidden" name="REDIRPATH" id="REDIRPATH" value="/KG_pay/result.php">
<?php // 70byte : 결과 화면 REDIRPATH 파일 경로
// context root 부터 입력 (예: /pg/REDIRPATH.jsp) ?>
<input type="hidden" name="MxIssueNO" id="MxIssueNO" value="">
<?php // 32byte : 가맹점 거래번호. (특수문자 |, &, ?, ^, % 사용 불가) ?>
<input type="hidden" name="MxIssueDate" id="MxIssueDate" value="">
<?php // 14byte : 결제 요청 시간. YYYYMMDDHH24MISS 형식 / 년월일시분초 14byte 전부 세팅해야 함 ?>
<input type="hidden" name="Currency" id="Currency" value="KRW">
<input type="hidden" name="CcMode" id="CcMode" value="11">
<?php // 2byte : 거래 종류. 11 고정 ?>
<input type="hidden" name="Smode" id="Smode" value="3001">
<?php // 4byte : 3001: DBPATH 실패 리턴 시 결제건 자동 취소. ?>
<input type="hidden" name="MSTR" id="MSTR" value="MSTR">
<?php // 1024byte : 가맹점 DBPATH로 리턴 되는 값
// 가맹점에서 추가적으로 파라미터가 필요한 경우 사용하며 &,%,?,^ 는 사용불가! (예: MSTR="a=1|b=2|c=3") ?>
<input type="hidden" name="MSTR2" id="MSTR2" value="MSTR2">
<?php // 1024byte : 가맹점 REDIRPATH로 리턴 되는 값
// 가맹점에서 추가적으로 파라미터가 필요한 경우 사용하며 &,%,?,^ 는 사용불가! (예: MSTR="a=1|b=2|c=3") ?>
<input type="hidden" name="connectionType" id="connectionType" value="http">
<?php // 5byte : 가맹점 서버 프로토콜. http 또는 https 세팅 ?>
<input type="hidden" name="dlpType" id="dlpType" value=""><?php // 2byte : 결제창의 오픈 방식
// 11 또는 미설정: 기본 값으로 팝업 오픈
// 00: 페이지 전환. 결제취소 시 결제창 종료 후 가맹점측 REDIRPATH 호출.
// * iframe 호출은 미지원 합니다. * ?>
<input type="hidden" name="AutoRedirCall" id="AutoRedirCall" value="">
<?php // 1byte : 결제완료 후 가맹점 REDIRPATH 자동 호출.
// N 또는 미설정: 기본값으로 PG사 결제완료 화면에서 [다음]을 클릭하면 가맹점측 REDIRPATH 페이지 호출
// Y: 결제 완료 후 PG사 결제완료 화면에서 곧바로 가맹점측 REDIRPATH 호출 ?>
<input type="hidden" name="signType" id="signType" value="">
<?php // byte : ?>
<input type="hidden" name="Install" id="Install" value="">
<?php // 26byte : 할부 개월 수를 지정 하고자 할 때 사용 ?>
<input type="hidden" name="BillType" id="BillType" value="">
<?php // 2byte : 매출전표 출력 시 과세/비과세 구분.
// 00: 과세, 10: 비과세 ?>
<input type="hidden" name="PAN" id="PAN" value="">
<?php // 16byte : 포인트 결제 시 해당 카드사 PAN코드 입력.
// (사전에 포인트 결제 계약이 되어 있어야 함.)
?>
<input type="hidden" name="InstallType" id="InstallType" value="">
<?php // 2byte : 할부 수수료 가맹점 부담 여부.
// (사전에 무이자 계약이 되어 있어야 함.)
// 00: 미부담, 01: 부담 ?>
<input type="hidden" name="Userid" id="Userid" value="">
<?php // 64byte : 사용자 ID ?>
<!-- 영카트4 시작 -->
<input type="hidden" name="mb_id" value="<?php echo $hp_timestamp; ?>">
<input type="hidden" name="od_id" value="<?php echo $hp_timestamp; ?>">
<input type="hidden" name="od_ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>">
<input type="hidden" name="od_hope_date" value="<?php echo date("Y-m-d"); ?>">
<input type="hidden" name="od_time" value="<?php echo date("Y-m-d H:i:s"); ?>">
<input type="hidden" name="od_settle_case" value="신용카드">
<!-- 영카트4 끝 -->
<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width=9 height=7><img src="img/line_t_left.gif"></td>
<td style="background-image:url(img/line_t_center.gif);" width="400"></td>
<td><img src="img/line_t_right.gif"></td>
</tr>
<tr>
<td background="img/line_m_left.gif"></td>
<td bgcolor="#FFFFFF"><table width="400" align="center" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="45" style="background-image:url(img/top_banner.gif); background-position:center; background-repeat:no-repeat; font-weight:bold; font-size:18px; color:#FFFFFF; text-align:center">해피정닷컴 개별결제</td>
</tr>
<tr>
<td height="20"> </td>
</tr>
<tr>
<td bgcolor="#FFFFFF" align="center" valign="top"><table width="370" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="7" height="7" style="line-height:0px;"><img src="img/inline_t_left.gif"></td>
<td style="line-height:0px;" width="556" background="img/inline_t_center.gif"></td>
<td style="line-height:0px;" width="7" height="7"><img src="img/inline_t_right.gif"></td>
</tr>
<tr>
<td style="background-image:url(img/inline_m_left.gif); background-position:left; background-repeat:repeat-y;"></td>
<td width="356" align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr style=" background-image:url(img/bg_dot.gif); background-position:bottom; background-repeat:repeat-x;">
<td colspan="2" align="left" height="30" bgcolor="#F7D9FF" style="padding-left:20px;">
<img align="absmiddle" src="img/icon_member_02.gif"> 주문 정보
</td>
</tr>
<tr style="background-image:url(img/bg_dot.gif); background-position:bottom; background-repeat:repeat-x;">
<td width="80" align="center">주문번호</td>
<td style="padding:3px 0 3px 0;"><?php echo $hp_timestamp; ?> (재주문시 키보드 F5를 누르세요)</td>
</tr>
<tr style="background-image:url(img/bg_dot.gif); background-position:bottom; background-repeat:repeat-x;">
<td width="80" align="center">상품이름</td>
<td style="padding:3px 0 3px 0;"><input type="text" name="CcProdDesc" id="CcProdDesc" style="width:150px;" value="">(회사명 또는 상품명)</td>
</tr>
<tr style="background-image:url(img/bg_dot.gif); background-position:bottom; background-repeat:repeat-x;">
<td align="center">주문자명</td>
<td style="padding:3px 0 3px 0;"><input type="text" name="CcNameOnCard" id="CcNameOnCard" style="width:100px;" value="">
(회사명 또는 담당자명)</td>
</tr>
<tr style="background-image:url(img/bg_dot.gif); background-position:bottom; background-repeat:repeat-x;">
<td align="center">전화번호</td>
<td style="padding:3px 0 3px 0;"><input type="text" name="PhoneNO" id="PhoneNO" maxlength="15" value=""></td>
</tr>
<tr style="background-image:url(img/bg_dot.gif); background-position:bottom; background-repeat:repeat-x;">
<td align="center">이 메 일</td>
<td style="padding:3px 0 3px 0;"><input type="text" name="email" id="email" style="width:200px;" value=""></td>
</tr>
<tr>
<td align="center">결제금액</td>
<td style="padding:3px 0 3px 0;"><input type="text" name="Amount" id="Amount" style="width:100px;" maxlength="8" value="">원<br>
(<span style="padding:15px 0 0 0;"> VAT 포함된 금액으로 숫자만 입력해주세요.</span>)</td>
</tr>
</table>
</td>
<td style="background-image:url(img/inline_m_right.gif);"></td>
</tr>
<tr>
<td width="7" height="7"><img src="img/inline_b_left.gif"></td>
<td style="background-image:url(img/inline_b_center.gif); background-position:bottom; background-repeat:repeat-x;"></td>
<td width="7" height="7"><img src="img/inline_b_right.gif"></td>
</tr>
</table></td>
</tr>
<tr>
<td height="15"> </td>
</tr>
<tr>
<td align="center" height="40"><input type="image" src="img/btn_payment.gif" onclick="reqPayment();"></td>
</tr>
<tr>
<td height="20"></td>
</tr>
<tr>
<td height="45" align="center" style="background-image:url(img/top_banner.gif); background-position:center; color:#FFFFFF;">Copyright(c) 1999-<?php echo date("Y"); ?> by KG Mobilians All rights reserved</td>
</tr>
</table></td>
<td style=" background-image:url(img/line_m_right.gif); background-position:right; background-repeat:repeat-y;"></td>
</tr>
<tr>
<td width="9" height="10"><img src="img/line_b_left.gif"></td>
<td style=" background-image:url(img/line_b_center.gif); background-position:bottom; background-repeat:repeat-x;"></td>
<td><img src="img/line_b_right.gif"></td>
</tr>
</table>
</form>
</body>
</html>
2. dbpath.php
<?php
/*
DBPATH 페이지는 결제가 완료되면, 결과를 전송 받아서 주문 DB에 저장 합니다.
결제 완료와 동시에 DBPATH로 결과를 전송하고, DBPATH로 부터 return 메시지가
확인이 되면, 결제 진행 중이던 결제 창은 최종 결제 완료 페이지를 출력합니다.
따라서, DBPATH가 비 정상적인 경우에는 결제 지연의 원인이 될 수 있습니다.
아래와 같은 값이 POST 방식으로 전송됩니다. 자세한 설명은 매뉴얼을 참고바랍니다.
$ReplyCode //결과 코드
$ReplyMessage //결과 메시지
$MxIssueDate //거래 일시 (결제 요청시 사용값)
$MxIssueNO //거래 번호 (결제 요청시 사용값)
$Amount //거래 금액
$Smode //결제 수단 구분 코드
$MxHASH //결과 검증값(데이터 조작 여부 확인)
$MSTR //가맹점 return 값
$CcNO //카드 번호. 9 ~ 12 자리 마스킹 처리. (신용카드 결제인 경우에만 처리)
$CcCode //카드 코드 (신용카드 결제인 경우에만 처리)
$Installment //할부 개월수 (신용카드 결제인 경우에만 처리)
$TxNO //모빌리언스 거래번호 (결제 취소일 경우 리턴하지 않음)
*/
//POST, GET 방식에 관계 없이 사용하기 위해서
if (phpversion() >= 4.2) {
if (count($_POST)) extract($_POST, EXTR_PREFIX_SAME, 'VARS_');
if (count($_GET)) extract($_GET, EXTR_PREFIX_SAME, '_GET');
}
/*
결제 정보의 위/변조 여부를 확인하기 위해,
주요 결제 정보를 MD5 암호화 알고리즘으로 HASH 처리한 MxHASH 값을 받아
동일한 규칙으로 DBPATH에서 생성한 값(output)과 비교합니다.
mxotp(접근키) 값은 최초 계약 후 서비스ID 발급 시 같이 발급되는 키로
32byte 길이의 암호화 키 입니다.
*/
$mxid = "가맹점ID"; // 가맹점 ID (고정 값 : 테스트용이므로 발급된 ID로 변경바람)
$mxotp = "접근키"; // 접근키 (고정 값 : 테스트용이므로 발급된 ID로 변경바람)
$currency = "KRW"; //화폐코드 (고정 값)
$mxissueno = $MxIssueNO; //거래 번호 (결과로 전송받은 값)
$mxissuedate = $MxIssueDate; //거래 일시 (결과로 전송받은 값)
$amount = ""; //가맹점 주문 DB에 기록되어 있는 거래금액
/*
반드시 가맹점 주문 DB에서 거래금액(amount) 값을 가져와야 합니다.
(주문 DB는 최초 결제 요청 시에 '입금대기' 상태로 기록한 초기 장바구니 정보)
예) query = "select amount01 from 주문테이블 where 거래번호='"+MxIssueNO+"', and 거래일시='"+MxIssueDate;
=> amount01;
amount = amount01;
*/
// 그누보드4 , 영카트4
include_once "../gnuboard/dbconfig.php";
$dbconn = mysql_connect("$mysql_host","$mysql_user","$mysql_password") or die("데이터베이스 연결에 실패하였습니다.");
mysql_select_db($mysql_db,$dbconn);
$query = "select od_temp_card from yc4_order where on_uid ='". $MxIssueNO ."' and od_card_time ='". $MxIssueDate ."'";
$result = mysql_query($query);
if (!$result) {
$isOK = 0;
} else {
$data = mysql_fetch_array($result);
$amount = $data["od_temp_card"];
$isOK = 1;
}
// 그누보드4 , 영카트4
$amount = $amount; // 예제 테스트를 위해 결과값을 사용 (위와 같이 주문 DB 이용바람)
/*
MD5 알고리즘을 이용한 HASH 값 생성
*/
$output = md5($mxid.$mxotp.$mxissueno.$mxissuedate.$amount.$currency);
$returnMsg = "ACK=400FAIL";
/*
105번째 라인에서 hash값이 일치하면 가맹점측 DB 업데이트 작업을 수행한 후
해당 작업이 정상적으로 완료가 되면 isOK = 1 로 세팅한다.
*/
$isOK = 0;
//$isOK = 1; //dbpath 처리 테스트 시에 임시로 가맹점 DB처리를 성공으로 하드코딩한다.
/*
MxHASH 값과 output 생성 값을 비교해서 일치하는 경우에만 결과 저장
*/
//hash값이 일치하는 경우
if($MxHASH!=null && $MxHASH==$output) {
//리턴 결과가 결제 성공인 경우
//모빌리언스 배치방식의 자동결제 2회차부터는 00004000 리턴 시 정상결제 처리를 해주시기 바랍니다.
if($ReplyCode=="00003000") {
/*
이 부분에서 주문 DB에 결과를 저장하는 소스 코딩 필요
예) $isOK = (DB 업데이트 결과);
*/
//DB 저장 성공이면
if($isOK==1) {
$returnMsg = "ACK=200OKOK";
//DB 저장 실패이면
} else {
$returnMsg = "ACK=400FAIL";
}
//리턴 결과가 결제 실패인 경우
} else {
/*
이 부분에서 주문 DB에 결과를 저장하는 소스 코딩 필요
예) $isOK = (DB 업데이트 결과);
*/
//DB 저장 성공이면
if($isOK==1) {
$returnMsg = "ACK=200OKOK";
//DB 저장 실패이면
} else {
$returnMsg = "ACK=400FAIL";
}
}
//결제 정보가 일치하지 않는 경우 : 데이타 조작의 가능성이 있으므로, 결제 취소
} else {
$returnMsg = "ACK=400FAIL";
}
?>
<?php echo $returnMsg; ?> <?php //return 메시지('ACK=200OKOK' or 'ACK=400FAIL')를 출력해야 정상 처리됩니다. ?>
3. redirpath.php
<?php
/*
결제창 종료, 구매자 결제 결과 확인 페이지(RESULT 페이지)를 호출하기 위한 페이지 입니다.
(결제 완료 -> DBPATH 결과전송 -> REDIRPATH 페이지 -> 결제창 종료-> RESULT 페이지)
$ReplyCode //결과 코드
$ReplyMessage //결과 메시지
$MxIssueDate //거래 일시 (결제 요청시 사용값)
$MxIssueNO //거래 번호 (결제 요청시 사용값)
$Amount //거래 금액
$Smode //결제 수단 구분 코드
$CLOSETYPE //가맹점 결과 페이지 호출 방법
$MSTR2 //가맹점 return 값
$CcCode //카드 코드 (신용카드 결제인 경우에만 처리)
$Installment //할부 개월수 (신용카드 결제인 경우에만 처리)
*/
//POST, GET 방식에 관계 없이 사용하기 위해서
if (phpversion() >= 4.2) {
if (count($_POST)) extract($_POST, EXTR_PREFIX_SAME, 'VARS_');
if (count($_GET)) extract($_GET, EXTR_PREFIX_SAME, '_GET');
}
$RESULTPATH = "./result.php"; // 결과 확인 페이지의 페이지명과 경로를 설정합니다.
//null 처리
if($MSTR2 == null) $MSTR2 = "";
if($ReplyMessage == null) $ReplyMessage = "";
if($CcCode == null) $CcCode = "";
if($Installment == null) $Installment = "";
?>
<!DOCTYPE html PUBLIC "-//W3C//Dtd html 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<script language="javascript">
<!--
<?php
//팝업으로 결제 페이지를 호출했을 경우
if($CLOSETYPE == "OFF") {
?>
function proceed() {
opener.document.payform.ReplyCode.value = "<?php echo $ReplyCode; ?>";
opener.document.payform.ReplyMessage.value = "<?php echo $ReplyMessage; ?>";
opener.document.payform.MxIssueDate.value = "<?php echo $MxIssueDate; ?>";
opener.document.payform.MxIssueNO.value = "<?php echo $MxIssueNO; ?>";
opener.document.payform.Amount.value = "<?php echo $Amount; ?>";
opener.document.payform.Smode.value = "<?php echo $Smode; ?>";
opener.document.payform.MSTR2.value = "<?php echo $MSTR2; ?>";
//신용카드 결제인 경우에만 주석 제거 후 사용
opener.document.payform.CcCode.value = "<?php echo $CcCode; ?>";
opener.document.payform.Installment.value = "<?php echo $Installment; ?>";
opener.document.payform.action = "<?php echo $RESULTPATH; ?>";
opener.document.payform.method = "post";
opener.document.payform.target = "_self";
opener.document.payform.submit();
self.close();
}
<?php
//페이지 전환으로 결제 페이지를 호출했을 경우
} else {
?>
function proceed(){
document.payform.action = "<?php echo $RESULTPATH; ?>";
document.payform.method = "post";
document.payform.target = "_self";
document.payform.submit();
}
<?php
}
?>
-->
</script>
</head>
<body onload="proceed();">
<form name="payform">
<input type="hidden" name="ReplyCode" value="<?php echo $ReplyCode; ?>">
<input type="hidden" name="ReplyMessage" value="<?php echo $ReplyMessage; ?>">
<input type="hidden" name="MxIssueDate" value="<?php echo $MxIssueDate; ?>">
<input type="hidden" name="MxIssueNO" value="<?php echo $MxIssueNO; ?>">
<input type="hidden" name="Amount" value="<?php echo $Amount; ?>">
<input type="hidden" name="Smode" value="<?php echo $Smode; ?>">
<input type="hidden" name="MSTR2" value="<?php echo $MSTR2; ?>">
<input type="hidden" name="CcCode" value="<?php echo $CcCode; ?>">
<input type="hidden" name="Installment" value="<?php echo $Installment; ?>">
</form>
</body>
</html>
4. result.php
<?php
/*
REDIRPATH 페이지에서 redirection 되는 구매자 결제 정보 확인 페이지 입니다.
아래와 같은 값이 전송됩니다. 자세한 설명은 매뉴얼을 참고바랍니다.
$ReplyCode //결과 코드
$ReplyMessage //결과 메시지
$MxIssueDate //거래 일시 (결제 요청시 사용값)
$MxIssueNO //거래 번호 (결제 요청시 사용값)
$Amount //거래 금액
$Smode //결제 수단 구분 코드
$CLOSETYPE //가맹점 결과 페이지 호출 방법
$MSTR2 //가맹점 return 값
$CcCode //카드 코드 (신용카드 결제인 경우에만 처리)
$Installment //할부 개월수 (신용카드 결제인 경우에만 처리)
*/
//POST, GET 방식에 관계 없이 사용하기 위해서
if (phpversion() >= 4.2) { // POST, GET 방식에 관계 없이 사용하기 위해서
if (count($_POST)) extract($_POST, EXTR_PREFIX_SAME, 'VARS_');
if (count($_GET)) extract($_GET, EXTR_PREFIX_SAME, '_GET');
}
$Sname = "";
$retPage = "";
if(Smode != null) {
if($Smode == "3001" || $Smode == "3005" || $Smode == "3007") {
$Sname = "신용카드 결제";
$retPage = "cn_web.html";
}else if($Smode == "5101") {
$Sname = "틴캐시 결제";
$retPage = "tn_web.html";
}else if($Smode == "0000") {
$Sname = "결제 취소";
$retPage = "cncl_web.html";
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//Dtd html 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<style type="text/css">
body {
scrollbar-3dlight-color:#888888;
scrollbar-arrow-color:#888888;
scrollbar-track-color:#FFFFFF;
scrollbar-darkshadow-color:#888888;
scrollbar-face-color:#FFFFFF;
scrollbar-highlight-color:#FFFFFF;
scrollbar-shadow-color:#FFFFFF
}
body { FONT-family:돋움; FONT-size:9pt;color:#000000; text-decoration:none;}
td { FONT-family:돋움; FONT-size:9pt;color:#000000; text-decoration:none;}
</style>
</head>
<body bgcolor="#ffffff" leftmargin="10" topmargin="10" marginwidth="0" marginheight="0">
<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width=9 height=7 ><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_t_left.gif"></td>
<td width="600" background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_t_center.gif"></td>
<td><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_t_right.gif"></td>
</tr>
<tr>
<td background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_m_left.gif"></td>
<td bgcolor="#FFFFFF" align="center" width="600">
<table width="100%" align="center" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/top_banner.gif"></td>
</tr>
<tr>
<td height="20"> </td>
</tr>
<tr>
<td bgcolor="#FFFFFF" align="center" valign="top">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right" height="30"><b>요청 결과</b> (<?php echo $Sname; ?>) : </td>
<?php if($ReplyCode == "00003000") { ?>
<td align="left" height="30"> 성공했습니다.</td>
<?php } else{ ?>
<td align="left" height="30"> 실패했습니다.</td>
<?php } ?>
</tr>
</table>
</td>
</tr>
<tr>
<td height="20"> </td>
</tr>
<tr>
<td width="100%" bgcolor="#FFFFFF" align="center" valign="top">
<table align="center" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="20"> <td>
<td width="560">
<table align="center" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="7" height="7"><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_t_left.gif"></td>
<td width="546" background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_t_center.gif"></td>
<td width="7" height="7"><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_t_right.gif"></td>
</tr>
<tr>
<td background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_m_left.gif"></td>
<td width="546" align="center">
<!--결제 내역-->
<table width="100%" align="center" border="0" cellspacing="0" cellpadding="0">
<tr>
<td colspan="2" align="center" height="30" bgcolor="#F7D9FF">
<img align="absmiddle" src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/icon_member_02.gif">
<font style="color:black;"> 결과 확인</font>
</td>
</tr>
<tr>
<td width="45%" align="right" height="20">거래번호 : </td>
<td width="55%" align="left" height="20"> <?php echo $MxIssueNO; ?></td>
</tr>
<tr><td height="1" colspan="2" background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/bg_dot.gif"></td></tr>
<tr>
<td width="45%" align="right" height="20">거래일자 : </td>
<td width="55%" align="left" height="20"> <?php echo $MxIssueDate; ?></td>
</tr>
<tr><td height="1" colspan="2" background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/bg_dot.gif"></td></tr>
<tr>
<td width="45%" align="right" height="20">결제금액 : </td>
<td width="55%" align="left" height="20"> <?php echo $Amount; ?> 원</td>
</tr>
<tr><td height="1" colspan="2" background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/bg_dot.gif"></td></tr>
<tr>
<td width="45%" align="right" height="20">결과코드 : </td>
<td width="55%" align="left" height="20"> <?php echo $ReplyCode; ?></td>
</tr>
<tr><td height="1" colspan="2" background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/bg_dot.gif"></td></tr>
<tr>
<td width="45%" align="right" height="20">결과메시지 : </td>
<td width="55%" align="left" height="20"> <?php echo $ReplyMessage; ?></td>
</tr>
</table>
</td>
<!--결제 내역 끝-->
<td background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_m_right.gif"></td>
</tr>
<tr>
<td width="7" height="7"><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_b_left.gif"></td>
<td background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_b_center.gif"></td>
<td width="7" height="7"><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/inline_b_right.gif"></td>
</tr>
</table>
</td>
<td width="20"> </td>
</tr>
</table>
</td>
</tr>
<tr><td> </td></tr>
<tr>
<td height="46" align="center" valign="middle">
<a href="<?php echo $retPage; ?>"><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/btn_payresult.gif" border="0"></a>
</td>
</tr>
<tr><td> </td></tr>
<tr>
<td><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/allright.gif"></td>
</tr>
</table>
</td>
<td background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_m_right.gif"></td>
</tr>
<tr>
<td width=9 height=10><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_b_left.gif"></td>
<td background="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_b_center.gif"></td>
<td><img src="https://pg.mcash.co.kr/dlp/nondlp/cpguide/line_b_right.gif"></td>
</tr>
</table>
</body>
</html>
댓글목록
등록된 댓글이 없습니다.