<?
// ###################################################################################
// 
//   request.php
// 
//   Copyright (c) 2000-2005 InterBank(ANGELPAY) Co. LTD.
//   All rights reserved.
//  ------------------------------------------------------------------------------
//   최종 수정일 : 2002.09.04
// 
// ###################################################################################
// 
//   ShoppingMall로 부터 넘어오는 인자를 이용하여 Angelplus P/G와 통신하기 위한
//   전문을 생성하고 생성된 전문을 인자로 Angelplus P/G의 신용카드 지불처리를
//  호출하는 Module이다.
// 
// ###################################################################################
//
// [ request.php를 호출할때 인자로 넘어오는 구성요소 ]
//
//  1. OrderNo		: 주문일자(YYYYMMDD)
//  2. Amount		: 주문번호에 해당하는 거래금액
//  3. DeliveryInfo	: 배송정보
//  4. PayMethod	: 결제방법
//		    	 (1:신용카드, 2:계좌이체, 3:엔젤플러스, 4:핸드폰결제, 5: ARS결제)
//  
//
//    * 주의
//       1. 주문번호와 거래금액, 배송정보는 반드시 존재하여야 한다.
//	 2. 결제방법은 값이 없을경우(지정하지 않으면) 신용카드로 처리된다.
//	 3. 결제창의 호출방식은 OpenWindow형식으로 하는 것을 원칙으로 한다.
//
// ###################################################################################

include "./config.php";
include "./log.php";
include "./mysql_function.php";


// *************************************************************************
//  결제 성공/실패시에 이동할 페이지 설정
// ---------------------------------------
// 
//  아래에 기본적으로 들어가있는 값중에 SHOP_URL은 쇼핑몰 URL로,
//  ANGELPAY_PATH는 ANGELPAY가 접근되는 경로(웹경로)로 설정해주면
//  일단 정상적으로 동작한다.
// 
//  그러나 아래에서 지정한 페이지의 경우 인터뱅크(주)에서 제공하는
//  예제페이지에 불과하므로, 쇼핑몰마다 그 디자인 특성을 고려하여
//  결제 성공/실패에 따라 이동할 페이지를 직접 제작하는 것을 추천한다.
//  
//  아래의 값을 변경할때 주의할 점은 2가지가 있는데 
//  첫째는 http://를 포함한 절대경로로 써야 한다는 것이고,
//  둘째는 Get형태로 넘길 수 있는 데이터는 1개로 고정된다는 것이다.
//  (단, 넘어가는 파라미터, 즉, 변수 이름은 변경해도 무방하다.)
//  그러므로 여러개의 데이터를 넘겨야 하는 경우는 해당되는 여러개의 데이터를
//  하이픈(-)을 사용하여 모두 붙여서 1개의 데이터값으로 만든 후에
//  아래에서 지정하는 페이지에서 해당 값을 받은 후에 하이픈(-)을 기준으로
//  데이터를 잘라서 사용해야 한다.
// 
//  예: $g_SuccessPage = "www.mydomain.com/pay/myrecogn1.php"; (X)
//      $g_SuccessPage = "http://www.mydomain.com/pay/myrecogn2.php"; (O)
//      $g_SuccessPage = "http://www.mydomain.com/pay/myrecogn3.php?mydata1=$xxx&mydata2=$yyy"; (X)
//      $g_SuccessPage = "http://www.mydomain.com/pay/myrecogn4.asp?mydata=$xxx-$yyy"; (O)
// 
//  - $g_FailurePage도 동일하게 적용된다.
// *************************************************************************

Function SetPages()
{
	global $g_OrderDate, $g_SequenceNo;
	global $g_SuccessPage, $g_FailurePage;

   $domainname = getenv("HTTP_HOST");
   
//	$g_SuccessPage = "http://SHOP_URL/ANGELPAY_PATH/recogn.php?recogn=$g_OrderDate$g_SequenceNo";
//	$g_FailurePage = "http://SHOP_URL/ANGELPAY_PATH/error.php?recogn=$g_OrderDate$g_SequenceNo";
	
	$g_SuccessPage = "http://$domainname/navigator.php?contents=order_success";
	$g_FailurePage = "http://$domainname/navigator.php?contents=order_fail";
	
	return true;	
}



