전자결제 [이니시스] 모바일결제 ( euc-kr / utf-8 )
페이지 정보
본문
이니시스 모바일 결제를 이용하면 스마트폰에서 결제가 가능합니다.
홈페이지가 euc-kr 로 구성된 경우에는 별무리없이 사용하면 됩니다.
그러나 utf-8로 운영중인 홈페이지인 경우에 모바일에서 결제를 진행하면 상품명, 주문자 이름이 깨지는 문제가 발생합니다.
아래 주문예제를 잘 보시고 여러분의 홈페이지에 잘 적용해보세요.
##### pay.php #####
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<meta name="viewport" content="width=device-width"/>
<title>INIpayMobile 결제</title>
<style>
body, tr, td { font-size:10pt; font-family:돋움,verdana; color:#433F37; line-height:19px; }
table { border:none; }
img { border:none; border:0; }
</style>
<script type="application/x-javascript">
addEventListener("load", function() {
setTimeout(updateLayout, 0);
}, false);
var currentWidth = 0;
function updateLayout() {
if (window.innerWidth != currentWidth) {
currentWidth = window.innerWidth;
var orient = currentWidth == 320 ? "profile" : "landscape";
document.body.setAttribute("orient", orient);
setTimeout(function() {
window.scrollTo(0, 1);
}, 100);
}
}
setInterval(updateLayout, 400);
</script>
<script language=javascript>
window.name = "BTPG_CLIENT";
var width = 330;
var height = 480;
var xpos = (screen.width - width) / 2;
var ypos = (screen.width - height) / 2;
var position = "top=" + ypos + ",left=" + xpos;
var features = position + ", width=320, height=550";
var date = new Date();
var date_str = "testoid_"+date.getFullYear()+""+date.getMinutes()+""+date.getSeconds();
if( date_str.length != 16 ) {
for( i = date_str.length ; i < 16 ; i++ ) {
date_str = date_str+"0";
}
}
function setOid() {
document.ini.P_OID.value = ""+date_str;
}
function on_app() {
var order_form = document.ini;
var paymethod;
if(order_form.paymethod.value == "wcard")
paymethod = "CARD";
else if(order_form.paymethod.value == "mobile")
paymethod = "HPP";
else if(order_form.paymethod.value == "vbank")
paymethod = "VBANK";
else if(order_form.paymethod.value == "culture")
paymethod = "CULT";
else if(order_form.paymethod.value == "hpmn")
paymethod = "HPMN";
param = "";
param = param + "mid=" + order_form.P_MID.value + "&";
param = param + "oid=" + order_form.P_OID.value + "&";
param = param + "price=" + order_form.P_AMT.value + "&";
param = param + "goods=" + order_form.P_GOODS.value + "&";
param = param + "uname=" + order_form.P_UNAME.value + "&";
param = param + "mname=" + order_form.P_MNAME.value + "&";
param = param + "mobile=000-111-2222" + order_form.P_MOBILE.value + "&";
param = param + "paymethod=" + paymethod + "&";
param = param + "noteurl=" + order_form.P_NOTI_URL.value + "&";
param = param + "ctype=1" + "&";
param = param + "returl=" + "&";
param = param + "email=" + order_form.P_EMAIL.value;
var ret = location.href="INIpayMobile://" + encodeURI(param);
}
function on_web() {
var order_form = document.ini;
var paymethod = order_form.paymethod.value;
var wallet = window.open("", "BTPG_WALLET", features);
if (wallet == null) {
if ((webbrowser.indexOf("Windows NT 5.1")!=-1) && (webbrowser.indexOf("SV1")!=-1)) { // Windows XP Service Pack 2
alert("팝업이 차단되었습니다. 브라우저의 상단 노란색 [알림 표시줄]을 클릭하신 후 팝업창 허용을 선택하여 주세요.");
}
else {
alert("팝업이 차단되었습니다.");
}
return false;
}
order_form.target = "BTPG_WALLET";
order_form.action = "https://mobile.inicis.com/smart/" + paymethod + "/";
order_form.submit();
}
function onSubmit() {
var order_form = document.ini;
var inipaymobile_type = order_form.inipaymobile_type.value;
if( inipaymobile_type == "app" )
return on_app();
else if( inipaymobile_type == "web" )
return on_web();
}
</script>
<?php
$hp = $_POST["hp1"] . '-' . $_POST["hp2"] . '-' . $_POST["hp3"]; // 앞에서 넘어온 전화번호
$email = $_POST["email"]; // 앞에서 넘어온 주문자 이메일
$P_OID = time(); // 주문번호
$price = $POST["price"]; // 앞페이지의 장바구니 또는 앞에서 넘어온 제품가격
$P_AMT = $price;
$name = $_POST["name"]; // 앞페이지에서 넘어온 주문자 이름
$P_UNAME = $name;
$P_UNAME = iconv("UTF-8","EUC-KR",$P_UNAME); // 앞페이지가 utf-8 인경우 사용
$product = $_POST["product"]; // 앞에서 넘어온 주문 상품명
$P_GOODS = $product;
$P_GOODS = iconv("UTF-8","EUC-KR",$P_GOODS); // 앞페이지가 utf-8 인경우 사용
$P_NOTI = ""; // 기타주문정보 , 800byte 이내 , 사용법: 변수명=변수값,변수명=변수값
$P_MID = "INIpayTest"; //상점ID , 테스트: INIpayTest
$P_MNAME = "해피정닷컴"; // 상점이름
// $P_NEXT_URL : VISA3D (가상계좌를 제외한 기타지불수단) , 인증결과를 브라우저에서 해당 URL로 POST 합니다.
// $P_NEXT_URL ="https://mobile.inicis.com/smart/testmall/next_url_test.php";
$P_NEXT_URL ="http://m.happyjung.com.kr/m/pay_save.php";
// $P_NOTI_URL : 가상계좌, ISP 인증 및 결제 후 상점의 결제 수신 서버URL로 결제 결과를 통보합니다.
// $P_NOTI_URL = "http://ts.inicis.com/~esjeong/mobile_rnoti/rnoti.php";
$P_NOTI_URL = "http://m.happyjung.com/m/INIpaypay_save.php";
// $P_RETURN_URL : ISP 인증 및 결제 완료 후 상점으로 이동하기 위한 APP URL 또는 상점 홈페이지 URL
// $P_RETURN_URL = "http://ts.inicis.com/~esjeong/mobile_rnoti/rnoti.php";
$P_RETURN_URL = "http://m.happyjung.com/m/pay_save.php";
?>
</head>
<body onload="setOid()" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">
<form id="form1" name="ini" method="post" action="" >
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="69" align="center" style="color:#ffffff; font-size:16px; font-weight:bold;">INIpay Mobile 결제요청</td>
</tr>
<tr>
<td>
주문자명: <input type="text" name="name" value="<?php echo $name; ?>" /><br />
상품이름: <input type="text" name="goods" value="<?php echo $product; ?>" /><br />
휴대전화: <input type="text" name="hp" value="<?php echo $hp; ?>" /><br />
제품가격: <input type="text" name="price" value="<?php echo $price; ?>" />
</td>
</tr>
<tr>
<td height="39" align="center" onClick="javascript:onSubmit();"><img src="INIpayMobile/btn_confirm.png" width="55" height="29" /></td>
</tr>
</table>
<!-- 이니시스 카드결재관련 -->
<input type="hidden" name="inipaymobile_type" value="web" />
<input type="hidden" name="P_OID" value="<? echo $P_OID;?>" />
<input type="hidden" name="P_GOODS" value="<?php echo $P_GOODS; ?>" />
<input type="hidden" name="P_AMT" value="<?php echo $P_AMT; ?>" />
<input type="hidden" name="P_UNAME" value="<?php echo $P_UNAME; ?>" />
<input type="hidden" name="P_MNAME" value="<?php echo $P_MNAME; ?>" />
<input type="hidden" name="P_MOBILE" value="<?php echo $P_MOBILE; ?>" />
<input type="hidden" name="P_EMAIL" value="<?php echo $P_EMAIL; ?>" />
<input type="hidden" name="paymethod" value="wcard" />
<input type="hidden" name="P_MID" value="<?php echo $P_MID; ?>" />
<input type="hidden" name="P_NEXT_URL" value="<?php echo $P_NEXT_URL; ?>" />
<input type="hidden" name="P_NOTI_URL" value="<?php echo $P_NOTI_URL; ?>" />
<input type="hidden" name="P_RETURN_URL" value="<?php echo $P_RETURN_URL; ?>" />
<input type="hidden" name="P_HPP_METHOD" value="1" />
</form>
</body>
</html>
##### INIpayMobile_rnoti.php #####
이니시스에서 공식적으로 넘겨받은 결제모듈 내용입니다.
결제에 필요한 정보를 암호화해서 결제창으로 넘기는 역할을 합니다.
내용은 다음과 같습니다.
<?php
//*******************************************************************************
// FILE NAME : mx_rnoti.php
// FILE DESCRIPTION :
// 이니시스 smart phone 결제 결과 수신 페이지 샘플
// 기술문의 : 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" || $PGIP == "183.109.71.153") //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];
//WEB 방식의 경우 가상계좌 채번 결과 무시 처리
//(APP 방식의 경우 해당 내용을 삭제 또는 주석 처리 하시기 바랍니다.)
if($P_TYPE == "VBANK") //결제수단이 가상계좌이며
{
if($P_STATUS != "02") //입금통보 "02" 가 아니면(가상계좌 채번 : 00 또는 01 경우)
{
echo "OK";
return;
}
}
$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);
/***********************************************************************************
' 위에서 상점 데이터베이스에 등록 성공유무에 따라서 성공시에는 "OK"를 이니시스로 실패시는 "FAIL" 을
' 리턴하셔야합니다. 아래 조건에 데이터베이스 성공시 받는 FLAG 변수를 넣으세요
' (주의) OK를 리턴하지 않으시면 이니시스 지불 서버는 "OK"를 수신할때까지 계속 재전송을 시도합니다
' 기타 다른 형태의 echo "" 는 하지 않으시기 바랍니다
'***********************************************************************************/
// if(데이터베이스 등록 성공 유무 조건변수 = true)
echo "OK"; //절대로 지우지 마세요
// else
// echo "FAIL";
}
function writeLog($msg)
{
$file = "noti_input_".date("Ymd").".log";
if(!($fp = fopen($path.$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;
}
?>
##### pay_insert.php #####
<?php
//require_once "common/dbconn.php";
$dbconn = mysql_connect("$mysql_host","$mysql_user","$mysql_password") or die("데이터베이스 연결에 실패하였습니다.");
@mysql_query("set names utf8");
mysql_select_db($mysql_db, $dbconn);
$oid = $_GET['P_OID']; //return_url 뒤에 get방식으로 전달한 주문식별자 (ex: P_RETURN_URL = http://www.inicis.com/mx_rreturn.php?oid=123456)
if($row[6] == "00") { // 결재가 성공인 경우 DB에 입력
//echo "결제종류 : " . $paymethod_type . "<br />";
//echo $row[13]. "원 결제가 성공하였습니다. <br />";
//if($row[7] =="CARD") echo "승인번호 : " . $row[17];
if($row[7] =="VBANK") {
$explode_data = explode('|', $row[14]);
$aaa = explode('=', $explode_data[0]);
$bbb = explode('=', $explode_data[1]);
//echo "입금은행 : " . $row[11]. "<br />";
//echo "입금계좌 : " . $aaa[1] . "<br />";
//echo "입금기한 : " . $bbb[1] . "<br />";
}
$query = " insert into nux_pay (goods_name, total_price, buy_user, auth_code, pay_type, buy_date, name, email, hp, reg_date) values ('$goodname', '$row[10]', '$row[11]', '$oid', '1', '$oid', '$name', '$email', '$hp', now()) ";
$result = mysql_query($query);
if (!$result) die("디비입력에 실패했습니다.");
else {
//if ($member['mb_id'] == 'hapyjung') {
// echo $query;
//} else {
echo("<script>location.href='03_thanks.php'< /script>");
//}
}
} else {
echo "결제가 실패하였습니다. <br />";
}
//echo "승인 내역이 존재하지 않습니다. 승인내역 처리가 늦어서 조회되지 않는 경우일 수 있습니다. 개인결제내역 페이지에서 내역을 다시 확인해 주시기 바랍니다.";
?>
홈페이지가 euc-kr 로 구성된 경우에는 별무리없이 사용하면 됩니다.
그러나 utf-8로 운영중인 홈페이지인 경우에 모바일에서 결제를 진행하면 상품명, 주문자 이름이 깨지는 문제가 발생합니다.
아래 주문예제를 잘 보시고 여러분의 홈페이지에 잘 적용해보세요.
##### pay.php #####
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<meta name="viewport" content="width=device-width"/>
<title>INIpayMobile 결제</title>
<style>
body, tr, td { font-size:10pt; font-family:돋움,verdana; color:#433F37; line-height:19px; }
table { border:none; }
img { border:none; border:0; }
</style>
<script type="application/x-javascript">
addEventListener("load", function() {
setTimeout(updateLayout, 0);
}, false);
var currentWidth = 0;
function updateLayout() {
if (window.innerWidth != currentWidth) {
currentWidth = window.innerWidth;
var orient = currentWidth == 320 ? "profile" : "landscape";
document.body.setAttribute("orient", orient);
setTimeout(function() {
window.scrollTo(0, 1);
}, 100);
}
}
setInterval(updateLayout, 400);
</script>
<script language=javascript>
window.name = "BTPG_CLIENT";
var width = 330;
var height = 480;
var xpos = (screen.width - width) / 2;
var ypos = (screen.width - height) / 2;
var position = "top=" + ypos + ",left=" + xpos;
var features = position + ", width=320, height=550";
var date = new Date();
var date_str = "testoid_"+date.getFullYear()+""+date.getMinutes()+""+date.getSeconds();
if( date_str.length != 16 ) {
for( i = date_str.length ; i < 16 ; i++ ) {
date_str = date_str+"0";
}
}
function setOid() {
document.ini.P_OID.value = ""+date_str;
}
function on_app() {
var order_form = document.ini;
var paymethod;
if(order_form.paymethod.value == "wcard")
paymethod = "CARD";
else if(order_form.paymethod.value == "mobile")
paymethod = "HPP";
else if(order_form.paymethod.value == "vbank")
paymethod = "VBANK";
else if(order_form.paymethod.value == "culture")
paymethod = "CULT";
else if(order_form.paymethod.value == "hpmn")
paymethod = "HPMN";
param = "";
param = param + "mid=" + order_form.P_MID.value + "&";
param = param + "oid=" + order_form.P_OID.value + "&";
param = param + "price=" + order_form.P_AMT.value + "&";
param = param + "goods=" + order_form.P_GOODS.value + "&";
param = param + "uname=" + order_form.P_UNAME.value + "&";
param = param + "mname=" + order_form.P_MNAME.value + "&";
param = param + "mobile=000-111-2222" + order_form.P_MOBILE.value + "&";
param = param + "paymethod=" + paymethod + "&";
param = param + "noteurl=" + order_form.P_NOTI_URL.value + "&";
param = param + "ctype=1" + "&";
param = param + "returl=" + "&";
param = param + "email=" + order_form.P_EMAIL.value;
var ret = location.href="INIpayMobile://" + encodeURI(param);
}
function on_web() {
var order_form = document.ini;
var paymethod = order_form.paymethod.value;
var wallet = window.open("", "BTPG_WALLET", features);
if (wallet == null) {
if ((webbrowser.indexOf("Windows NT 5.1")!=-1) && (webbrowser.indexOf("SV1")!=-1)) { // Windows XP Service Pack 2
alert("팝업이 차단되었습니다. 브라우저의 상단 노란색 [알림 표시줄]을 클릭하신 후 팝업창 허용을 선택하여 주세요.");
}
else {
alert("팝업이 차단되었습니다.");
}
return false;
}
order_form.target = "BTPG_WALLET";
order_form.action = "https://mobile.inicis.com/smart/" + paymethod + "/";
order_form.submit();
}
function onSubmit() {
var order_form = document.ini;
var inipaymobile_type = order_form.inipaymobile_type.value;
if( inipaymobile_type == "app" )
return on_app();
else if( inipaymobile_type == "web" )
return on_web();
}
</script>
<?php
$hp = $_POST["hp1"] . '-' . $_POST["hp2"] . '-' . $_POST["hp3"]; // 앞에서 넘어온 전화번호
$email = $_POST["email"]; // 앞에서 넘어온 주문자 이메일
$P_OID = time(); // 주문번호
$price = $POST["price"]; // 앞페이지의 장바구니 또는 앞에서 넘어온 제품가격
$P_AMT = $price;
$name = $_POST["name"]; // 앞페이지에서 넘어온 주문자 이름
$P_UNAME = $name;
$P_UNAME = iconv("UTF-8","EUC-KR",$P_UNAME); // 앞페이지가 utf-8 인경우 사용
$product = $_POST["product"]; // 앞에서 넘어온 주문 상품명
$P_GOODS = $product;
$P_GOODS = iconv("UTF-8","EUC-KR",$P_GOODS); // 앞페이지가 utf-8 인경우 사용
$P_NOTI = ""; // 기타주문정보 , 800byte 이내 , 사용법: 변수명=변수값,변수명=변수값
$P_MID = "INIpayTest"; //상점ID , 테스트: INIpayTest
$P_MNAME = "해피정닷컴"; // 상점이름
// $P_NEXT_URL : VISA3D (가상계좌를 제외한 기타지불수단) , 인증결과를 브라우저에서 해당 URL로 POST 합니다.
// $P_NEXT_URL ="https://mobile.inicis.com/smart/testmall/next_url_test.php";
$P_NEXT_URL ="http://m.happyjung.com.kr/m/pay_save.php";
// $P_NOTI_URL : 가상계좌, ISP 인증 및 결제 후 상점의 결제 수신 서버URL로 결제 결과를 통보합니다.
// $P_NOTI_URL = "http://ts.inicis.com/~esjeong/mobile_rnoti/rnoti.php";
$P_NOTI_URL = "http://m.happyjung.com/m/INIpaypay_save.php";
// $P_RETURN_URL : ISP 인증 및 결제 완료 후 상점으로 이동하기 위한 APP URL 또는 상점 홈페이지 URL
// $P_RETURN_URL = "http://ts.inicis.com/~esjeong/mobile_rnoti/rnoti.php";
$P_RETURN_URL = "http://m.happyjung.com/m/pay_save.php";
?>
</head>
<body onload="setOid()" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">
<form id="form1" name="ini" method="post" action="" >
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="69" align="center" style="color:#ffffff; font-size:16px; font-weight:bold;">INIpay Mobile 결제요청</td>
</tr>
<tr>
<td>
주문자명: <input type="text" name="name" value="<?php echo $name; ?>" /><br />
상품이름: <input type="text" name="goods" value="<?php echo $product; ?>" /><br />
휴대전화: <input type="text" name="hp" value="<?php echo $hp; ?>" /><br />
제품가격: <input type="text" name="price" value="<?php echo $price; ?>" />
</td>
</tr>
<tr>
<td height="39" align="center" onClick="javascript:onSubmit();"><img src="INIpayMobile/btn_confirm.png" width="55" height="29" /></td>
</tr>
</table>
<!-- 이니시스 카드결재관련 -->
<input type="hidden" name="inipaymobile_type" value="web" />
<input type="hidden" name="P_OID" value="<? echo $P_OID;?>" />
<input type="hidden" name="P_GOODS" value="<?php echo $P_GOODS; ?>" />
<input type="hidden" name="P_AMT" value="<?php echo $P_AMT; ?>" />
<input type="hidden" name="P_UNAME" value="<?php echo $P_UNAME; ?>" />
<input type="hidden" name="P_MNAME" value="<?php echo $P_MNAME; ?>" />
<input type="hidden" name="P_MOBILE" value="<?php echo $P_MOBILE; ?>" />
<input type="hidden" name="P_EMAIL" value="<?php echo $P_EMAIL; ?>" />
<input type="hidden" name="paymethod" value="wcard" />
<input type="hidden" name="P_MID" value="<?php echo $P_MID; ?>" />
<input type="hidden" name="P_NEXT_URL" value="<?php echo $P_NEXT_URL; ?>" />
<input type="hidden" name="P_NOTI_URL" value="<?php echo $P_NOTI_URL; ?>" />
<input type="hidden" name="P_RETURN_URL" value="<?php echo $P_RETURN_URL; ?>" />
<input type="hidden" name="P_HPP_METHOD" value="1" />
</form>
</body>
</html>
##### INIpayMobile_rnoti.php #####
이니시스에서 공식적으로 넘겨받은 결제모듈 내용입니다.
결제에 필요한 정보를 암호화해서 결제창으로 넘기는 역할을 합니다.
내용은 다음과 같습니다.
<?php
//*******************************************************************************
// FILE NAME : mx_rnoti.php
// FILE DESCRIPTION :
// 이니시스 smart phone 결제 결과 수신 페이지 샘플
// 기술문의 : 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" || $PGIP == "183.109.71.153") //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];
//WEB 방식의 경우 가상계좌 채번 결과 무시 처리
//(APP 방식의 경우 해당 내용을 삭제 또는 주석 처리 하시기 바랍니다.)
if($P_TYPE == "VBANK") //결제수단이 가상계좌이며
{
if($P_STATUS != "02") //입금통보 "02" 가 아니면(가상계좌 채번 : 00 또는 01 경우)
{
echo "OK";
return;
}
}
$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);
/***********************************************************************************
' 위에서 상점 데이터베이스에 등록 성공유무에 따라서 성공시에는 "OK"를 이니시스로 실패시는 "FAIL" 을
' 리턴하셔야합니다. 아래 조건에 데이터베이스 성공시 받는 FLAG 변수를 넣으세요
' (주의) OK를 리턴하지 않으시면 이니시스 지불 서버는 "OK"를 수신할때까지 계속 재전송을 시도합니다
' 기타 다른 형태의 echo "" 는 하지 않으시기 바랍니다
'***********************************************************************************/
// if(데이터베이스 등록 성공 유무 조건변수 = true)
echo "OK"; //절대로 지우지 마세요
// else
// echo "FAIL";
}
function writeLog($msg)
{
$file = "noti_input_".date("Ymd").".log";
if(!($fp = fopen($path.$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;
}
?>
##### pay_insert.php #####
<?php
//require_once "common/dbconn.php";
$dbconn = mysql_connect("$mysql_host","$mysql_user","$mysql_password") or die("데이터베이스 연결에 실패하였습니다.");
@mysql_query("set names utf8");
mysql_select_db($mysql_db, $dbconn);
$oid = $_GET['P_OID']; //return_url 뒤에 get방식으로 전달한 주문식별자 (ex: P_RETURN_URL = http://www.inicis.com/mx_rreturn.php?oid=123456)
if($row[6] == "00") { // 결재가 성공인 경우 DB에 입력
//echo "결제종류 : " . $paymethod_type . "<br />";
//echo $row[13]. "원 결제가 성공하였습니다. <br />";
//if($row[7] =="CARD") echo "승인번호 : " . $row[17];
if($row[7] =="VBANK") {
$explode_data = explode('|', $row[14]);
$aaa = explode('=', $explode_data[0]);
$bbb = explode('=', $explode_data[1]);
//echo "입금은행 : " . $row[11]. "<br />";
//echo "입금계좌 : " . $aaa[1] . "<br />";
//echo "입금기한 : " . $bbb[1] . "<br />";
}
$query = " insert into nux_pay (goods_name, total_price, buy_user, auth_code, pay_type, buy_date, name, email, hp, reg_date) values ('$goodname', '$row[10]', '$row[11]', '$oid', '1', '$oid', '$name', '$email', '$hp', now()) ";
$result = mysql_query($query);
if (!$result) die("디비입력에 실패했습니다.");
else {
//if ($member['mb_id'] == 'hapyjung') {
// echo $query;
//} else {
echo("<script>location.href='03_thanks.php'< /script>");
//}
}
} else {
echo "결제가 실패하였습니다. <br />";
}
//echo "승인 내역이 존재하지 않습니다. 승인내역 처리가 늦어서 조회되지 않는 경우일 수 있습니다. 개인결제내역 페이지에서 내역을 다시 확인해 주시기 바랍니다.";
?>
댓글목록
등록된 댓글이 없습니다.