이니시스 모바일 결제 프로그램 정리
KG INICIS(이니시스 로고)
처리 언어 : PHP 5.3
업체에서 아직 5.3 버전을 사용중이고, MySQL 의 경우 mysqli 또는 PDO가 아닌 예전 API를 사용중입니다. 적절히 코드를 바꿔 주시기 바랍니다.
준비물(이니시스 회원가입 필요)
이니시스 모바일결제 매뉴얼 - 메뉴 중 INIpay(Mobile)
먼저 프로그램에 들어가기전에 매뉴얼을 2~3회 읽어주세요.
솔직히 읽어봐도 도통 무슨 말인지 정말이지 모르겠더라구요.
부족한 매뉴얼 이지만 보면서 하나하나 적용해보니 이해할 수 있었습니다.
결제방법에 따른 결제 진행방법(이게 정말 이해가 안가더라구요.무조건 직접 해 봐야 이해가 갑니다.)
- 신용카드 : (쇼핑몰)결제폼에서 결제버튼 클릭 -> (이니시스)인증시스템 접속 -> (이니시스)인증 후 결제프로그램 실행(각 카드사의 앱이 실행됨) -> (이니시스)카드앱에서 결제완료 -> (이니시스)P_NOTI_URL로 결과값 전송 -> (쇼핑몰)P_NOTI_URL에서 전송결과 내용받아 DB저장 또는 실패처리 -> (쇼핑몰)P_RETURN_URL로 이동(완료)
- 계좌이체 : (쇼핑몰)결제폼에서 결제버튼 클릭 -> (이니시스)인증시스템 접속 -> (이니시스)인증 후 결제프로그램(금융결제원의 BankPayPG 앱) 실행 또는 (만약 금융결제원의 BankPayPG 앱이 설치 안되어 있다면 설치)결제완료 -> (이니시스)P_NOTI_URL로 결과값 전송 -> (쇼핑몰)P_NOTI_URL에서 전송결과 내용받아 DB저장 또는 실패처리 -> (쇼핑몰)P_RETURN_URL로 이동(완료)
- 가상계좌 : (쇼핑몰)결제폼에서 결제버튼 클릭 -> (이니시스)인증시스템 접속 -> (이니시스)인증 후 P_NEXT_URL에 가상계자 보여줌 -> (이니시스)P_NOTI_URL로 가상계좌 결제 완료여부 전송(입금통보/채번등) -> (쇼핑몰)P_NOTI_URL에서 전송결과 내용받아 입금완료일 경우에만 DB저장 후 echo "OK" / 나머지는 그냥 패스(echo "FAIL";) -> (쇼핑몰)P_RETURN_URL로 이동(완료)
다른 결제수단은 업체에서 필요없다해서 작업을 진행하지 않았고, 가상계좌나 계좌이체는 결제하기 번거롭다고 사용하지 않더라구요.
폼 작성하기
폼은 매뉴얼에 나와있는대로 해도되고, 결제데모(샘플)에 접속해서, 이니페이 모바일(스마트폰용) 결제샘플 페이지의 소스보기를 이용해 작성하셔도 됩니다.
전 소스보기를 이용해서 보시기를 추천드립니다.
소스 전체를 적기에는 너무 기니 간단히 중요한 부분만 요약하겠습니다.
결제시스템 자체가 EUC-KR 인코딩을 사용합니다. 따라서 보통 요즘 UTF-8과 호환이 껄끄롭습니다.
폼 시작부분에
<form name="ini" id="ini" method="post" action="">
부분이 있습니다. 이걸 아래처럼 변경해 주세요.
<form name="ini" id="ini" method="post" action="" accept-charset="EUC-KR">
폼의 값들을 지정한 인코딩형식으로 보냅니다.
요즘 대부분의 사이트는 UTF-8로 제작됩니다. 하지만 이니시스의 시스템은 예전 EUC-KR 을 많이 사용하던 시절에 만들어진 것이 되다보니, 여전히 EUC-KR을 사용중입니다.
분명 시스템을 UTF-8로 변경하는데 문제가 있기 때문에 변경을 못하는 것으로 보입니다.
그래서 이때까지는 폼을 넘길 때 iconv를 이용했었는데, 그렇게 보내도 받을 때 글자가 깨져 보이는 경우가 많더라구요.
그런데 위 처럼 폼 자체의 내용을 EUC-KR로 강제지정해 두면 따로 iconv 해서 보낼 필요가 없더군요.
나중에 결과값을 받을 때만 iconv를 사용해서 UTF-8 형식으로 변환해 주면 됩니다.
<!-- 테스트 완료시 가맹점ID로 변경 -->
<input type="hidden" name="P_MID" value="INIpayTest">
<!-- <input type="hidden" name="P_MID" value="가맹점ID"> -->
<input type=hidden name="inipaymobile_type" value="web">
<!--
가상계좌에서 사용되는 주소
P_NEXT_URL : 결제가 진행되는 동안 이니시스에서 우리쪽으로 송신만 하는 주소.
즉 채번(가상계좌번호 받기) 송신만 하지 수신은 안함. 송신 시 전달하는 Parameter 는 아래와 같습니다.
P_STATUS : 인증상태 성공시 00, 그 외 실패
P_RMESG1 : 결과메시지
P_TID : 인증거래번호 Char(40) / 성공시에만 반환
P_REQ_URL(승인요청 Url) : 가맹점에서 이니페이모바일로 승인요청을 할 때, 사용되는 Url입니다. 거래 건 마다 상이한 URL 이 전달됩니다. 따라서, 절대 고정하여 사용하지 마십시오. Http Scheme 은 https 를 사용합니다.(http를 사용함에 발생하는 문제에 대해서는 책임 안진다 함)
P_NOTI(기타주문정보) : 최초 거래시 주문정보에 P_NOTI 를 설정하셨다면, 그 값을 전달받을 수 있습니다. 이 값은 P_NOTI 값을 그대로 리턴.->P_OID 값이 이상하게 넘어온다면 여기에다가 P_OID 를 넣어서 전송하면 됨.
-->
<input type=hidden name="P_NEXT_URL" value="http://www.example.com/cart/pay_next.php?oid=<?php echo $oid?>">
<input type="hidden" name="P_NOTI" value="<?php echo $oid;?>">
<!--
계좌이체, 신용카드 결제에서 사용되는 주소
P_NOTI_URL : 결제가 완료되면 이 URL로 이니시스가 정보를 보내고, 우리는 여기서 DB 저장까지 처리해야 한다.
단 네트워크 불안정으로 인해 이니시스에서 정보를 제공받지 못하면 다시 요청하므로 우리는 이 페이지에서 중복체크에 대한 방안을 모색해야 한다.
즉 P_OID 또는 P_TID를 체크해서 이미 결제 완료된 내역이면 OK를 찍어 보여줘야 하는것이다.
그 이후(OK 가 찍힌 이후) P_RETURN_URL로 URL이 자동으로 변경된다.
-->
<input type=hidden name="P_NOTI_URL" value="http://www.example.com/cart/pay_noti.php">
<input type=hidden name="P_RETURN_URL" value="http://www.example.com/cart/pay_result.php">
<!-- 매뉴얼에서는 지원하지 않는다고 나오는데...도대체 왜 있는지 모르겠음... -->
<input type=hidden name="P_CANCEL_URL" value="http://www.example.com/cart/pay_cancel.php">
<!--
신용카드 결재시 필히 적어줘야 하는 부분
자세한 내용은 매뉴얼 참고 : 페이지 10 쪽 ~ 11쪽
-->
<input type=hidden name="P_RESERVED" value="twotrs_isp=Y&block_isp=Y&twotrs_isp_noti=N&ismart_use_sign=Y&vbank_receipt=Y&bank_receipt=N&apprun_check=Y">
<!-- 상점이름 : 없어도 됨 -->
<!-- <input type=hidden name="P_MNAME" value="INIpay"> -->
나머지는 매뉴얼에 나와있는대로 하시면 됩니다.
저 같은 경우엔 P_OID (상점주문번호) 를 넘겼는데, 제대로 돌아오지 않아 P_NOTI에 P_OID를 넣어서 보내고 결과로 받아 처리했습니다.
왜 그런지 모르겠더군요. 혹시라도 P_OID가 제대로 안넘어 온다면 위 처럼 하시면 됩니다.
그 외 자세한 설정은 매뉴얼을 필히 참고하시기 바랍니다.
P_NOTI_URL(pay_noti.php) - 신용카드, 계좌이체 결제 인증 후 P_NOTI_URL로 값이 넘어왔을 경우 처리
매뉴얼에 나와있는 부분에서 저에게 맞게 수정했습니다.
DB 입력, 업데이트등의 쿼리문은 자신의 프로그램에 맞게 수정하시기 바랍니다.
<?php
//*******************************************************************************
// FILE NAME : mx_rnoti.php
// FILE DESCRIPTION :
// 이니시스 smart phone - 가상계좌, ISP 결제 결과 수신 페이지 샘플
// 기술문의 : ts@inicis.com
// HISTORY
// 2010. 02. 25 최초작성
// 2010 06. 23 WEB 방식의 가상계좌 사용시 가상계좌 채번 결과 무시 처리 추가(APP 방식은 해당 없음!!)
// WEB 방식일 경우 이미 P_NEXT_URL 에서 채번 결과를 전달 하였으므로,
// 이니시스에서 전달하는 가상계좌 채번 결과 내용을 무시 하시기 바랍니다.
//*******************************************************************************
$PGIP = $_SERVER['REMOTE_ADDR'];
if($PGIP == "211.219.96.165" || $PGIP == "118.129.210.25") //PG에서 보냈는지 IP로 체크
{
// 이니시스 NOTI 서버에서 받은 Value
$P_TID = ''; // 1 거래번호
$P_MID = ''; // 2 상점아이디
$P_AUTH_DT = ''; // 3 승인일자
$P_STATUS = ''; // 4 거래상태 (00:성공, 01:실패)
$P_TYPE = ''; // 5 지불수단
$P_OID = ''; // 6 상점주문번호
$P_FN_CD1 = ''; // 7 금융사코드1
$P_FN_CD2 = ''; // 8 금융사코드2
$P_FN_NM = ''; // 9 금융사명 (은행명, 카드사명, 이통사명)
$P_AMT = ''; // 10 거래금액
$P_UNAME = ''; // 11 결제고객성명
$P_RMESG1 = ''; // 12 결과코드
$P_RMESG2 = ''; // 13 결과메시지
$P_NOTI = ''; // 14 노티메시지(상점에서 올린 메시지)
$P_AUTH_NO = ''; // 15 승인번호
$P_TID = $_REQUEST['P_TID'];
$P_MID = $_REQUEST['P_MID'];
$P_AUTH_DT = $_REQUEST['P_AUTH_DT'];
$P_STATUS = $_REQUEST['P_STATUS'];
$P_TYPE = $_REQUEST['P_TYPE'];
$P_OID = $_REQUEST['P_OID'];
$P_FN_CD1 = $_REQUEST['P_FN_CD1'];
$P_FN_CD2 = $_REQUEST['P_FN_CD2'];
$P_FN_NM = $_REQUEST['P_FN_NM'];
$P_AMT = $_REQUEST['P_AMT'];
$P_UNAME = $_REQUEST['P_UNAME'];
$P_RMESG1 = $_REQUEST['P_RMESG1'];
$P_RMESG2 = $_REQUEST['P_RMESG2'];
$P_NOTI = $_REQUEST['P_NOTI'];
$P_AUTH_NO = $_REQUEST['P_AUTH_NO'];
// $oid = $P_OID; //주문번호
$oid = $P_NOTI; //주문번호 $P_OID 값이 이상하게 넘어와서 이걸 대신 씀
$P_ApplDate = substr($P_AUTH_DT, 0, 8); #이니시스 승인날짜
$P_ApplTime = substr($P_AUTH_DT, 8); #이니시스 승인시각
/**********************************************
* Start : 가상계좌의 경우 처리
* 업체에서 가상계좌를 요청했지만 사용하지않아 테스트는 못해봤습니다.
* 아마 문제 없지 싶습니다.
**********************************************/
//WEB 방식의 경우 가상계좌 채번 결과 무시 처리
//(APP 방식의 경우 해당 내용을 삭제 또는 주석 처리 하시기 바랍니다.)
if($P_TYPE == "VBANK") //결제수단이 가상계좌이며
{
if($P_STATUS == "02") //입금통보 "02" 가 아니면(가상계좌 채번 : 00 또는 01 경우)
{
$qry = "UPDATE cart SET payResult='결제완료'";
$qry .= " , PayMethod='".escapeString($P_TYPE)."'"; #결제방법
$qry .= " , ApplDate='".escapeString($P_ApplDate)."'"; #이니시스 승인날짜
$qry .= " , ApplTime='".escapeString($P_ApplTime)."'"; #이니시스 승인시각
$qry .= " , ResultCode='".escapeString($P_STATUS)."'"; #결과코드
$qry .= " , ResultMsg='".escapeString($P_RMESG1)."'"; #결과메시지
$qry .= " WHERE oid='".$oid."' AND TID='".$P_TID."'";
$obj->query($qry , "N");
echo "OK";
return;
}
if($P_STATUS != "02") //입금통보 "02" 가 아니면(가상계좌 채번 : 00 또는 01 경우)
{
echo "OK";
return;
}
}
/**********************************************
* End : 가상계좌의 경우 처리
**********************************************/
$PageCall_time = date("H:i:s");
$value = array(
"PageCall time" => $PageCall_time,
"P_TID" => $P_TID,
"P_MID" => $P_MID,
"P_AUTH_DT" => $P_AUTH_DT,
"P_STATUS" => $P_STATUS,
"P_TYPE" => $P_TYPE,
"P_OID" => $P_OID,
"P_FN_CD1" => $P_FN_CD1,
"P_FN_CD2" => $P_FN_CD2,
"P_FN_NM" => $P_FN_NM,
"P_AMT" => $P_AMT,
"P_UNAME" => $P_UNAME,
"P_RMESG1" => $P_RMESG1,
"P_RMESG2" => $P_RMESG2,
"P_NOTI" => $P_NOTI,
"P_AUTH_NO" => $P_AUTH_NO
);
// 결제처리에 관한 로그 기록
writeLog($value);
/**********************************************
* Start : DB입력 구문이 들어와야 함.
**********************************************/
// 결제가 정상적으로 이뤄졌다면
if ( $P_STATUS=='00' ) {
$P_CSHR_ResultCode = '';
$P_CSHR_Type = '';
$P_CARD_INTEREST = $_REQUEST['P_CARD_INTEREST'];
$P_CARD_ISSUER_CODE = $_REQUEST['P_CARD_ISSUER_CODE'];
$P_CARD_AuthType = $_REQUEST['P_CARD_AuthType'];
$P_EVENT_CODE = $_REQUEST['P_EVENT_CODE'];
$P_ResultErrorCode = $_REQUEST['P_ResultErrorCode'];
// oid(주문번호)와 TID(거래번호)가 NULL 인 것에만 입력해야 함.
// 이미 있다면 입력하지않고 바로 OK 를 출력.
$qry = $obj->query("SELECT COUNT(*) AS CNT FROM cart WHERE oid='".$oid."' AND TID = '".$P_TID."'" ,"N");
$res = $obj->fetch_assoc($qry);
if($res['CNT']==0) {
$payResult = '결제완료';
$qry = "UPDATE cart SET";
$qry .= " payResult='".$payResult."' ";
if ($P_TYPE == "BANK") {
$qry .= " , ACCT_BankCode='".escapeString($P_FN_CD1)."'"; #실시간 계좌이체 - 은행코드
$qry .= " , CSHR_ResultCode='".escapeString($P_CSHR_ResultCode)."'"; #실시간 계좌이체 - 현금영수증 발행결과코드
$qry .= " , CSHR_Type='".escapeString($P_CSHR_Type)."'"; #실시간 계좌이체 - 현금영수증 발행구분코드
} else if ($P_TYPE == "CARD") {
$qry .= " , ApplNum='".escapeString($P_AUTH_NO)."'"; #신용카드 승인번호
$qry .= " , CARD_Quota='".escapeString($P_RMESG2)."'"; #할부기간
$qry .= " , CARD_Interest='".escapeString($P_CARD_INTEREST)."'"; #1이면 무이자 할부
$qry .= " , CARD_Code='".escapeString($P_FN_CD1)."'"; #신용카드사 코드
$qry .= " , CARD_BankCode='".escapeString($P_CARD_ISSUER_CODE)."'"; #카드발급사 코드
$qry .= " , CARD_AuthType='".escapeString($P_CARD_AuthType)."'"; #본인인증 수행여부(00 이면 수행)
$qry .= " , EventCode='".escapeString($P_EVENT_CODE)."'"; #각종 이벤트 적용여부
}
$qry .= " , TID='".escapeString($P_TID)."'"; #거래번호
$qry .= " , PayMethod='".escapeString($P_TYPE)."'"; #결제방법
$qry .= " , ApplDate='".escapeString($P_ApplDate)."'"; #이니시스 승인날짜
$qry .= " , ApplTime='".escapeString($P_ApplTime)."'"; #이니시스 승인시각
$qry .= " , ResultCode='".escapeString($P_STATUS)."'"; #결과코드
$qry .= " , ResultMsg='".escapeString($P_RMESG1)."'"; #결과메시지
$qry .= " WHERE oid='".$oid."'";
$obj->query($qry , "N");
}
/***********************************************************************************
' 위에서 상점 데이터베이스에 등록 성공유무에 따라서 성공시에는 "OK"를 이니시스로 실패시는 "FAIL" 을
' 리턴하셔야합니다. 아래 조건에 데이터베이스 성공시 받는 FLAG 변수를 넣으세요
' (주의) OK를 리턴하지 않으시면 이니시스 지불 서버는 "OK"를 수신할때까지 계속 재전송을 시도합니다
' 기타 다른 형태의 echo "" 는 하지 않으시기 바랍니다
'***********************************************************************************/
echo "OK"; //절대로 지우지 마세요
} else {
$obj->query("UPDATE cart SET payResult='결제실패' WHERE oid='".$oid."'" , "N");
echo "FAIL";
}
/**********************************************
* End : DB입력 구문이 들어와야 함.
**********************************************/
}
//로그 작성을 위해 결제가 되는 경로상에 "Log" 디렉토리를 만들고 707 로 권한을 바꿔주셔야 합니다.
function writeLog($msg)
{
$file = "./Log/noti_input_".date("Ymd").".log";
if(!($fp = fopen($file, "a+"))) return 0;
ob_start();
print_r($msg);
$ob_msg = ob_get_contents();
ob_clean();
if(fwrite($fp, " ".$ob_msg."\n") === FALSE)
{
fclose($fp);
return 0;
}
fclose($fp);
return 1;
}
//injection 방어
function escapeString($str) {
$result = "";
$str = trim($str);
if( $str <> '' ) $result = mysql_real_escape_string($str);
return $result;
}
?>
P_NOTI_URL(pay_noti.php) - 가상계좌 처리
결제페이지에서 결제를 하게되면 인증을 거친 후 이니시스에서 가상계좌번호 페이지를 생성($P_REQ_URL)합니다.
쇼핑몰에서는 이 이니시스의 가상계좌번호 페이지를 읽어와서 쇼핑몰의 페이지에 보여줘야 합니다.
<?php
/**********************************************
* 이니시스 NOTI 서버에서 받은 Value
**********************************************/
$P_STATUS = ''; // 거래상태 (00:성공, 01:실패)
$P_RMESG1 = ''; // 가상계좌번호, 입금기한
$P_TID = ''; // 거래번호
$P_REQ_URL = ''; // 이니시스 URL(고치면 안됨)
$P_NOTI = ''; // OID 대신 여기에 넣어서 넘김
$P_STATUS = $_POST['P_STATUS'];
$P_RMESG1 = iconv('euc-kr', 'utf-8', $_POST['P_RMESG1']); // 넘어오는 값은 EUC-KR 이다, 이것을 UTF-8 로 변경해야 한다.
$P_TID = $_POST['P_TID'];
$P_REQ_URL = $_POST['P_REQ_URL'];
$P_NOTI = $_POST['P_NOTI'];
/**********************************************
* 이 정보를 토대로 P_STATUS가 00(정상 승인)이면
* P_REQ_URL의 페이지를 긁어서 가상계좌 번호를 고객에게 보여주라는 이야기임.
**********************************************/
/*
//결제정보 찍어보기
echo 'P_STATUS : '.$P_STATUS.'<BR>';
echo 'P_RMESG1 : '.$P_RMESG1.'<BR>';
echo 'P_TID : '.$P_TID.'<BR>';
echo 'P_REQ_URL : '.$P_REQ_URL.'<BR>';
echo 'P_NOTI : '.$P_NOTI.'<BR>';
//결제정보 모두 찍어보기
PRINT_R($_REQUEST);
*/
if ($P_STATUS === '00') {
//페이지를 읽어오기위해 curl 을 사용합니다.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $P_REQ_URL);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'P_MID=INIpayTest&P_TID='.$P_TID) ; // P_MID=INIpayTest 에서 INIpayTest 를 쇼핑몰에 맞게 수정 할 것
$vbank = iconv('euc-kr', 'utf-8', curl_exec($ch)); //이니시스의 페이지는 EUC-KR이므로 UTF-8로 변환
curl_close($ch);
$data = array();
parse_str($vbank, $data);
//셋팅된 가격과 결제금액이 맞는지 체크
$qry = $obj->query("SELECT price FROM cart WHERE oid = '".$_GET['oid']."'" ,"N");
$res = $obj->fetch_assoc($qry);
if ($data['P_STATUS'] == '00' && (int)$res['price'] === (int)$data['P_AMT']) {
$payMethod = $data['P_TYPE'];
?>
<p>
<strong>아래 계좌로 결제금액을 입금하시면 결제가 완료 됩니다.</strong><br><br>
선택한 은행 : <?php echo getBankName($data['P_VACT_BANK_CODE']); ?><br>
계좌번호 : <?php echo $data['P_VACT_NUM']; ?><br>
입급 기한 :
<?php echo substr($data['P_VACT_DATE'], 0, 4);?>년
<?php echo substr($data['P_VACT_DATE'], 4, 2);?>월
<?php echo substr($data['P_VACT_DATE'], 6, 2);?>일
<?php echo substr($data['P_VACT_TIME'], 0, 2);?>:<?php echo substr($data['P_VACT_TIME'], 2, 2);?>:<?php echo substr($data['P_VACT_TIME'], 4, 2);?><br>
계좌이름 : <?php echo $data['P_VACT_NAME']; ?>
</p>
<?php
/*
echo 'P_STATUS : '.$data['P_STATUS'].'<BR>';
echo 'P_AUTH_DB : '.$data['P_AUTH_DB'].'<BR>';
echo 'P_AUTH_NO : '.$data['P_AUTH_NO'].'<BR>';
echo 'P_RMESG1 : '.$data['P_RMESG1'].'<BR>';
echo 'P_RMESG2 : '.$data['P_RMESG2'].'<BR>';
echo 'P_TID : '.$data['P_TID'].'<BR>';
echo 'P_FN_CD1 : '.$data['P_FN_CD1'].'<BR>';
echo 'P_AMT : '.$data['P_AMT'].'<BR>';
echo 'P_TYPE : '.$data['P_TYPE'].'<BR>';
echo 'P_UNAME : '.$data['P_UNAME'].'<BR>';
echo 'P_MID : '.$data['P_MID'].'<BR>';
echo 'P_OID : '.$data['P_OID'].'<BR>';
echo 'P_NOTI : '.$data['P_NOTI'].'<BR>';
echo 'P_NEXT_URL : '.$data['P_NEXT_URL'].'<BR>';
echo 'P_MANME : '.$data['P_MNAME'].'<BR>';
echo 'P_NOTEURL : '.$data['P_NOTiURL'].'<BR>';
echo 'P_VACT_NUM : '.$data['P_VACT_NUM'].'<BR>';
echo 'P_VACT_DATE : '.$data['P_VACT_DATE'].'<BR>';
echo 'P_VACT_TIME : '.$data['P_VACT_TIME'].'<BR>';
echo 'P_VACT_NAME : '.$data['P_VACT_NAME'].'<BR>';
echo 'P_VACT_BANK_CODE : '.$data['P_VACT_BANK_CODE'].'<BR>';
*/
/**********************************************
* P_NOTI_URL에서 입금완료 시 처리해 주기위해 입력
**********************************************/
$qry = "UPDATE cart SET";
$qry .= " payResult='입금대기' ";
$qry .= " , VACT_Num='".escapeString($data['P_VACT_NUM'])."'"; #무통장 입금 - 가상계좌 번호
$qry .= " , VACT_BankCode='".escapeString($data['P_VACT_BANK_CODE'])."'"; #무통장 입금 - 입금할 은행 코드
$qry .= " , VACT_Date='".escapeString($data['P_VACT_DATE'])."'"; #무통장 입금 - 입금예정일
$qry .= " , VACT_InputName='".escapeString($data['P_UNAME'])."'"; #무통장 입금 - 송금자 명
$qry .= " , VACT_Name='".escapeString($data['P_VACT_NAME'])."'"; #무통장 입금 - 예금주 명
$qry .= " , TID='".escapeString($data['P_TID'])."'"; #거래번호
$qry .= " , PayMethod='".escapeString($payMethod)."'"; #결제방법
$qry .= " , ApplDate='".escapeString($data['P_ApplDate'])."'"; #이니시스 승인날짜
$qry .= " , ApplTime='".escapeString($data['P_ApplTime'])."'"; #이니시스 승인시각
$qry .= " , ResultCode='".escapeString($data['P_STATUS'])."'"; #결과코드
$qry .= " , ResultMsg='".escapeString($data['P_RMESG1'])."'"; #결과메시지
$qry .= " WHERE oid='".$oid."'";
$obj->query($qry , "N");
} else {
?>
<p>
<h1>결제 오류</h1>
불편을 드려 죄송합니다.<br>
현재 네트워크 사정이 좋지 않거나, 결제 시스템에 문제가 있을 수 있으니 고객센터로 문의 주시면 조속히 처리해 드리겠습니다.
</p>
<?php
$qry = "UPDATE cart SET payResult='결제실패' WHERE oid='".$oid."'";
$obj->query($qry , "N");
}
}
?>
여기서 사용자가 지정된 가상계좌로 입금을 하게 된다면, 이니시스에선 P_NOTI_URL로 입금결과를 통보하게 됩니다.
그 이후는 위의 P_NOTI_URL에서 처리가 됩니다.
이로써 이니시스의 모바일결제에 대한 마무리가 되었습니다.
추신.
다른 결제수단은 업체에서 요청이 없는 관계로 패스했습니다.
테스트 가맹점으로 실제 결제 테스트 시, 신용카드와 계좌이체는 그날 밤 10시 30분 부터 12시 안에 자동으로 취소가 됩니다.
하지만 가상계좌의 경우 취소 또는 환불이 어렵다고하니, 가상계좌 테스트시에는 필히 가맹점 ID로 변경하시고 결제테스트를 하시기 바랍니다.
'프로그래밍 > PHP' 카테고리의 다른 글
[메모]쿠키(Cookie)에 대하여 (0) | 2016.06.12 |
---|---|
HTTP 응답 상태코드 범주 및 상태코드 (0) | 2016.06.10 |
구글, 다음, 네이버 주소로 찾은 위도, 경도의 결과값이 다름 (0) | 2016.05.31 |
MariaDB 자료형중 Decimal (0) | 2016.05.29 |
PHP의 생소한 출력값 - Resource id #5 (0) | 2016.05.24 |