//*************************************************************************
//  ShoppingMall의 결제요청 화면으로 부터 POST방식으로 전달되어온 인자값들을
//  받아 입력값의 유효성여부를 검사하는 루틴
//*************************************************************************
Function RecvFromMerchant()
{
	global $OrderNo, $Amount, $DeliveryInfo, $PayMethod, $InstallGB;
	global $g_OrderNo, $g_Amount, $g_DeliveryInfo, $g_PayMethod, $g_InstallGB;

	$g_OrderNo		= trim($OrderNo);		
	$g_Amount		= trim($Amount);		
	$g_DeliveryInfo		= trim($DeliveryInfo);		
	$g_PayMethod		= trim($PayMethod);		
	$g_InstallGB		= trim($InstallGB);		
	

	//==========================================================================
	// Log Write
	//==========================================================================
	TraceLog ("Request", "RecvFromMerchant",
						"OrderNo=" 	. $g_OrderNo		. ", " .
						"Amount=" 	. $g_Amount		. ", " .
						"DeliveryInfo="	. $g_DeliveryInfo	. ", " .
						"PayMethod="	. $g_PayMethod		. ", " .
						"InstallGB="	. $g_InstallGB		);

	//==========================================================================
	// 입력정보 검사
	//==========================================================================
	// 거래(주문)번호 체크
	if  (strlen($g_OrderNo) < 4 or strlen($g_OrderNo) > 30)
	{
		TraceLog ("Request", "RecvFromMerchant", "[ERROR] 입력정보 오류(거래번호).");
		return false;
	}

	// 거래금액 체크
	if  (strlen($g_Amount) < 3 Or strlen($g_Amount) > 9 Or !FncOnlyDigits($g_Amount))
	{
		TraceLog ("Request", "RecvFromMerchant", "[ERROR] 입력정보 오류(승인금액).");
		return false;
	}
	
	// 배송지정보 체크
	if  ( !strlen($g_DeliveryInfo))
	{
		TraceLog ("Request", "RecvFromMerchant", "[ERROR] 입력정보 오류(배송지정보).");
		return false;
	}
	
	// 결제방법 체크
	if ( !strlen($g_PayMethod))	$g_PayMethod = "1";
	
	
	if ( !strlen($g_InstallGB))	$g_InstallGB = "00";

	return true;
}

//*************************************************************************
//  Merchant의 결제요청 화면으로 부터 입력받은 값들을 이용하여 Angelplus P/G의
//  승인 입력화면 인자로 전송할 전문을 생성하는 루틴
//*************************************************************************
function MakeReqPacket()
{
	global $g_OrderDate, $g_OrderTime, $g_SequenceNo, $g_OrderNo, $g_Amount, $g_DeliveryInfo, $g_InstallGB;
	global $MEMBER_NO;
	global $g_SuccessPage, $g_FailurePage;
	
	$strAstric = chr(38);
	
	SetPages();
	
	// 요청전문 생성
	$g_ReqPacket =	"MsgTypeCode=D1"				. $strAstric .
			"UserID="	.	$MEMBER_NO		. $strAstric .
			"OrderDate="	.	$g_OrderDate		. $strAstric .
			"OrderTime="	.	$g_OrderTime		. $strAstric .
			"SequenceNo="	.	$g_SequenceNo		. $strAstric .
			"OrderNo="	.	$g_OrderNo		. $strAstric .
			"NoInterest="	.	$g_InstallGB		. $strAstric .
			"Amount="	.	$g_Amount		. $strAstric .
			"DeliveryInfo="	.	$g_DeliveryInfo		. $strAstric .
			"Reserved1="	.	""			. $strAstric .
			"Reserved2="	.	""			. $strAstric .
			"RecognPage="	.	$g_SuccessPage		. $strAstric .
			"ErrorPage="	.	$g_FailurePage;
					
	TraceLog ("Request", "MakeReqPacket", "g_ReqPacket=" . $g_ReqPacket );

	return $g_ReqPacket;
}

