전자결제 [이니시스] [PHP] 모바일결제
페이지 정보
본문
처음작성 : 2015-12-30 22:20:24
1. 장바구니 : / shop / cart.php : utf-8
<?php
$P_OID = date("Ymd") . '-' . substr(time() . '-' . md5(microtime()), 0, 23); // 32 byte
?>
<form name="wcart" method="post">
<input type="hidden" name="P_oid" value="<?php echo $P_oid; ?>">
2. 결제페이지 구성 예제 : / shop / pay.php : utf-8
<?php
$P_OID = $_POST["P_OID"];
?>
<meta http-equiv=”Content-Type” content=”text/html;charset=utf-8”>
<script>
function formSubmit(){
document.getElementById(“form1”).submit();
}
</script>
<form id=”form1” name=”form1” method=”post” action=”지불수단URL” accept-charset="EUC-KR">
<!--
요즘 대부분의 사이트는 UTF-8로 제작됩니다. 하지만 이니시스의 시스템은 예전 EUC-KR을 사용중이므로
accept-charset="EUC-KR" 을 선언해서 폼의 값들을 euc-kr 인코딩형식으로 보냅니다.
나중에 결과값을 받을 때만 iconv를 사용해서 UTF-8 형식으로 변환합니다.
결과값 받을때 $name = iconv("UTF-8","EUC-KR",$P_UNAME);
-->
<input type=hidden name="inipaymobile_type" value="web">
<input type="hidden" name="P_MID" value="INIpayTest"> <!-- 테스트 완료시 가맹점ID로 변경 -->
<input type="hidden" name="P_MNAME" value="상점이름" /><!-- 상점이름-->
<input type=”hidden” name=”P_GOODS” value=”테스트상품” />
<input type=”hidden” name=”P_MID” value=”상점아이디” />
<input type=”hidden” name=”P_AMT” value=”상품가격” />
<input type=”hidden” name=”P_OID” value=”<?php echo $P_OID;?>” />
<input type=”hidden” name=”P_EMAIL” value=”abc@abc.com” />
<input type=”hidden” name=”P_UNAME” value=”구매자명” />
<input type="hidden" name="P_NOTI" value="<?php echo $P_OID;?>">
<input type="hidden" name="P_NOTI_URL" value="http://쇼핑몰/shop/INIpayMobile_rnoti.php">
<input type="hidden" name="P_RETURN_URL" value="http://쇼핑몰/shop/pay_result.php?OID=<?php echo $P_OID; ?>">
<input type="hidden" name="P_RESERVED" value="twotrs_isp=Y&block_isp=Y&twotrs_isp_noti=N&cp_yn=Y&bank_receipt=N&apprun_check=Y&xtension_enable=Y">
<input type="hidden" name="P_HPP_METHOD" value="1"><!-- 컨텐츠 1 / 실물 2-->
<input type=”button” onclick=”formSubmit();” />
</form>
3. 디비 결제 테이블 칼럼 추가
payResult // varchar(20)
P_UNAME = $P_UNAME // 결제고객성명 varchar(30)
ACCT_BankCode = $P_FN_CD1 // 실시간 계좌이체 - 은행코드
CSHR_ResultCode = $P_CSHR_ResultCode // 실시간 계좌이체 - 현금영수증 발행결과코드
CSHR_Type = $P_CSHR_Type // 실시간 계좌이체 - 현금영수증 발행구분코드
ApplNum = $P_AUTH_NO // 신용카드 승인번호 varchar(30)
CARD_Quota = $P_RMESG2 // 할부기간 varchar(2)
CARD_Interest = $P_CARD_INTEREST // 1이면 무이자 할부 varchar(2)
CARD_Code = $P_FN_CD1 // 신용카드사 코드 char(4)
CARD_BankCode = $P_CARD_ISSUER_CODE // 카드발급사 코드
CARD_AuthType = P_CARD_AuthType // 본인인증 수행여부(00 이면 수행) varchar(2)
EventCode = $P_EVENT_CODE // 각종 이벤트 적용여부
TID = $P_TID // 거래번호 char(40)
PayMethod = $P_TYPE // 결제방법 BANK : 실시간 계좌이체 , CARD : 신용카드 varchar(10)
ApplDate = $P_ApplDate // 이니시스 승인날짜
ApplTime = $P_ApplTime // 이니시스 승인시각
ResultCode = $P_STATUS // 결과코드
ResultMsg = $P_RMESG1 // 결과메시지
4. 결제 자료 받기
4-1. Transaction 거래의 경우, “ 결제창 Open (주문정보 전달) – 접속 주소 및 일반필드 장 에 기재된, P_NEXT_URL 로 인증결과를 전달합니다.
이때 이니페이모바일TM 에서 P_NEXT_URL 로 전달하는 Parameter 는 다음과 같습니다.
P_STATUS : 인증상태 : 성공시 00, 그 외 실패
P_RMESG1 : 결과메시지
P_TID : 인증거래번호 : Char(40) / 성공시에만 반환
P_REQ_URL : 승인요청 Url
가맹점에서 이니페이모바일로 승인요청을 할 때, 사용되는 Url 입니다.
거래 건 마다 상이한 URL 이 전달됩니다.
따라서, 절대 고정하여 사용하지 마십시오.
Http Scheme 은 https 를 사용합니다.
P_NOTI : 기타주문정보
최초 거래시 주문정보에 P_NOTI 를 설정하셨다면, 그 값을 전달받을 수 있습니다.
이 값은 P_NOTI 값을 그대로 리턴합니다.
4-2. 이니시스 NOTI 서버에서 받은 Value
$P_STATUS; // 거래상태 (00:성공, 그외:실패)
$P_TID; // 거래번호 char(40)
$P_TYPE; // 지불수단 char(10)
$P_AUTH_DT; // 승인일자 char(14) YYYYmmddHHmmss
$P_MID; // 상점아이디 char(10)
$P_OID; // 상점주문번호 char(100)
$P_AMT; // 거래금액 char(8)
$P_UNAME; // 결제고객성명 char(30)
$P_MNAME; // 가맹점 이름
$P_RMESG1; // 지불 결과 메시지 char(500)
$P_NOTI; // 노티메시지(상점에서 올린 메시지) char(800)
$P_NOTEURL // 가맹점 전달 , 거래요청 시 입력한 값을 그대로 반환합니다.
$P_NEXT_URL // 가맹점 전달 NEXT URL , 거래요청 시 입력한 값을 그대로 반환합니다.
$P_RMESG2; // 신용카드 할부 개월 수 char(500)
$P_FN_CD1; // 카드코드 char(4)
$P_AUTH_NO; // 신용카드 승인번호 char(30)
$P_FN_CD2; // 금융사코드2
$P_FN_NM; // 결제카드한글명 , BC카드,
4-3. 인증결과수신 : / shop / INIpayMobile_rnoti.php : euc-kr
<?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); #이니시스 승인시각
/**********************************************
* 디비컨넥션
**********************************************/
//require_once("dbconn.php");
$dbconn = mysql_connect("$db_host","$db_id","$db_passwd") or die("데이터베이스 연결에 실패하였습니다.");
mysql_select_db($db_database, $dbconn);
/**********************************************
* 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 = "SELECT * FROM cart WHERE oid='".$oid."' AND TID = '".$P_TID."'";
$result = mysql_query($qry,$dbconn);
$data = mysql_fetch_array($result);
$isset_check = $data["oid"]; // 필드 데이타 하나를 호출합니다.
if(isset($isset_check)) { // 자료 있을때
} else { // 자료 없을때
$payResult = '결제완료';
$qry2 = "UPDATE cart SET";
$qry2 .= " payResult='".$payResult."' ";
if ($P_TYPE == "BANK") {
$qry2 .= " , ACCT_BankCode='".escapeString($P_FN_CD1)."'"; #실시간 계좌이체 - 은행코드
$qry2 .= " , CSHR_ResultCode='".escapeString($P_CSHR_ResultCode)."'"; #실시간 계좌이체 - 현금영수증 발행결과코드
$qry2 .= " , CSHR_Type='".escapeString($P_CSHR_Type)."'"; #실시간 계좌이체 - 현금영수증 발행구분코드
} else if ($P_TYPE == "CARD") {
$qry2 .= " , ApplNum='".escapeString($P_AUTH_NO)."'"; #신용카드 승인번호
$qry2 .= " , CARD_Quota='".escapeString($P_RMESG2)."'"; #할부기간
$qry2 .= " , CARD_Interest='".escapeString($P_CARD_INTEREST)."'"; #1이면 무이자 할부
$qry2 .= " , CARD_Code='".escapeString($P_FN_CD1)."'"; #신용카드사 코드
$qry2 .= " , CARD_BankCode='".escapeString($P_CARD_ISSUER_CODE)."'"; #카드발급사 코드
$qry2 .= " , CARD_AuthType='".escapeString($P_CARD_AuthType)."'"; #본인인증 수행여부(00 이면 수행)
$qry2 .= " , EventCode='".escapeString($P_EVENT_CODE)."'"; #각종 이벤트 적용여부
}
$qry2 .= " , TID='".escapeString($P_TID)."'"; #거래번호
$qry2 .= " , PayMethod='".escapeString($P_TYPE)."'"; #결제방법
$qry2 .= " , ApplDate='".escapeString($P_ApplDate)."'"; #이니시스 승인날짜
$qry2 .= " , ApplTime='".escapeString($P_ApplTime)."'"; #이니시스 승인시각
$qry2 .= " , ResultCode='".escapeString($P_STATUS)."'"; #결과코드
$qry2 .= " , ResultMsg='".escapeString($P_RMESG1)."'"; #결과메시지
$qry2 .= " WHERE oid='".$oid."'";
$result2 = mysql_query($qry2);
}
/***********************************************************************************
' 위에서 상점 데이터베이스에 등록 성공유무에 따라서 성공시에는 "OK"를 이니시스로 실패시는 "FAIL" 을
' 리턴하셔야합니다. 아래 조건에 데이터베이스 성공시 받는 FLAG 변수를 넣으세요
' (주의) OK를 리턴하지 않으시면 이니시스 지불 서버는 "OK"를 수신할때까지 계속 재전송을 시도합니다
' 기타 다른 형태의 echo "" 는 하지 않으시기 바랍니다
'***********************************************************************************/
echo "OK"; //절대로 지우지 마세요
} else {
$qry = "UPDATE cart SET payResult='결제실패' WHERE oid='".$oid."'";
$result = mysql_query($qry,$dbconn);
echo "FAIL";
}
/**********************************************
* End : DB입력
**********************************************/
}
?>
5. 결제완료 페이지 : / shop / pay_result.php : utf-8
<?php
require_once("common/dbconn.php");
$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];
$P_ApplDate = $_REQUEST[P_ApplDate];
$P_ApplTime = $_REQUEST[P_ApplTime];
$PayMethod = $_REQUEST[PayMethod];
?>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="center" style="padding:20px 0 10px 0;">
<?php
$sql = "select * from nux_pay where oid ='". $P_OID ."' and TID='". $P_TID ."'";
$result = mysql_query($sql);
/*
if (!$result) {
echo 'Could not run query: ' . mysql_error();
exit;
}
*/
$data = mysql_fetch_array($result);
// 참고자료: https://www.happyjung.com/bbs/board.php?bo_table=lecture&wr_id=1132
$isset_check = $data["oid"]; // 필드 데이타 하나를 호출합니다.
//echo $isset_check; // 정상보이는지 확인
if(isset($isset_check)) { // 자료 있을때
?>
신청해 주셔서 감사합니다.
<?php
} else { // 자료 없을때
?>
<br><br>주문내역이 없습니다.<br><br>
<?php
}
?>
</td>
</tr>
</table>
참고자료
http://thisblogbusy.tistory.com/entry/이니시스-모바일-결제-프로그램-정리
1. 장바구니 : / shop / cart.php : utf-8
<?php
$P_OID = date("Ymd") . '-' . substr(time() . '-' . md5(microtime()), 0, 23); // 32 byte
?>
<form name="wcart" method="post">
<input type="hidden" name="P_oid" value="<?php echo $P_oid; ?>">
2. 결제페이지 구성 예제 : / shop / pay.php : utf-8
<?php
$P_OID = $_POST["P_OID"];
?>
<meta http-equiv=”Content-Type” content=”text/html;charset=utf-8”>
<script>
function formSubmit(){
document.getElementById(“form1”).submit();
}
</script>
<form id=”form1” name=”form1” method=”post” action=”지불수단URL” accept-charset="EUC-KR">
<!--
요즘 대부분의 사이트는 UTF-8로 제작됩니다. 하지만 이니시스의 시스템은 예전 EUC-KR을 사용중이므로
accept-charset="EUC-KR" 을 선언해서 폼의 값들을 euc-kr 인코딩형식으로 보냅니다.
나중에 결과값을 받을 때만 iconv를 사용해서 UTF-8 형식으로 변환합니다.
결과값 받을때 $name = iconv("UTF-8","EUC-KR",$P_UNAME);
-->
<input type=hidden name="inipaymobile_type" value="web">
<input type="hidden" name="P_MID" value="INIpayTest"> <!-- 테스트 완료시 가맹점ID로 변경 -->
<input type="hidden" name="P_MNAME" value="상점이름" /><!-- 상점이름-->
<input type=”hidden” name=”P_GOODS” value=”테스트상품” />
<input type=”hidden” name=”P_MID” value=”상점아이디” />
<input type=”hidden” name=”P_AMT” value=”상품가격” />
<input type=”hidden” name=”P_OID” value=”<?php echo $P_OID;?>” />
<input type=”hidden” name=”P_EMAIL” value=”abc@abc.com” />
<input type=”hidden” name=”P_UNAME” value=”구매자명” />
<input type="hidden" name="P_NOTI" value="<?php echo $P_OID;?>">
<input type="hidden" name="P_NOTI_URL" value="http://쇼핑몰/shop/INIpayMobile_rnoti.php">
<input type="hidden" name="P_RETURN_URL" value="http://쇼핑몰/shop/pay_result.php?OID=<?php echo $P_OID; ?>">
<input type="hidden" name="P_RESERVED" value="twotrs_isp=Y&block_isp=Y&twotrs_isp_noti=N&cp_yn=Y&bank_receipt=N&apprun_check=Y&xtension_enable=Y">
<input type="hidden" name="P_HPP_METHOD" value="1"><!-- 컨텐츠 1 / 실물 2-->
<input type=”button” onclick=”formSubmit();” />
</form>
3. 디비 결제 테이블 칼럼 추가
payResult // varchar(20)
P_UNAME = $P_UNAME // 결제고객성명 varchar(30)
ACCT_BankCode = $P_FN_CD1 // 실시간 계좌이체 - 은행코드
CSHR_ResultCode = $P_CSHR_ResultCode // 실시간 계좌이체 - 현금영수증 발행결과코드
CSHR_Type = $P_CSHR_Type // 실시간 계좌이체 - 현금영수증 발행구분코드
ApplNum = $P_AUTH_NO // 신용카드 승인번호 varchar(30)
CARD_Quota = $P_RMESG2 // 할부기간 varchar(2)
CARD_Interest = $P_CARD_INTEREST // 1이면 무이자 할부 varchar(2)
CARD_Code = $P_FN_CD1 // 신용카드사 코드 char(4)
CARD_BankCode = $P_CARD_ISSUER_CODE // 카드발급사 코드
CARD_AuthType = P_CARD_AuthType // 본인인증 수행여부(00 이면 수행) varchar(2)
EventCode = $P_EVENT_CODE // 각종 이벤트 적용여부
TID = $P_TID // 거래번호 char(40)
PayMethod = $P_TYPE // 결제방법 BANK : 실시간 계좌이체 , CARD : 신용카드 varchar(10)
ApplDate = $P_ApplDate // 이니시스 승인날짜
ApplTime = $P_ApplTime // 이니시스 승인시각
ResultCode = $P_STATUS // 결과코드
ResultMsg = $P_RMESG1 // 결과메시지
4. 결제 자료 받기
4-1. Transaction 거래의 경우, “ 결제창 Open (주문정보 전달) – 접속 주소 및 일반필드 장 에 기재된, P_NEXT_URL 로 인증결과를 전달합니다.
이때 이니페이모바일TM 에서 P_NEXT_URL 로 전달하는 Parameter 는 다음과 같습니다.
P_STATUS : 인증상태 : 성공시 00, 그 외 실패
P_RMESG1 : 결과메시지
P_TID : 인증거래번호 : Char(40) / 성공시에만 반환
P_REQ_URL : 승인요청 Url
가맹점에서 이니페이모바일로 승인요청을 할 때, 사용되는 Url 입니다.
거래 건 마다 상이한 URL 이 전달됩니다.
따라서, 절대 고정하여 사용하지 마십시오.
Http Scheme 은 https 를 사용합니다.
P_NOTI : 기타주문정보
최초 거래시 주문정보에 P_NOTI 를 설정하셨다면, 그 값을 전달받을 수 있습니다.
이 값은 P_NOTI 값을 그대로 리턴합니다.
4-2. 이니시스 NOTI 서버에서 받은 Value
$P_STATUS; // 거래상태 (00:성공, 그외:실패)
$P_TID; // 거래번호 char(40)
$P_TYPE; // 지불수단 char(10)
$P_AUTH_DT; // 승인일자 char(14) YYYYmmddHHmmss
$P_MID; // 상점아이디 char(10)
$P_OID; // 상점주문번호 char(100)
$P_AMT; // 거래금액 char(8)
$P_UNAME; // 결제고객성명 char(30)
$P_MNAME; // 가맹점 이름
$P_RMESG1; // 지불 결과 메시지 char(500)
$P_NOTI; // 노티메시지(상점에서 올린 메시지) char(800)
$P_NOTEURL // 가맹점 전달 , 거래요청 시 입력한 값을 그대로 반환합니다.
$P_NEXT_URL // 가맹점 전달 NEXT URL , 거래요청 시 입력한 값을 그대로 반환합니다.
$P_RMESG2; // 신용카드 할부 개월 수 char(500)
$P_FN_CD1; // 카드코드 char(4)
$P_AUTH_NO; // 신용카드 승인번호 char(30)
$P_FN_CD2; // 금융사코드2
$P_FN_NM; // 결제카드한글명 , BC카드,
4-3. 인증결과수신 : / shop / INIpayMobile_rnoti.php : euc-kr
<?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); #이니시스 승인시각
/**********************************************
* 디비컨넥션
**********************************************/
//require_once("dbconn.php");
$dbconn = mysql_connect("$db_host","$db_id","$db_passwd") or die("데이터베이스 연결에 실패하였습니다.");
mysql_select_db($db_database, $dbconn);
/**********************************************
* 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 = "SELECT * FROM cart WHERE oid='".$oid."' AND TID = '".$P_TID."'";
$result = mysql_query($qry,$dbconn);
$data = mysql_fetch_array($result);
$isset_check = $data["oid"]; // 필드 데이타 하나를 호출합니다.
if(isset($isset_check)) { // 자료 있을때
} else { // 자료 없을때
$payResult = '결제완료';
$qry2 = "UPDATE cart SET";
$qry2 .= " payResult='".$payResult."' ";
if ($P_TYPE == "BANK") {
$qry2 .= " , ACCT_BankCode='".escapeString($P_FN_CD1)."'"; #실시간 계좌이체 - 은행코드
$qry2 .= " , CSHR_ResultCode='".escapeString($P_CSHR_ResultCode)."'"; #실시간 계좌이체 - 현금영수증 발행결과코드
$qry2 .= " , CSHR_Type='".escapeString($P_CSHR_Type)."'"; #실시간 계좌이체 - 현금영수증 발행구분코드
} else if ($P_TYPE == "CARD") {
$qry2 .= " , ApplNum='".escapeString($P_AUTH_NO)."'"; #신용카드 승인번호
$qry2 .= " , CARD_Quota='".escapeString($P_RMESG2)."'"; #할부기간
$qry2 .= " , CARD_Interest='".escapeString($P_CARD_INTEREST)."'"; #1이면 무이자 할부
$qry2 .= " , CARD_Code='".escapeString($P_FN_CD1)."'"; #신용카드사 코드
$qry2 .= " , CARD_BankCode='".escapeString($P_CARD_ISSUER_CODE)."'"; #카드발급사 코드
$qry2 .= " , CARD_AuthType='".escapeString($P_CARD_AuthType)."'"; #본인인증 수행여부(00 이면 수행)
$qry2 .= " , EventCode='".escapeString($P_EVENT_CODE)."'"; #각종 이벤트 적용여부
}
$qry2 .= " , TID='".escapeString($P_TID)."'"; #거래번호
$qry2 .= " , PayMethod='".escapeString($P_TYPE)."'"; #결제방법
$qry2 .= " , ApplDate='".escapeString($P_ApplDate)."'"; #이니시스 승인날짜
$qry2 .= " , ApplTime='".escapeString($P_ApplTime)."'"; #이니시스 승인시각
$qry2 .= " , ResultCode='".escapeString($P_STATUS)."'"; #결과코드
$qry2 .= " , ResultMsg='".escapeString($P_RMESG1)."'"; #결과메시지
$qry2 .= " WHERE oid='".$oid."'";
$result2 = mysql_query($qry2);
}
/***********************************************************************************
' 위에서 상점 데이터베이스에 등록 성공유무에 따라서 성공시에는 "OK"를 이니시스로 실패시는 "FAIL" 을
' 리턴하셔야합니다. 아래 조건에 데이터베이스 성공시 받는 FLAG 변수를 넣으세요
' (주의) OK를 리턴하지 않으시면 이니시스 지불 서버는 "OK"를 수신할때까지 계속 재전송을 시도합니다
' 기타 다른 형태의 echo "" 는 하지 않으시기 바랍니다
'***********************************************************************************/
echo "OK"; //절대로 지우지 마세요
} else {
$qry = "UPDATE cart SET payResult='결제실패' WHERE oid='".$oid."'";
$result = mysql_query($qry,$dbconn);
echo "FAIL";
}
/**********************************************
* End : DB입력
**********************************************/
}
?>
5. 결제완료 페이지 : / shop / pay_result.php : utf-8
<?php
require_once("common/dbconn.php");
$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];
$P_ApplDate = $_REQUEST[P_ApplDate];
$P_ApplTime = $_REQUEST[P_ApplTime];
$PayMethod = $_REQUEST[PayMethod];
?>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="center" style="padding:20px 0 10px 0;">
<?php
$sql = "select * from nux_pay where oid ='". $P_OID ."' and TID='". $P_TID ."'";
$result = mysql_query($sql);
/*
if (!$result) {
echo 'Could not run query: ' . mysql_error();
exit;
}
*/
$data = mysql_fetch_array($result);
// 참고자료: https://www.happyjung.com/bbs/board.php?bo_table=lecture&wr_id=1132
$isset_check = $data["oid"]; // 필드 데이타 하나를 호출합니다.
//echo $isset_check; // 정상보이는지 확인
if(isset($isset_check)) { // 자료 있을때
?>
신청해 주셔서 감사합니다.
<?php
} else { // 자료 없을때
?>
<br><br>주문내역이 없습니다.<br><br>
<?php
}
?>
</td>
</tr>
</table>
참고자료
http://thisblogbusy.tistory.com/entry/이니시스-모바일-결제-프로그램-정리