//*************************************************************************
//  승인 요청정보를 DB에 Insert 하는 루틴
//*************************************************************************
Function InsertDB()
{
	global $g_OrderDate, $g_OrderTime, $g_SequenceNo, $g_OrderNo, $g_Amount, $g_InstallGB;
	global $TABLE_ANGELPAY, $MEMBER_NO;

	// Current System Date
	$g_OrderDate = f_Now_Date();
	// Current System Time
	$g_OrderTime = f_Now_Time();

	$g_SequenceNo = "00000001";
	
	//거래요청시간, 거래순번 생성
	$aRec = FncResultQuery( " SELECT MAX(sequence_no) FROM $TABLE_ANGELPAY WHERE order_date='$g_OrderDate' " );

	if ( $aRec )
		$g_SequenceNo = $aRec[0]+1;
	else
		$g_SequenceNo = "1";

	$g_SequenceNo = PadL( $g_SequenceNo, 8, "0" );

	$strQuery = " INSERT INTO $TABLE_ANGELPAY ( 
						msg_type_cd,	order_date,	order_time,
						sequence_no,	order_no,	amount,
						status_flag,	install_gb,	userid )
					VALUES ( 'D1',
						 '$g_OrderDate',
						 '$g_OrderTime',
						 '$g_SequenceNo',
						 '$g_OrderNo',
						 '$g_Amount',
						 'D1',
						 '$g_InstallGB'	,
						 '$MEMBER_NO' ) ";

	TraceLog ("Request", "Query Builder", $strQuery);

	if ( ! FncExecQuery( $strQuery ) )
	{
		TraceLog ("Request", "InsertDB", "[ERROR] DB 작업 오류.-- (" . mysql_errno() . ")" . mysql_error() );
		return false;
	}

	return true;
}




	//*************************************************************************
	//  MAIN
	//*************************************************************************

	TraceLog ("Request", "==================", "===> Start");

	$htmlHead = "<HTML><HEAD></HEAD><BODY><CENTER><BR><BR>";
	$htmlTail = "</CENTER></BODY></HTML>";

	// Merchant로부터 전달된 인자를 받아온다
	$bRetVal = RecvFromMerchant();
	If ( ! $bRetVal )
	{
		$strDispMsg = 	"결제처리가 중단 되었습니다.<BR>" .
			 	"<FONT Color=RED>승인 요청을 위한 입력정보가 틀립니다.</FONT><BR>" .
				"자세한 사항은 상점 관리자에게 문의하시기 바랍니다.<br>" .
				"<br><a href='javascript:history.back();'>돌아가기</a>";
		
		echo $htmlHead . $strDispMsg . $htmlTail;
		
		exit;
	}

	// ANGELPAY_TRANSACTION Table에 등록한다.
	$bRetVal = InsertDB();
	If ( ! $bRetVal )
	{
		$strDispMsg =	"결제처리가 중단 되었습니다.<BR>" .
				"<FONT Color=RED>승인요청을 위한 자료 저장중 에러 발생</FONT><BR>" .
				"자세한 사항은 상점 관리자에게 문의하시기 바랍니다.<br>" .
				"<br><a href='javascript:history.back();'>돌아가기</a>";
		
		echo $htmlHead . $strDispMsg . "<br><br>" . $htmlTail;
		
		exit;
	}

	// 승인 요청 전문을 생성한다.

	switch($g_PayMethod)
	{
    		case "1" :
	        	$strTargetURL = $SERVER_URL . $SERVER_FILE1 . "?". MakeReqPacket();
        	break;
    
		case "2":
			$strTargetURL = $SERVER_URL . $SERVER_FILE2 . "?". MakeReqPacket();
		break;
		
		case "3":
			$strTargetURL = $SERVER_URL . $SERVER_FILE3 . "?". MakeReqPacket();
		break;
		
		case "4":
			$strTargetURL = $SERVER_URL . $SERVER_FILE4 . "?". MakeReqPacket();
		break;
		
		case "5": 
			$strTargetURL = $SERVER_URL . $SERVER_FILE5 . "?". MakeReqPacket();
		break;
		
		default:
			$strDispMsg =	"결제처리가 중단 되었습니다.<BR>" .
					"<FONT Color=RED>결제수단 입력정보가 틀립니다.</FONT><BR>" .
					"자세한 사항은 상점 관리자에게 문의하시기 바랍니다.<br>" .
					"<br><a href='javascript:history.back();'>돌아가기</a>";
		
			echo $htmlHead . $strDispMsg . "<br><br>" . $htmlTail;
			exit;
		break;
	}
        
	TraceLog ("Request", "To Angelplus P/G", $strTargetURL );
        
?>      
<HTML>  
<HEAD>  
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=euc_kr">
<TITLE></TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--    
	var time_id;
	function TimeClosing()
	{
		clearTimeout(time_id);
		window.open("<?echo $strTargetURL ?>", "Connection", "toolbar=no, directories=no,menubar=no,scrollbars=no,resizable=yes,status=yes,location=no,copyhistory=yes,width=610,height=600");
	}
	
	function right() 
	{
		if (navigator.appName == 'Netscape' && (e.which == 3 || e.which == 2))		return false;
		else if (navigator.appName == 'Microsoft Internet Explorer' && (event.button ==2 || event.button == 3)) 
		{
			alert("마우스 오른쪽 버튼은 사용하실 수 없습니다.");
			return false;
		}
	return true;
	}
	
	document.onmousedown = right;
//-->   
</SCRIPT>
</HEAD> 
<BODY>  
<CENTER>
<BR><BR><BR>
처리중입니다....
<br><br><a href="/">홈으로</a>
<br><br>
<a href="javascript:TimeClosing();">결제창 수동으로 띄우기</a>
</CENTER>
<SCRIPT LANGUAGE="JavaScript">
<!--
	time_id = setTimeout('TimeClosing()', 500);
//-->
</SCRIPT>
</BODY>
</HTML>
