itsolution/module/shop/pg/agspay/AGSLib.php
2021-10-26 18:21:20 +09:00

1925 lines
63 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?
/**
* 파일명 : AGSLib.php
* 최종수정일자 : 2009/05/22
*
* 올더게이트 결제용 라이브러리 파일입니다.
* Copyright AEGIS ENTERPRISE.Co.,Ltd. All rights reserved.
*
*/
/* GLOBAL */
define("PROGRAM", "AgsPay40");
define("TYPE", "php");
/* LOG LEVEL */
define("FATAL", 1);
define("ERROR", 2);
define("WARN", 3);
define("INFO", 4);
define("DEBUG", 5);
class agspay40
{
/**************************************************************************************
*
* [1] 올더게이트 결제시 사용할 로컬 통신서버 IP/Port 번호
*
* $LOCALADDR : PG서버와 통신을 담당하는 암호화Process가 위치해 있는 IP
* $LOCALPORT : 포트
* $ENCRYPT : 0:안심클릭,일반결제 2:ISP
* $CONN_TIMEOUT : 암호화 데몬과 접속 Connect타임아웃 시간(초)
* $READ_TIMEOUT : 데이터 수신 타임아웃 시간(초)
*
***************************************************************************************/
var $LOCALADDR = "121.133.126.1";
var $LOCALPORT = "29760";
var $ENCTYPE = 0;
var $CONN_TIMEOUT = 10;
var $READ_TIMEOUT = 30;
var $ERRMSG;
var $log;
var $fp;
var $REQUEST = array();
var $RESULT = array();
var $sDataMsg;
var $sSendMsg;
var $sRecvMsg;
var $sRecvLen;
var $SendValArray;
var $RecvValArray;
var $TID;
/*
Aegis 결제/취소 처리
*/
function startPay( )
{
$this->ERRMSG = "";
/*
Log 기록 객체생성
*/
$this->log = new PayLog( $this->REQUEST );
if(!$this->log->InitLog())
{
$this->ERRMSG .= "로그파일을 열수가 없습니다.[".$this->REQUEST["AgsPayHome"]."]" ;
$this->RESULT["rSuccYn"] = "n";
$this->RESULT["rResMsg"] = $this->ERRMSG;
$this->RESULT["rCancelSuccYn"] = "n";
$this->RESULT["rCancelResMsg"] = $this->ERRMSG;
return false;
}
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." ".$this->REQUEST["Type"]." Start!" );
if($this->REQUEST["Type"] == "Cancel")
{
if($this->REQUEST["AuthTy"] == "virtual" )
{
$this->log->WriteLog( WARN, "Cannot Cancel AuthTy[".$this->REQUEST["AuthTy"]."]" );
$this->log->CloseLog( "AuthTy[".$this->REQUEST["AuthTy"]."] End");
return false;
}
}
/*
요청값 로그기록
*/
$this->writeLogArray($this->REQUEST);
//취소요청
if($this->REQUEST["Type"] == "Cancel")
{
if( $this->NetCancel() == false )
{
/*
결과값 로그기록
*/
$this->log->WriteLog( ERROR,$this->REQUEST["AuthTy"]." ".$this->REQUEST["Type"]." Result Value [" );
$this->writeLogArray($this->RESULT);
$this->log->WriteLog( ERROR, "]" );
$this->log->WriteLog( ERROR, $this->REQUEST["AuthTy"]." ".$this->REQUEST["Type"]." Fail End" );
$this->payQuit();
return false;
}
/*
결과값 로그기록
*/
$this->log->WriteLog( WARN,$this->REQUEST["AuthTy"]." ".$this->REQUEST["Type"]." Result Value [" );
$this->writeLogArray($this->RESULT);
$this->log->WriteLog( WARN, "]" );
$this->log->WriteLog( WARN, $this->REQUEST["AuthTy"]." ".$this->REQUEST["Type"]." Success End" );
//log 객체 닫기
$this->log->CloseLog( $this->GetResult("rCancelResMsg") );
return true;
}
if( empty( $this->REQUEST["StoreId"] ) || $this->REQUEST["StoreId"] == "" )
{
$this->ERRMSG .= "상점아이디 입력여부 확인요망 <br>"; //상점아이디
}
if( empty( $this->REQUEST["OrdNo"] ) || $this->REQUEST["OrdNo"] == "" )
{
$this->ERRMSG .= "주문번호 입력여부 확인요망 <br>"; //주문번호
}
if( empty( $this->REQUEST["ProdNm"] ) || $this->REQUEST["ProdNm"] == "" )
{
$this->ERRMSG .= "상품명 입력여부 확인요망 <br>"; //상품명
}
if( empty( $this->REQUEST["Amt"] ) || $this->REQUEST["Amt"] == "" )
{
$this->ERRMSG .= "금액 입력여부 확인요망 <br>"; //금액
}
if( empty( $this->REQUEST["DeviId"] ) || $this->REQUEST["DeviId"] == "" )
{
$this->ERRMSG .= "단말기아이디 입력여부 확인요망 <br>"; //단말기아이디
}
if( empty( $this->REQUEST["AuthYn"] ) || $this->REQUEST["AuthYn"] == "" )
{
$this->ERRMSG .= "인증여부 입력여부 확인요망 <br>"; //인증여부
}
if( strlen($this->ERRMSG) == 0 ){
/* Make Tid */
if( ($MakeTIDResult = $this->MakeNetCancID()) != true){
$this->log->WriteLog( FATAL, "Make NetCancelID Fail" );
$this->payQuit();
return false;
}else{
$this->log->WriteLog( INFO, "Make NetCancelID OK" );
}
/* Make Pay Msg */
if( ($MakeMsgResult = $this->MakeMsg()) != true){
$this->log->WriteLog( FATAL, "Make Pay Msg Fail" );
$this->ERRMSG = "결제요청전문생성 오류.";
$this->RESULT["rSuccYn"] = "n";
$this->RESULT["rResMsg"] = $this->ERRMSG;
$this->payQuit();
return false;
}else{
$this->log->WriteLog( INFO, "Make Pay Msg OK" );
}
/* Send & Recv Msg */
if( ($ParseResult = $this->SendRecvMsg()) != true){
$this->log->WriteLog( FATAL, "Send & Recv Msg Fail" );
$this->ERRMSG = "결제요청전문 송수신 오류.(결제내역을 꼭 확인해주세요)";
$this->RESULT["rSuccYn"] = "n";
$this->RESULT["rResMsg"] = $this->ERRMSG;
$this->REQUEST["CancelMsg"] = "Send & Recv Msg Fail";
$this->log->WriteLog( WARN, "NetCancel Call" );
if( $this->NetCancel() == false ) //망취소
{
$this->log->WriteLog( FATAL, "NetCancel Fail End" );
$this->payQuit();
return false;
}
$this->log->WriteLog( INFO, "NetCancel Success End" );
$this->payQuit();
return false;
}else{
$this->log->WriteLog( INFO, "Send & Recv Msg OK" );
}
/* RecvMsg Parsing */
if( ($ParseResult = $this->ParseMsg()) != true){
$this->log->WriteLog( FATAL, "Msg Parsing Fail" );
$this->ERRMSG = "결제결과전문 처리중 오류.(결제내역을 꼭 확인해주세요)";
$this->RESULT["rSuccYn"] = "n";
$this->RESULT["rResMsg"] = $this->ERRMSG;
$this->REQUEST["CancelMsg"] = "Msg Parsing Fail";
$this->log->WriteLog( WARN, "NetCancel Call" );
if( $this->NetCancel() == false ) //망취소
{
$this->log->WriteLog( FATAL, "NetCancel Fail End" );
$this->payQuit();
return false;
}
$this->log->WriteLog( INFO, "NetCancel Success End" );
$this->payQuit();
return false;
}else{
$this->log->WriteLog( INFO, "Msg Parsing OK" );
}
}
else
{
$this->RESULT["rSuccYn"] = "n";
$this->RESULT["rResMsg"] = $this->ERRMSG;
}
/*
결과값 로그기록
*/
$this->log->WriteLog( INFO,$this->REQUEST["AuthTy"]." ".$this->REQUEST["Type"]." Result Value [" );
$this->writeLogArray($this->RESULT);
$this->log->WriteLog( INFO, "]" );
//log 객체 닫기
$this->log->CloseLog( $this->GetResult("rResMsg") );
return true;
} //startPay() End
/*
프로세스 종료
*/
function payQuit()
{
//log 객체 닫기
$this->log->CloseLog( $this->GetResult("rResMsg") );
/** 소켓 close **/
if($this->fp != false ){
fclose( $this->fp );
}
}
/*
프로세스 종료
*/
function writeLogArray($array)
{
foreach ($array as $key => $value)
{
$this->log->WriteLog( INFO, $key.":".$value );
}
}
/*
결제요청 Msg 송신 및 결과 Msg수신
*/
function SendRecvMsg()
{
$this->log->WriteLog( INFO, "Send & Recv Msg Start" );
/****************************************************************************
*
* 암호화Process와 연결을 하고 승인 데이터 송수신
*
****************************************************************************/
/** 승인 전문을 암호화Process로 전송 **/
$this->log->WriteLog( INFO, "Send Data To PG Start [ " );
$this->SendValArray = array();
$this->SendValArray = explode( "|", $this->sSendMsg );
$this->log->WriteLog( INFO, $this->SendValArray);
$this->log->WriteLog( INFO, "] Send Data To PG End " );
$this->log->WriteLog( INFO, "SendMsg : [".$this->sSendMsg."]" );
/** 소켓 open **/
$this->log->WriteLog( INFO, "Connect IP:[".$this->LOCALADDR."] Port:[".$this->LOCALPORT."]" );
$this->fp = fsockopen( $this->LOCALADDR, $this->LOCALPORT , &$errno, &$errstr, $this->CONN_TIMEOUT );
if( !$this->fp )
{
$this->log->WriteLog( ERROR, "Socket Connect Error: [".$errno."-".$errstr."]" );
/** 연결 실패로 인한 실패 메세지 전송 **/
if($this->REQUEST["Type"] == "Cancel")
{
$this->RESULT["rCancelSuccYn"] = "n";
$this->RESULT["rCancelResMsg"] = "Socket Connect Fail";
$this->log->WriteLog( ERROR, $this->RESULT["rCancelResMsg"] );
}
else
{
$this->RESULT["rSuccYn"] = "n";
$this->RESULT["rResMsg"] = "Socket Connect Fail";
$this->log->WriteLog( ERROR, $this->RESULT["rResMsg"] );
}
if($this->fp) fclose( $this->fp );
return false;
}
/** 연결에 성공하였으므로 데이터를 받는다. **/
$this->log->WriteLog( INFO, "Socket Open OK" );
fputs( $this->fp, $this->sSendMsg );
socket_set_timeout($this->fp, $this->READ_TIMEOUT);
/** 최초 6바이트를 수신해 데이터 길이를 체크한 후 데이터만큼만 받는다. **/
/****************************************************************************
*
* PHP 버전에 따라 수신 데이터 길이 체크시 페이지오류가 발생할 수 있습니다
* 에러메세지:수신 데이터(길이) 체크 에러 통신오류에 의한 승인 실패
* 데이터 길이 체크 오류시 아래와 같이 변경하여 사용하십시오
* $this->sRecvLen = fgets( $this->fp, 6 );
* $this->sRecvMsg = fgets( $this->fp, $this->sRecvLen );
*
****************************************************************************/
if($this->REQUEST["RecvLen"] == 7)
{
$this->sRecvLen = fgets( $this->fp, $this->REQUEST["RecvLen"] );
$this->sRecvMsg = fgets( $this->fp, $this->sRecvLen + 1 );
}
else if($this->REQUEST["RecvLen"] == 6)
{
$this->sRecvLen = fgets( $this->fp, $this->REQUEST["RecvLen"] );
$this->sRecvMsg = fgets( $this->fp, $this->sRecvLen);
}
else
{
$this->REQUEST["RecvLen"] = 7;
$this->sRecvLen = fgets( $this->fp, $this->REQUEST["RecvLen"] );
$this->sRecvMsg = fgets( $this->fp, $this->sRecvLen + 1 );
}
$this->log->WriteLog( INFO, "RecvMsg Length : [".$this->sRecvLen."]" );
$this->log->WriteLog( INFO, "RecvMsg : [".$this->sRecvMsg."]" );
/** 소켓 close **/
fclose( $this->fp );
$this->log->WriteLog( INFO, "Socket Close OK");
if( strlen( $this->sRecvMsg ) > 0 && strlen( $this->sRecvMsg ) == $this->sRecvLen )
{
/** 수신 데이터(길이) 체크 정상 **/
$this->log->WriteLog( INFO, "RecvMsg Length Check OK");
$this->RecvValArray = array();
$this->RecvValArray = explode( "|", $this->sRecvMsg );
/** null 또는 NULL 문자, 0 을 공백으로 변환
for( $i = 0; $i < sizeof( $this->RecvValArray); $i++ )
{
$this->RecvValArray[$i] = trim( $this->RecvValArray[$i] );
if( !strcmp( $this->RecvValArray[$i], "null" ) || !strcmp( $this->RecvValArray[$i], "NULL" ) )
{
$this->RecvValArray[$i] = "";
}
if( IsNumber( $this->RecvValArray[$i] ) )
{
if( $this->RecvValArray[$i] == 0 ) $this->RecvValArray[$i] = "";
}
}
**/
$this->log->WriteLog( INFO, "Send & Recv Msg End" );
return true;
}
else
{
/** 수신 데이터(길이) 체크 에러시 통신오류에 의한 승인 실패로 간주 **/
if($this->REQUEST["Type"] == "Cancel")
{
$this->RESULT["rCancelSuccYn"] = "n";
$this->RESULT["rCancelResMsg"] = "Recv Msg Length Check Errror";
$this->log->WriteLog( ERROR, $this->RESULT["rCancelResMsg"]." : sRecvLen[".$this->sRecvLen."]"."sRecvMsg Length[".strlen( $this->sRecvMsg )."]");
}
else
{
$this->RESULT["rSuccYn"] = "n";
$this->RESULT["rResMsg"] = "Recv Msg Length Check Errror";
$this->log->WriteLog( ERROR, $this->RESULT["rResMsg"]." : sRecvLen[".$this->sRecvLen."]"."sRecvMsg Length[".strlen( $this->sRecvMsg )."]");
}
return false;
}
} //SendMsg() End
/*
웹을 통한 Msg 송신 및 결과 Msg수신
*/
function SendRecvMsgWeb()
{
//추후 작업예정
return false;
}
/*
Make Pay Msg
*/
function MakeMsg()
{
$this->log->WriteLog( INFO, "Make Msg Start" );
/****************************************************************************
* ※ 결제 형태 변수의 값에 따른 결제 구분
*
* AuthTy = "card" 신용카드결제
* - SubTy = "isp" 안전결제ISP
* - SubTy = "visa3d" 안심클릭
* - SubTy = "normal" 일반결제
*
* AuthTy = "iche" 일반-계좌이체
*
* AuthTy = "virtual" 일반-가상계좌(무통장입금)
*
* AuthTy = "hp" 핸드폰결제
*
* AuthTy = "ars" ARS결제
*
****************************************************************************/
if( strcmp( $this->REQUEST["AuthTy"], "card" ) == 0 )
{
if( strcmp( $this->REQUEST["SubTy"], "isp" ) == 0 )
{
/****************************************************************************
*
* [1-1] 신용카드결제 - ISP
*
* -- 이부분은 승인 처리를 위해 암호화Process와 Socket통신하는 부분이다.
* 가장 핵심이 되는 부분이므로 수정후에는 테스트를 하여야 한다.
* -- 데이터 길이는 매뉴얼 참고
*
* -- 승인 요청 전문 포멧
* + 데이터길이(6) + ISP구분코드(1) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.)
* 결제종류(6) | 업체ID(20) | 회원ID(20) | 결제금액(12) |
* 주문번호(40) | 단말기번호(10) | 수신인(40) | 수신인전화(21) |
* 배송지(100) | 주문자명(40) | 주문자연락처(100) | 기타요구사항(350) |
* 상품명(300) | 통화코드(3) | 일반할부기간(2) | 무이자할부기간(2) |
* KVP카드코드(22) | 세션키(256) | 암호화데이터(2048) | 카드명(50) |
* 회원 IP(20) | 회원 Email(50) | 망취소ID (50) |
*
****************************************************************************/
$this->ENCTYPE = 2;
/****************************************************************************
*
* 전송 전문 Make
*
****************************************************************************/
$this->sDataMsg = $this->ENCTYPE.
"plug15"."|".
$this->REQUEST["StoreId"]."|".
$this->REQUEST["UserId"]."|".
$this->REQUEST["Amt"]."|".
$this->REQUEST["OrdNo"]."|".
$this->REQUEST["DeviId"]."|".
$this->REQUEST["RcpNm"]."|".
$this->REQUEST["RcpPhone"]."|".
$this->REQUEST["DlvAddr"]."|".
$this->REQUEST["OrdNm"]."|".
$this->REQUEST["OrdPhone"]."|".
$this->REQUEST["Remark"]."|".
$this->REQUEST["ProdNm"]."|".
$this->REQUEST["KVP_CURRENCY"]."|".
$this->REQUEST["partial_mm"]."|".
$this->REQUEST["noIntMonth"]."|".
$this->REQUEST["KVP_CARDCODE"]."|".
$this->REQUEST["KVP_SESSIONKEY"]."|".
$this->REQUEST["KVP_ENCDATA"]."|".
$this->REQUEST["KVP_CONAME"]."|".
$this->REQUEST["UserIp"]."|".
$this->REQUEST["UserEmail"]."|".
$this->RESULT["NetCancID"]."|";
$this->sSendMsg = sprintf( "%06d%s", strlen( $this->sDataMsg ), $this->sDataMsg );
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]."-".$this->REQUEST["SubTy"]." "."Make MSG OK " );
}
else if( ( strcmp( $this->REQUEST["SubTy"], "visa3d" ) == 0 ) || ( strcmp( $this->REQUEST["SubTy"], "normal" ) == 0 ) )
{
/****************************************************************************
*
* [1-2] 신용카드결제 - VISA3D, 일반
*
* -- 이부분은 승인 처리를 위해 암호화Process와 Socket통신하는 부분이다.
* 가장 핵심이 되는 부분이므로 수정후에는 실제 서비스전까지 적절한 테스트를 하여야 한다.
* -- 데이터 길이는 매뉴얼 참고
*
* -- 승인 요청 전문 포멧
* + 데이터길이(6) + 암호화여부(1) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 하며 카드번호,유효기간,비밀번호,주민번호는 암호화된다.)
* 결제종류(6) | 업체ID(20) | 회원ID(20) | 결제금액(12) | 주문번호(40) |
* 단말기번호(10) | 카드번호(16) | 유효기간(6) | 할부기간(4) | 인증유무(1) |
* 카드비밀번호(2) | 주민등록번호/사업자번호(10) | 수신인(40) | 수신인전화(21) | 배송지(100) |
* 주문자명(40) | 주문자연락처(100) | 기타요구사항(350) | 상품명(300) | MPI_CAVV | MPI_MD64 | MPI_ECI | 망취소ID (50) |
*
****************************************************************************/
$this->ENCTYPE = 0;
/****************************************************************************
*
* 전송 전문 Make
*
****************************************************************************/
$this->sDataMsg = $this->ENCTYPE.
"plug15"."|".
$this->REQUEST["StoreId"]."|".
$this->REQUEST["UserId"]."|".
$this->REQUEST["Amt"]."|".
$this->REQUEST["OrdNo"]."|".
$this->REQUEST["DeviId"]."|".
$this->encrypt_aegis($this->REQUEST["CardNo"])."|".
$this->encrypt_aegis($this->REQUEST["ExpYear"].$this->REQUEST["ExpMon"])."|".
$this->REQUEST["Instmt"]."|".
$this->REQUEST["AuthYn"]."|".
$this->encrypt_aegis($this->REQUEST["Passwd"])."|".
$this->encrypt_aegis($this->REQUEST["SocId"])."|".
$this->REQUEST["RcpNm"]."|".
$this->REQUEST["RcpPhone"]."|".
$this->REQUEST["DlvAddr"]."|".
$this->REQUEST["OrdNm"]."|".
$this->REQUEST["UserIp"].";".$this->REQUEST["OrdPhone"]."|".
$this->REQUEST["UserEmail"].";".$this->REQUEST["Remark"]."|".
$this->REQUEST["ProdNm"]."|".
$this->REQUEST["MPI_CAVV"]."|".
$this->REQUEST["MPI_MD64"]."|".
$this->REQUEST["MPI_ECI"]."|".
$this->REQUEST["UserEmail"]."|".
$this->RESULT["NetCancID"]."|";
$this->sSendMsg = sprintf( "%06d%s", strlen( $this->sDataMsg ), $this->sDataMsg );
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]."-".$this->REQUEST["SubTy"]." "."Make MSG OK " );
}
}
else if( strcmp( $this->REQUEST["AuthTy"], "iche" ) == 0 && strcmp( $this->REQUEST["ICHE_SOCKETYN"], "Y" ) == 0)
{
/****************************************************************************
*
* [2-1] 인터넷뱅킹 계좌이체(소켓) 처리
*
* -- 이부분은 인터넷뱅킹 결제 처리를 위해 암호화Process와 Socket통신하는 부분이다.
* 가장 핵심이 되는 부분이므로 수정후에는 실제 서비스전까지 적절한 테스트를 하여야 한다.
* -- 데이터 길이는 매뉴얼 참고
*
* -- 인터넷뱅킹 결제 요청 전문 포멧
* + 데이터길이(6) + 암호화여부(1) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.)
* 결제종류(10) | 업체ID(20) | 주문번호(40) | 예금주명(20) | 거래금액(8) |
* 은행코드(2) | 예금주주민번호(13) | 주문자연락처(16) | 이메일주소(50) | 상품명(100) |
* 이용기관주문번호(50) | FNBC 거래번호(20) | 이체시각(14) | 현금영수증발행여부(1) | 회원아이디(20) |
* 거래자구분(2) | 신분확인번호(13) | 에스크로사용여부(1) | 에스크로회원번호(17) | 에스크로결제금액(8)|
* 에스크로수수료금액(8) |
*
****************************************************************************/
$this->ENCTYPE = R;
/****************************************************************************
*
* 전송 전문 Make
*
****************************************************************************/
$this->sDataMsg = $this->ENCTYPE.
"RB-PayReq"."|".
$this->REQUEST["StoreId"]."|".
$this->REQUEST["OrdNo"]."|".
$this->REQUEST["ICHE_OUTBANKMASTER"]."|".
$this->REQUEST["Amt"]."|".
$this->REQUEST["ICHE_OUTBANKNAME"]."|".
$this->REQUEST["ICHE_OUTACCTNO"]."|".
$this->REQUEST["OrdPhone"]."|".
$this->REQUEST["UserEmail"]."|".
$this->REQUEST["ProdNm"]."|".
$this->REQUEST["ICHE_POSMTID"]."|".
$this->REQUEST["ICHE_FNBCMTID"]."|".
$this->REQUEST["ICHE_APTRTS"]."|".
$this->REQUEST["ICHE_CASHYN"]."|".
$this->REQUEST["UserId"]."|".
$this->REQUEST["ICHE_CASHGUBUN_CD"]."|".
$this->REQUEST["ICHE_CASHID_NO"]."|".
$this->REQUEST["ICHE_ECWYN"]."|".
$this->REQUEST["ICHE_ECWID"]."|".
$this->REQUEST["ICHE_ECWAMT1"]."|".
$this->REQUEST["ICHE_ECWAMT2"]."|".
$this->RESULT["NetCancID"]."|";
$this->sSendMsg = sprintf( "%06d%s", strlen( $this->sDataMsg ), $this->sDataMsg );
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." "."Make MSG OK " );
}
else if( strcmp( $this->REQUEST["AuthTy"], "iche" ) == 0 && strcmp( $this->REQUEST["ICHEARS_SOCKETYN"], "Y" ) == 0)
{
/****************************************************************************
*
* [2-2] 텔레뱅킹 계좌이체(소켓) 처리
*
* -- 이부분은 텔레뱅킹 결제 처리를 위해 암호화Process와 Socket통신하는 부분이다.
* 가장 핵심이 되는 부분이므로 수정후에는 실제 서비스전까지 적절한 테스트를 하여야 한다.
* -- 데이터 길이는 매뉴얼 참고
*
* -- 텔레뱅킹 결제 요청 전문 포멧
* + 데이터길이(6) + 암호화여부(1) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.)
* 결제종류(10) | 업체ID(20) | 주문번호(40) | 예금주명(20) |
* 거래금액(8) | 은행코드(2) | 예금주주민번호(13) | 주문자연락처(16) |
* 이메일주소(50) | 상품명(100) | 이용기관주문번호(50) | FNBC 거래번호(20) |
* 이체시각(14) | 현금영수증발행여부(1) | 회원아이디(20) | 거래자구분(2) |
* 신분확인번호(13) | 에스크로사용여부(1) | 에스크로회원번호(17) | 에스크로결제금액(8) |
* 에스크로수수료금액(8) |
*
****************************************************************************/
$this->ENCTYPE = B;
/****************************************************************************
*
* 전송 전문 Make
*
****************************************************************************/
$this->sDataMsg = $this->ENCTYPE.
"TB-PayReq"."|".
$this->REQUEST["StoreId"]."|".
$this->REQUEST["OrdNo"]."|".
$this->REQUEST["ICHEARS_POSMTID"]."|".
$this->REQUEST["ICHEARS_ADMNO"]."|".
$this->REQUEST["ICHEARS_CENTERCD"]."|".
$this->REQUEST["Amt"]."|".
$this->REQUEST["ICHE_OUTACCTNO"]."|".
$this->REQUEST["ICHE_OUTBANKMASTER"]."|".
$this->REQUEST["ICHEARS_HPNO"]."|".
$this->REQUEST["UserEmail"]."|".
$this->REQUEST["ProdNm"]."|".
$this->REQUEST["ICHE_ECWYN"]."|".
$this->REQUEST["ICHE_ECWID"]."|".
$this->REQUEST["ICHE_ECWAMT1"]."|".
$this->REQUEST["ICHE_ECWAMT2"]."|".
$this->REQUEST["ICHE_CASHYN"]."|".
$this->REQUEST["ICHE_CASHGUBUN_CD"]."|".
$this->REQUEST["ICHE_CASHID_NO"]."|".
$this->RESULT["NetCancID"]."|";
$this->sSendMsg = sprintf( "%06d%s", strlen( $this->sDataMsg ), $this->sDataMsg );
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." "."Make MSG OK " );
}
else if( strcmp( $this->REQUEST["AuthTy"], "virtual" ) == 0 ) //가상계좌추가
{
/****************************************************************************
*
* [3] 가상계좌 결제
*
* -- 이부분은 승인 처리를 위해 암호화Process와 Socket통신하는 부분이다.
* 가장 핵심이 되는 부분이므로 수정후에는 테스트를 하여야 한다.
* -- 데이터 길이는 매뉴얼 참고
*
* -- 승인 요청 전문 포멧
* + 데이터길이(6) + 암호화 구분(1) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.)
* 결제종류(10) | 업체ID(20) | 주문번호(40) | 은행코드(4) | 가상계좌번호(20) |
* 거래금액(13) | 입금예정일(8) | 구매자명(20) | 주민번호(13) |
* 이동전화(21) | 이메일(50) | 구매자주소(100) | 수신자명(20) |
* 수신자연락처(21) | 배송지주소(100) | 상품명(100) | 기타요구사항(300) | 상점 도메인(50) | 상점 페이지(100)|
*
****************************************************************************/
$this->ENCTYPE = "V";
/****************************************************************************
*
* 전송 전문 Make
*
****************************************************************************/
$this->sDataMsg = $this->ENCTYPE.
/* $this->REQUEST["AuthTy"]."|". */
"vir_n|".
$this->REQUEST["StoreId"]."|".
$this->REQUEST["OrdNo"]."|".
$this->REQUEST["VIRTUAL_CENTERCD"]."|".
$this->REQUEST["VIRTUAL_NO"]."|".
$this->REQUEST["Amt"]."|".
$this->REQUEST["VIRTUAL_DEPODT"]."|".
$this->REQUEST["OrdNm"]."|".
$this->REQUEST["ZuminCode"]."|".
$this->REQUEST["OrdPhone"]."|".
$this->REQUEST["UserEmail"]."|".
$this->REQUEST["OrdAddr"]."|".
$this->REQUEST["RcpNm"]."|".
$this->REQUEST["RcpPhone"]."|".
$this->REQUEST["DlvAddr"]."|".
$this->REQUEST["ProdNm"]."|".
$this->REQUEST["Remark"]."|".
$this->REQUEST["MallUrl"]."|".
$this->REQUEST["MallPage"]."|".
$this->RESULT["NetCancID"]."|";
$this->sSendMsg = sprintf( "%06d%s", strlen( $this->sDataMsg ), $this->sDataMsg );
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." "."Make MSG OK " );
}
else if( strcmp( $this->REQUEST["AuthTy"], "hp" ) == 0 )
{
/****************************************************************************
*
* [4] 핸드폰 결제
*
* 핸드폰 결제를 사용하지않는 상점은 AGS_pay.html에서 지불방법을 꼭 신용카드(전용)으로 설정해 놓으시기 바랍니다.
*
* 이부분은 승인 처리를 위해 암호화Process와 Socket통신하는 부분이다.
* 가장 핵심이 되는 부분이므로 수정후에는 테스트를 하여야 한다.
* -- 승인 요청 전문 포멧
* + 데이터길이(6) + 핸드폰구분코드(1) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.)
*
****************************************************************************/
$this->ENCTYPE = "h";
$this->REQUEST["StrSubTy"] = "Bill";
/****************************************************************************
*
* 전송 전문 Make
*
****************************************************************************/
$this->sDataMsg = $this->ENCTYPE.
$this->REQUEST["StrSubTy"]."|".
$this->REQUEST["StoreId"]."|".
$this->REQUEST["HP_SERVERINFO"]."|".
$this->REQUEST["HP_ID"]."|".
$this->REQUEST["HP_SUBID"]."|".
$this->REQUEST["OrdNo"]."|".
$this->REQUEST["Amt"]."|".
$this->REQUEST["HP_UNITType"]."|".
$this->REQUEST["HP_HANDPHONE"]."|".
$this->REQUEST["HP_COMPANY"]."|".
$this->REQUEST["HP_IDEN"]."|".
$this->REQUEST["UserId"]."|".
$this->REQUEST["UserEmail"]."|".
$this->REQUEST["HP_IPADDR"]."|".
$this->REQUEST["ProdNm"]."|".
$this->RESULT["NetCancID"]."|";
$this->sSendMsg = sprintf( "%06d%s", strlen( $this->sDataMsg ), $this->sDataMsg );
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." "."Make MSG OK " );
}
else if( strcmp( $this->REQUEST["AuthTy"], "ars" ) == 0 )
{
/****************************************************************************
*
* [5] ARS 결제
*
* ARS 결제를 사용하지않는 상점은 AGS_pay.html에서 지불방법을 꼭 신용카드(전용)으로 설정해 놓으시기 바랍니다.
*
* 이부분은 승인 처리를 위해 암호화Process와 Socket통신하는 부분이다.
* 가장 핵심이 되는 부분이므로 수정후에는 테스트를 하여야 한다.
* -- 승인 요청 전문 포멧
* + 데이터길이(6) + ARS구분코드(1) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.)
*
****************************************************************************/
$this->ENCTYPE = "A";
$this->REQUEST["StrSubTy"] = "ABill";
/****************************************************************************
*
* 전송 전문 Make
*
****************************************************************************/
$this->sDataMsg = $this->ENCTYPE.
$this->REQUEST["StrSubTy"]."|".
$this->REQUEST["StoreId"]."|".
$this->REQUEST["HP_SERVERINFO"]."|".
$this->REQUEST["HP_ID"]."|".
$this->REQUEST["HP_UNITType"]."|".
$this->REQUEST["Amt"]."|".
$this->REQUEST["ProdNm"]."|".
$this->REQUEST["UserEmail"]."|".
$this->REQUEST["HP_SUBID"]."|".
$this->REQUEST["OrdNo"]."|".
$this->REQUEST["UserId"]."|".
$this->REQUEST["ARS_PHONE"]."|".
$this->REQUEST["HP_IDEN"]."|".
$this->REQUEST["ARS_NAME"]."|".
$this->REQUEST["HP_COMPANY"]."|".
$this->REQUEST["HP_IPADDR"]."|".
$this->RESULT["NetCancID"]."|";
$this->sSendMsg = sprintf( "%06d%s", strlen( $this->sDataMsg ), $this->sDataMsg );
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." "."Make MSG OK " );
}else{
$this->ERRMSG .= "결제수단 오류. AuthTy:[".$this->REQUEST["AuthTy"]."],SubTy:[".$this->REQUEST["SubTy"]."]";
$this->log->WriteLog( ERROR, $this->ERRMSG );
$this->RESULT["rSuccYn"] = "n";
$this->RESULT["rResMsg"] = $this->ERRMSG;
return false;
}
$this->log->WriteLog( INFO, "Make Msg End" );
return true;
} // MakeMsg() End
/*
Make Cancel Msg
*/
function MakeCancelMsg()
{
$this->log->WriteLog( INFO, "Make Cancel Msg Start" );
if( strcmp( $this->REQUEST["AuthTy"], "card" ) == 0 )
{
if( strcmp( $this->REQUEST["SubTy"], "isp" ) == 0 )
{
/****************************************************************************
*
* [1-1] 신용카드승인취소 - ISP
*
* -- 이부분은 취소 승인 처리를 위해 PG서버Process와 Socket통신하는 부분이다.
* 가장 핵심이 되는 부분이므로 수정후에는 실제 서비스전까지 적절한 테스트를 하여야 한다.
* -- 데이터 길이는 매뉴얼 참고
*
* -- 취소 승인 요청 전문 포멧
* + 데이터길이(6) + 암호화여부(1) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.
* 결제종류(6) | 업체아이디(20) | 승인번호(20) | 승인시간(8) | 거래고유번호(6) |
*
* -- 취소 승인 응답 전문 포멧
* + 데이터길이(6) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.
* 업체ID(20) | 승인번호(20) | 승인시각(8) | 전문코드(4) | 거래고유번호(6) | 성공여부(1) |
*
****************************************************************************/
$this->ENCTYPE = 2;
/****************************************************************************
*
* 전송 전문 Make
*
****************************************************************************/
$this->sDataMsg = $this->ENCTYPE.
"cancel"."|".
$this->GetResult("StoreId")."|".
$this->GetResult("rApprNo")."|".
substr($this->GetResult("rApprTm"),0,8)."|".
$this->GetResult("rDealNo")."|".
$this->GetResult("NetCancID")."|";
$this->sSendMsg = sprintf( "%06d%s", strlen( $this->sDataMsg ), $this->sDataMsg );
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]."-".$this->REQUEST["SubTy"]." "."Make Cancel MSG OK " );
}
else if( ( strcmp( $this->REQUEST["SubTy"], "visa3d" ) == 0 ) || ( strcmp( $this->REQUEST["SubTy"], "normal" ) == 0 ) )
{
/****************************************************************************
*
* [1-2] 신용카드승인취소 - VISA3D, 일반
*
* -- 이부분은 취소 승인 처리를 위해 암호화Process와 Socket통신하는 부분이다.
* 가장 핵심이 되는 부분이므로 수정후에는 실제 서비스전까지 적절한 테스트를 하여야 한다.
*
* -- 취소 승인 요청 전문 포멧
* + 데이터길이(6) + 암호화여부(1) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 하며 카드번호,유효기간,비밀번호,주민번호는 암호화된다.)
* 결제종류(6) | 업체아이디(20) | 승인번호(8) | 승인시간(14) | 카드번호(16) |
*
* -- 취소 승인 응답 전문 포멧
* + 데이터길이(6) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 하며 암호화Process에서 해독된후 실데이터를 수신하게 된다.
* 업체ID(20) | 승인번호(8) | 승인시각(14) | 전문코드(4) | 성공여부(1) |
* 주문번호(20) | 할부개월(2) | 결제금액(20) | 카드사명(20) | 카드사코드(4) |
* 가맹점번호(15) | 매입사코드(4) | 매입사명(20) | 전표번호(6)
*
****************************************************************************/
$this->ENCTYPE = 0;
/****************************************************************************
*
* 전송 전문 Make
*
****************************************************************************/
$this->sDataMsg = $this->ENCTYPE.
"cancel"."|".
$this->GetResult("StoreId")."|".
$this->GetResult("rApprNo")."|".
substr($this->GetResult("rApprTm"),0,8)."|".
$this->GetResult("rDealNo")."|".
$this->GetResult("NetCancID")."|";
$this->sSendMsg = sprintf( "%06d%s", strlen( $this->sDataMsg ), $this->sDataMsg );
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]."-".$this->REQUEST["SubTy"]." "."Make Cancel MSG OK " );
}
}else if( strcmp( $this->REQUEST["AuthTy"], "iche" ) == 0 && strcmp( $this->REQUEST["ICHE_SOCKETYN"], "Y" ) == 0){
/****************************************************************************
*
* [2-1] 인터넷뱅킹 계좌이체(소켓) 취소처리
*
* -- 이부분은 인터넷뱅킹 결제 취소처리를 위해 암호화Process와 Socket통신하는 부분이다.
* 가장 핵심이 되는 부분이므로 수정후에는 실제 서비스전까지 적절한 테스트를 하여야 한다.
* -- 데이터 길이는 매뉴얼 참고
*
* -- 인터넷뱅킹 결제 요청 전문 포멧
* + 데이터길이(6) + 암호화여부(1) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.)
* 결제종류(10) | 업체ID(20) | MTID(계좌이체결제 결과값) | 결제금액(8) | 은행코드(2)
*
****************************************************************************/
$this->ENCTYPE = R;
/****************************************************************************
*
* 전송 전문 Make
*
****************************************************************************/
$this->sDataMsg = $this->ENCTYPE.
"RB-CanReq"."|".
$this->GetResult("StoreId")."|".
$this->GetResult("ICHE_POSMTID")."|".
$this->GetResult("Amt")."|".
$this->GetResult("ICHE_OUTBANKNAME")."|".
$this->GetResult("NetCancID")."|";
$this->sSendMsg = sprintf( "%06d%s", strlen( $this->sDataMsg ), $this->sDataMsg );
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." "."Make Cancel MSG OK " );
}else if( strcmp( $this->REQUEST["AuthTy"], "iche" ) == 0 && strcmp( $this->REQUEST["ICHEARS_SOCKETYN"], "Y" ) == 0){
/****************************************************************************
*
* [2-1] 텔레뱅킹 계좌이체(소켓) 취소처리
*
* -- 이부분은 텔레뱅킹 결제 취소처리를 위해 암호화Process와 Socket통신하는 부분이다.
* 가장 핵심이 되는 부분이므로 수정후에는 실제 서비스전까지 적절한 테스트를 하여야 한다.
* -- 데이터 길이는 매뉴얼 참고
*
* -- 텔레뱅킹 결제 요청 전문 포멧
* + 데이터길이(6) + 암호화여부(1) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.)
* 결제종류(10) | 업체ID(20) | MTID(계좌이체결제 결과값) | 결제금액(8) | 은행코드(2)
*
****************************************************************************/
$this->ENCTYPE = B;
/****************************************************************************
*
* 전송 전문 Make
*
****************************************************************************/
$this->sDataMsg = $this->ENCTYPE.
"TB-CanReq"."|".
$this->GetResult("StoreId")."|".
""."|".
""."|".
$this->GetResult("NetCancID")."|";
$this->sSendMsg = sprintf( "%06d%s", strlen( $this->sDataMsg ), $this->sDataMsg );
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." "."Make Cancel MSG OK " );
}else if( strcmp( $this->REQUEST["AuthTy"], "hp" ) == 0 ){
/****************************************************************************
*
* [3] 핸드폰 취소처리
*
* -- 이부분은 핸드폰 결제 취소처리를 위해 암호화Process와 Socket통신하는 부분이다.
* 가장 핵심이 되는 부분이므로 수정후에는 실제 서비스전까지 적절한 테스트를 하여야 한다.
* -- 데이터 길이는 매뉴얼 참고
*
* -- 핸드폰 결제 요청 전문 포멧
* + 데이터길이(6) + 암호화여부(1) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.)
* 결제종류(10) | 업체ID(20) | NetCancID |
*
****************************************************************************/
$this->ENCTYPE = H;
/****************************************************************************
*
* 전송 전문 Make
*
****************************************************************************/
$this->sDataMsg = $this->ENCTYPE.
"MobileCanReq"."|".
$this->GetResult("StoreId")."|".
$this->GetResult("NetCancID")."|";
$this->sSendMsg = sprintf( "%06d%s", strlen( $this->sDataMsg ), $this->sDataMsg );
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." "."Make Cancel MSG OK " );
}else if( strcmp( $this->REQUEST["AuthTy"], "ars" ) == 0 ){
/****************************************************************************
*
* [4] ARS 취소처리
*
* -- 이부분은 ARS 결제 취소처리를 위해 암호화Process와 Socket통신하는 부분이다.
* 가장 핵심이 되는 부분이므로 수정후에는 실제 서비스전까지 적절한 테스트를 하여야 한다.
* -- 데이터 길이는 매뉴얼 참고
*
* -- ARS 결제 요청 전문 포멧
* + 데이터길이(6) + 암호화여부(1) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.)
* 결제종류(10) | 업체ID(20) | NetCancID |
*
****************************************************************************/
$this->ENCTYPE = A;
/****************************************************************************
*
* 전송 전문 Make
*
****************************************************************************/
$this->sDataMsg = $this->ENCTYPE.
"ARSCanReq"."|".
$this->GetResult("StoreId")."|".
$this->GetResult("NetCancID")."|";
$this->sSendMsg = sprintf( "%06d%s", strlen( $this->sDataMsg ), $this->sDataMsg );
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." "."Make Cancel MSG OK " );
}else{
//신용카드,계좌이체 이외의 결제수단은 취소기능 적용되지 않음.
$this->log->WriteLog( WARN, "Cancel Passed. AuthTy : [".$this->REQUEST["AuthTy"]."-".$this->REQUEST["SubTy"]."] " );
$this->RESULT["rCancelSuccYn"] = "n";
$this->RESULT["rCancelResMsg"] = "Cannot Cancel AuthTy[".$this->REQUEST["AuthTy"]."]";
return false;
}
$this->log->WriteLog( INFO, "Make Cancel Msg End" );
return true;
} //MakeCancelMsg End
/*
RecvMsg Parsing
*/
function ParseMsg()
{
$this->log->WriteLog( INFO, "Parse Msg Start" );
/****************************************************************************
* ※ 결제 형태 변수의 값에 따른 결제 구분
*
* AuthTy = "card" 신용카드결제
* - SubTy = "isp" 안전결제ISP
* - SubTy = "visa3d" 안심클릭
* - SubTy = "normal" 일반결제
*
* AuthTy = "iche" 일반-계좌이체
*
* AuthTy = "virtual" 일반-가상계좌(무통장입금)
*
* AuthTy = "hp" 핸드폰결제
*
* AuthTy = "ars" ARS결제
*
****************************************************************************/
if( strcmp( $this->REQUEST["AuthTy"], "card" ) == 0 )
{
if( strcmp( $this->REQUEST["SubTy"], "isp" ) == 0 )
{
/****************************************************************************
*
* [1-1] 신용카드 안전결제ISP 처리
*
*
* -- 승인 응답 전문 포멧
* + 데이터길이(6) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.
* 업체ID(20) | 전문코드(4) | 거래고유번호(6) | 승인번호(8) |
* 거래금액(12) | 성공여부(1) | 실패사유(20) | 승인시각(14) |
* 카드사코드(4) |
*
****************************************************************************/
$this->RESULT["rStoreId"] = $this->RecvValArray[0];
$this->RESULT["rBusiCd"] = $this->RecvValArray[1];
$this->RESULT["rOrdNo"] = $this->REQUEST["OrdNo"];
$this->RESULT["rDealNo"] = $this->RecvValArray[2];
$this->RESULT["rApprNo"] = $this->RecvValArray[3];
$this->RESULT["rProdNm"] = $this->REQUEST["ProdNm"];
$this->RESULT["rAmt"] = $this->RecvValArray[4];
$this->RESULT["rInstmt"] = $this->REQUEST["KVP_QUOTA"];
$this->RESULT["rSuccYn"] = $this->RecvValArray[5];
$this->RESULT["rResMsg"] = $this->RecvValArray[6];
$this->RESULT["rApprTm"] = $this->RecvValArray[7];
$this->RESULT["rCardCd"] = $this->RecvValArray[8];
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]."-".$this->REQUEST["SubTy"]." "."RECV MSG Parsing OK " );
}
else if( ( strcmp( $this->REQUEST["SubTy"], "visa3d" ) == 0 ) || ( strcmp( $this->REQUEST["SubTy"], "normal" ) == 0 ) )
{
/****************************************************************************
*
* [1-2] 안심클릭 or 일반결제 처리 승인응답 전문포맷
* + 데이터길이(6) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 하며 암호화Process에서 해독된후 실데이터를 수신하게 된다.
* 업체ID(20) | 전문코드(4) | 주문번호(40) | 승인번호(8) | 거래금액(12) |
* 성공여부(1) | 실패사유(20) | 카드사명(20) | 승인시각(14) | 카드사코드(4) |
* 가맹점번호(15) | 매입사코드(4) | 매입사명(20) | 전표번호(6) |
*
****************************************************************************/
$this->RESULT["rStoreId"] = $this->RecvValArray[0];
$this->RESULT["rBusiCd"] = $this->RecvValArray[1];
$this->RESULT["rOrdNo"] = $this->RecvValArray[2];
$this->RESULT["rApprNo"] = $this->RecvValArray[3];
$this->RESULT["rInstmt"] = $this->REQUEST["Instmt"];
$this->RESULT["rAmt"] = $this->RecvValArray[4];
$this->RESULT["rSuccYn"] = $this->RecvValArray[5];
$this->RESULT["rResMsg"] = $this->RecvValArray[6];
$this->RESULT["rCardNm"] = $this->RecvValArray[7];
$this->RESULT["rApprTm"] = $this->RecvValArray[8];
$this->RESULT["rCardCd"] = $this->RecvValArray[9];
$this->RESULT["rMembNo"] = $this->RecvValArray[10];
$this->RESULT["rAquiCd"] = $this->RecvValArray[11];
$this->RESULT["rAquiNm"] = $this->RecvValArray[12];
$this->RESULT["rDealNo"] = $this->RecvValArray[13];
$this->RESULT["rProdNm"] = $this->REQUEST["ProdNm"];
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]."-".$this->REQUEST["SubTy"]." "."RECV MSG Parsing OK " );
}
}
else if( strcmp( $this->REQUEST["AuthTy"], "iche" ) == 0 && strcmp( $this->REQUEST["ICHE_SOCKETYN"], "Y" ) == 0)
{
/****************************************************************************
*
* [2-1] 계좌이체 소켓방식(인터넷뱅킹) 결제 요청 응답 전문 포멧
* + 데이터길이(6) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 하며 암호화Process에서 해독된후 실데이터를 수신하게 된다.
* 결제종류(10) | 상점아이디(20) | 주문번호(40) | 이용기관주문번호(50) | 결과코드(4) | 결과메시지(300) |
*
****************************************************************************/
$this->RESULT["rStoreId"] = $this->RecvValArray[1];
$this->RESULT["rOrdNo"] = $this->RecvValArray[2];
$this->RESULT["rMTid"] = $this->RecvValArray[3];
$this->RESULT["ES_SENDNO"] = $this->RecvValArray[4];
$this->RESULT["rSuccYn"] = $this->RecvValArray[5];
$this->RESULT["rResMsg"] = $this->RecvValArray[6];
$this->RESULT["rAmt"] = $this->REQUEST["Amt"];
$this->RESULT["rProdNm"] = $this->REQUEST["ProdNm"];
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." "."RECV MSG Parsing OK " );
}
else if( strcmp( $this->REQUEST["AuthTy"], "iche" ) == 0 && strcmp( $this->REQUEST["ICHEARS_SOCKETYN"], "Y" ) == 0)
{
/****************************************************************************
*
* [2-2] 계좌이체 텔레뱅킹 처리
*
* -- 텔레뱅킹 결제 요청 응답 전문 포멧
* + 데이터길이(6) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 하며 암호화Process에서 해독된후 실데이터를 수신하게 된다.
* 결제종류(10) | 상점아이디(20) | 주문번호(40) | 이용기관주문번호(50) | 결과코드(4) | 결과메시지(300) |*
*
****************************************************************************/
$this->RESULT["rStoreId"] = $this->RecvValArray[1];
$this->RESULT["rOrdNo"] = $this->RecvValArray[2];
$this->RESULT["rMTid"] = $this->RecvValArray[3];
$this->RESULT["rSuccYn"] = $this->RecvValArray[4];
$this->RESULT["rResMsg"] = $this->RecvValArray[5];
$this->RESULT["rAmt"] = $this->REQUEST["Amt"];
$this->RESULT["rProdNm"] = $this->REQUEST["ProdNm"];
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." "."Parse MSG Passed " );
$pos = strpos($this->RESULT["rResMsg"],':');
if( $pos !== false )
{
$this->RESULT["ES_SENDNO"] = substr($this->RESULT["rResMsg"],$pos+1,6) ;
$this->log->WriteLog( INFO, "ES_SENDNO : [".$this->RESULT["ES_SENDNO"]."] ");
}
}
else if( strcmp( $this->REQUEST["AuthTy"], "virtual" ) == 0 )
{
/****************************************************************************
*
* [3] 가상계좌(무통장입금) 처리
*
* -- 승인 응답 전문 포멧
* + 데이터길이(6) + 암호화 구분(1) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.
* 결제종류(10) | 업체ID(20) | 승인일자(14) | 가상계좌번호(20) | 결과코드(1) | 결과메시지(100) |
*
****************************************************************************/
$this->RESULT["rAuthTy"] = $this->RecvValArray[0];
$this->RESULT["rStoreId"] = $this->RecvValArray[1];
$this->RESULT["rApprTm"] = $this->RecvValArray[2];
$this->RESULT["rVirNo"] = $this->RecvValArray[3];
$this->RESULT["rSuccYn"] = $this->RecvValArray[4];
$this->RESULT["rResMsg"] = $this->RecvValArray[5];
$this->RESULT["rOrdNo"] = $this->REQUEST["OrdNo"];
$this->RESULT["rProdNm"] = $this->REQUEST["ProdNm"];
$this->RESULT["rAmt"] = $this->REQUEST["Amt"];
$pos = strpos($this->RESULT["rResMsg"],':');
if( $pos !== false )
{
$this->RESULT["ES_SENDNO"] = substr($this->RESULT["rResMsg"],$pos+1,6) ;
$this->log->WriteLog( INFO, "ES_SENDNO : [".$this->RESULT["ES_SENDNO"]."] ");
}
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." "."RECV MSG Parsing OK " );
}
else if( strcmp( $this->REQUEST["AuthTy"], "hp" ) == 0 )
{
/****************************************************************************
*
* [4] 핸드폰 결제
*
* -- 승인 응답 전문 포멧
* + 데이터길이(6) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.)
* 업체ID(20) | 결과코드(1) | 결과메시지(100) | 핸드폰결제일(8) | 핸드폰결제 TID(12) | 거래금액(12) | 주문번호(40) |
*
****************************************************************************/
$this->RESULT["rStoreId"] = $this->RecvValArray[0];
$this->RESULT["rSuccYn"] = $this->RecvValArray[1];
$this->RESULT["rResMsg"] = $this->RecvValArray[2];
$this->RESULT["rHP_DATE"] = $this->RecvValArray[3];
$this->RESULT["rHP_TID"] = $this->RecvValArray[4];
$this->RESULT["rAmt"] = $this->REQUEST["Amt"];
$this->RESULT["rOrdNo"] = $this->REQUEST["OrdNo"];
$this->RESULT["rProdNm"] = $this->REQUEST["ProdNm"];
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." "."RECV MSG Parsing OK " );
}
else if( strcmp( $this->REQUEST["AuthTy"], "ars" ) == 0 )
{
/****************************************************************************
*
* [5] ARS 결제
*
* -- 승인 응답 전문 포멧
* + 데이터길이(6) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 한다.)
* 업체ID(20) | 결과코드(1) | 결과메시지(100) | ARS결제일(8) | ARS결제 TID(12) | 거래금액(12) | 주문번호(40) |
*
****************************************************************************/
$this->RESULT["rStoreId"] = $this->RecvValArray[0];
$this->RESULT["rSuccYn"] = $this->RecvValArray[1];
$this->RESULT["rResMsg"] = $this->RecvValArray[2];
$this->RESULT["rHP_DATE"] = $this->RecvValArray[3];
$this->RESULT["rHP_TID"] = $this->RecvValArray[4];
$this->RESULT["rAmt"] = $this->REQUEST["Amt"];
$this->RESULT["rOrdNo"] = $this->REQUEST["OrdNo"];
$this->RESULT["rProdNm"] = $this->REQUEST["ProdNm"];
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." "."RECV MSG Parsing OK " );
}else{
$this->log->WriteLog( FATAL, "Unknown AuthTy. AuthTy:[".$this->REQUEST["AuthTy"]."],SubTy:[".$this->REQUEST["SubTy"]."]");
return false;
}
$this->log->WriteLog( INFO, "Parse Msg End" );
return true;
} //ParseMsg() End
/*
RecvCancelMsg Parsing
*/
function ParseCancelMsg()
{
$this->log->WriteLog( INFO, "Parse Cancel Msg Start" );
if( strcmp( $this->REQUEST["AuthTy"], "card" ) == 0 )
{
if( strcmp( $this->REQUEST["SubTy"], "isp" ) == 0 )
{
/* [1-1] 안전결제ISP 처리 */
$this->RESULT["rStoreId"] = $this->RecvValArray[0];
$this->RESULT["rApprNo"] = $this->RecvValArray[1];
$this->RESULT["rApprTm"] = $this->RecvValArray[2];
$this->RESULT["rBusiCd"] = $this->RecvValArray[3];
$this->RESULT["rDealNo"] = $this->RecvValArray[4];
$this->RESULT["rCancelSuccYn"] = $this->RecvValArray[5];
$this->RESULT["rCancelResMsg"] = $this->RecvValArray[6];
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]."-".$this->REQUEST["SubTy"]." "."RECV MSG Parsing OK " );
}
else if( ( strcmp( $this->REQUEST["SubTy"], "visa3d" ) == 0 ) || ( strcmp( $this->REQUEST["SubTy"], "normal" ) == 0 ) )
{
/* [1-2] 안심클릭 or 일반결제 처리 */
$this->RESULT["rStoreId"] = $this->RecvValArray[0];
$this->RESULT["rApprNo"] = $this->RecvValArray[1];
$this->RESULT["rApprTm"] = $this->RecvValArray[2];
$this->RESULT["rBusiCd"] = $this->RecvValArray[3];
$this->RESULT["rCancelSuccYn"] = $this->RecvValArray[4];
$this->RESULT["rOrdNo"] = $this->RecvValArray[5];
$this->RESULT["rInstmt"] = $this->RecvValArray[6];
$this->RESULT["rAmt"] = $this->RecvValArray[7];
$this->RESULT["rCardNm"] = $this->RecvValArray[8];
$this->RESULT["rCardCd"] = $this->RecvValArray[9];
$this->RESULT["rMembNo"] = $this->RecvValArray[10];
$this->RESULT["rAquiCd"] = $this->RecvValArray[11];
$this->RESULT["rAquiNm"] = $this->RecvValArray[12];
$this->RESULT["rDealNo"] = $this->RecvValArray[13];
if($this->RESULT["rCancelSuccYn"] == "y")
{
$this->RESULT["rCancelResMsg"] = "정상취소";
}
else
{
$this->RESULT["rCancelResMsg"] = "취소실패";
}
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]."-".$this->REQUEST["SubTy"]." "."RECV MSG Parsing OK " );
}
}
else if( strcmp( $this->REQUEST["AuthTy"], "iche" ) == 0 && strcmp( $this->REQUEST["ICHE_SOCKETYN"], "Y" ) == 0)
{
/* [2-1] 계좌이체 인터넷뱅킹 취소*/
/* [RB-CanRes|상점ID|posmTid|주문번호|y|취소성공|] */
$this->RESULT["rStoreId"] = $this->RecvValArray[1];
$this->RESULT["ICHE_POSMTID"] = $this->RecvValArray[2];
$this->RESULT["rOrdNo"] = $this->RecvValArray[3];
$this->RESULT["rCancelSuccYn"] = $this->RecvValArray[4];
$this->RESULT["rCancelResMsg"] = $this->RecvValArray[5];
}
else if( strcmp( $this->REQUEST["AuthTy"], "iche" ) == 0 && strcmp( $this->REQUEST["ICHEARS_SOCKETYN"], "Y" ) == 0)
{
/* [2-2] 계좌이체 텔레뱅킹 취소*/
/* [TB-CanRes|상점ID|posmTid|주문번호|y|취소성공|] */
$this->RESULT["rStoreId"] = $this->RecvValArray[1];
$this->RESULT["rMTid"] = $this->RecvValArray[2];
$this->RESULT["rCancelSuccYn"] = $this->RecvValArray[3];
$this->RESULT["rCancelResMsg"] = $this->RecvValArray[4];
}
else if( strcmp( $this->REQUEST["AuthTy"], "hp" ) == 0 )
{
/****************************************************************************
*
* [4] 핸드폰 결제 취소
*
* -- 취소 응답 전문 포멧
* + 데이터길이(6) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 하며 암호화Process에서 해독된후 실데이터를 수신하게 된다.
* | MobileCanRes | 업체ID(20) | 성공여부(1) | 결과메세지 | 취소처리일시 | 이용기관주문번호 |
*
****************************************************************************/
/* [MobileCanRes|상점ID|결과(y/n)|결과메세지|취소일시|이용기관주문번호|] */
$this->RESULT["rStoreId"] = $this->RecvValArray[1];
$this->RESULT["rCancelSuccYn"] = $this->RecvValArray[2];
$this->RESULT["rCancelResMsg"] = $this->RecvValArray[3];
$this->RESULT["rCancelDate"] = $this->RecvValArray[4];
$this->RESULT["rTid"] = $this->RecvValArray[5];
}
else if( strcmp( $this->REQUEST["AuthTy"], "ars" ) == 0 )
{
/****************************************************************************
*
* [5] ARS 결제 취소
*
* -- 취소 응답 전문 포멧
* + 데이터길이(6) + 데이터
* + 데이터 포멧(데이터 구분은 "|"로 하며 암호화Process에서 해독된후 실데이터를 수신하게 된다.
* | ArsCanRes | 업체ID(20) | 성공여부(1) | 결과메세지 | 취소처리일시 | 이용기관주문번호 |
*
****************************************************************************/
/* [ArsCanRes|상점ID|결과(y/n)|결과메세지|취소일시|이용기관주문번호|] */
$this->RESULT["rStoreId"] = $this->RecvValArray[1];
$this->RESULT["rCancelSuccYn"] = $this->RecvValArray[2];
$this->RESULT["rCancelResMsg"] = $this->RecvValArray[3];
$this->RESULT["rCancelDate"] = $this->RecvValArray[4];
$this->RESULT["rTid"] = $this->RecvValArray[5];
}
else
{
$this->log->WriteLog( INFO, $this->REQUEST["AuthTy"]." "."Parse CancelMSG Passed " );
$this->RESULT["rCancelSuccYn"] = "n";
$this->RESULT["rCancelResMsg"] = "Cannot Cancel AuthTy[".$this->REQUEST["AuthTy"]."]";
return false;
}
$this->log->WriteLog( INFO, "Parse Cancel Msg End" );
return true;
}
/*
망취소 요청
*/
function NetCancel()
{
$this->log->WriteLog( WARN, $this->REQUEST["AuthTy"]."-".$this->REQUEST["SubTy"]." Cancel Start");
if( $this->REQUEST["UseNetCancel"] == "true" || $this->REQUEST["Type"] == "Cancel" )
{
$this->log->WriteLog( WARN, "Cancel Reason : ".$this->REQUEST["CancelMsg"]);
if( !($this->MakeCancelMsg()) )
{
$this->log->WriteLog( ERROR, "Make CancelMsg Error");
return false;
}
if( !($this->SendRecvMsg()) )
{
$this->log->WriteLog( ERROR, "Send & Recv Msg Error");
return false;
}
if( !($this->ParseCancelMsg()) )
{
$this->log->WriteLog( ERROR, "ParseCancelMsg Error");
return false;
}
if( $this->RESULT["rCancelSuccYn"] == "y")
{
$this->log->WriteLog( WARN, "Cancel Success");
}
else
{
$this->log->WriteLog( FATAL, "Cancel FAIL");
}
}
else
{
$this->log->WriteLog( WARN, "Cancel Passed (UseNetCancel value Is false)");
}
$this->log->WriteLog( WARN, $this->REQUEST["AuthTy"]."-".$this->REQUEST["SubTy"]." Cancel End");
if($this->RESULT["rCancelSuccYn"] == "y"){
//결제결과값 실패로 설정
$this->SetPayResult( "rSuccYn", "n" );
$this->SetPayResult( "rResMsg", $this->REQUEST["CancelMsg"] );
return true;
}else{
return false;
}
}
/*
데이터 확인요청
*/
function checkPayResult( $TID )
{
/*
Log 기록 객체생성
*/
$this->log = new PayLog( $this->REQUEST );
if(!$this->log->InitLog())
{
$this->ERRMSG .= "로그파일을 열수가 없습니다.[".$this->REQUEST["AgsPayHome"]."]" ;
$this->RESULT["rSuccYn"] = "n";
$this->RESULT["rResMsg"] = $this->ERRMSG;
$this->RESULT["rCancelSuccYn"] = "n";
$this->RESULT["rCancelResMsg"] = $this->ERRMSG;
return false;
}
$this->log->WriteLog( INFO, "[".$TID."] Check PayResult Start");
//"AEGIS_".$TidTp . $this->REQUEST["StoreId"] . $datestr . rand(100,999);
switch(substr($TID,6,4)){
case("ISP_"): // 신용카드 ISP
$this->REQUEST["AuthTy"] = "card" ;
$this->REQUEST["SubTy"] = "isp" ;
break;
case("VISA"): // 신용카드 안심클릭/일반
$this->REQUEST["AuthTy"] = "card" ;
$this->REQUEST["SubTy"] = "visa3d" ;
break;
case("IBK_"): // 인터넷뱅킹
$this->REQUEST["AuthTy"] = "iche" ;
break;
case("TBK_"): // 텔레뱅킹
$this->REQUEST["AuthTy"] = "iche" ;
break;
case("VIR_"): // 가상계좌
$this->REQUEST["AuthTy"] = "virtual" ;
break;
case("HPP_"): // 휴대폰 결제
$this->REQUEST["AuthTy"] = "hp" ;
break;
case("ARS_"): // ARS 전화결제
$this->REQUEST["AuthTy"] = "ars" ;
break;
default: // 미확인 결제방식
$this->REQUEST["AuthTy"] = "unknown" ;
break;
}
/****************************************************************************
* 전송 전문 Make
****************************************************************************/
$this->ENCTYPE = "I";
$this->sDataMsg = $this->ENCTYPE.
"PayInfo"."|".
$this->REQUEST["StoreId"]."|".
$TID."|";
$this->sSendMsg = sprintf( "%06d%s", strlen( $this->sDataMsg ), $this->sDataMsg );
if( !($this->SendRecvMsg()) ) //소켓을 통해 거래결과 확인
{
if( !($this->SendRecvMsgWeb()) ) //웹을 통해 거래결과 확인
{
}
}
if( !($this->ParseMsg()) )
{
$this->log->WriteLog( ERROR, "Parse Check PayResult Error");
return false;
}
$this->log->WriteLog( INFO, "[".$TID."] Check PayResult End");
$this->writeLogArray($this->RESULT);
//log 객체 닫기
$this->log->CloseLog( $this->GetResult("rResMsg") );
return true;
}
/*
결제데이터 Set
*/
function SetValue( $key, $val )
{
$this->REQUEST[$key] = $val;
}
/*
결제데이터 Get
*/
function GetResult( $name )
{
$result = $this->RESULT[$name];
if( strlen($result) == 0 || $result == "") $result = $this->REQUEST[$name];
return $result;
}
/*
결제결과 rSuccYn Set
*/
function SetPayResult( $key, $val )
{
$this->RESULT[$key] = $val;
}
/*
Make NetCancel ID();
*/
function MakeNetCancID()
{
$this->log->WriteLog( INFO, "Make NetCancel ID Start" );
switch($this->REQUEST["AuthTy"]){
case("card"): // 신용카드
if( strcmp( $this->REQUEST["SubTy"], "isp" ) == 0 ) $TidTp = "ISP_"; else $TidTp = "VISA";
break;
case("iche"): // 은행 계좌 이체 (IBK:인터넷뱅킹, TBK:텔레뱅킹)
if( strcmp( $this->REQUEST["ICHE_SOCKETYN"], "Y" ) == 0 ) $TidTp = "IBK_"; else $TidTp = "TBK_";
break;
case("virtual"): // 가상계좌
$TidTp = "VIR_"; break;
case("hp"): // 휴대폰 결제
$TidTp = "HPP_"; break;
case("ars"): // ARS 전화결제
$TidTp = "ARS_"; break;
default:
$TidTp = "UNKW"; //미확인 결제방식
}
list($usec, $sec) = explode(" ", microtime());
$datestr = date("YmdHis", $sec).substr($usec,2,3); //YYYYMMDDHHMMSSSSS
//TID는 최소 31자리 ,최대 51자리를 넘지 않는다.
$this->RESULT["NetCancID"] = "AEGIS_".$TidTp . $this->REQUEST["StoreId"] . "_" . $datestr . rand(100,999);
if( (!strlen( $this->RESULT["NetCancID"] ) >= 31 && strlen( $this->RESULT["NetCancID"] ) <= 51) )
{
$this->log->WriteLog( ERROR, $this->RESULT["NetCancID"]);
return false;
}
$this->log->WriteLog( INFO, $this->RESULT["NetCancID"]);
$this->log->WriteLog( INFO, "Make NetCancel ID End" );
return true;
}
/*
Set Error Msg ;
*/
function SetErrorMsg($rSuccYn,$rResMsg)
{
$this->log->WriteLog( INFO, "Set Result Msg Start");
$this->RESULT["rSuccYn"] = $rSuccYn;
$this->RESULT["rResMsg"] = $rResMsg;
$this->log->WriteLog( INFO, "Set Result Msg End");
}
/*
Aegis 카드데이터 Encrypt
*/
function encrypt_aegis( $OrgData )
{
$this->log->WriteLog( INFO, "Encrypt Start");
if( empty( $OrgData ) || $OrgData == "" )
{
$this->log->WriteLog( INFO, "Encrypt End");
return "";
}
$temp = "";
for( $i = 0; $i < strlen( $OrgData ); $i++ )
{
$temp .= substr( $OrgData, (strlen( $OrgData ) - 1) - $i, 1 );
}
//print "Reverse data : ".$temp."<br>";
$one_char = "";
$EncData = "";
for( $i = 0; $i < strlen( $temp ); $i++ )
{
$one_char = substr( $temp, $i, 1 );
$EncData .= ($one_char + $i * 77) % 10 ;
}
//print "Enc Data : ".$EncData."<br>";
$this->log->WriteLog( INFO, "Encrypt End");
return $EncData;
}
/*
문자열 포멧
*/
function format_string($TSTR,$TLEN,$TAG)
{
if ( !isset($TSTR) )
{
for ( $i=0 ; $i < $TLEN ; $i++ )
{
if( $TAG == 'Y' )
{
$TSTR = $TSTR.chr(32);
}
else
{
$TSTR = $TSTR.'+';
}
}
}
$TSTR = trim($TSTR);
$TSTR = stripslashes($TSTR);
// 입력자료가 길이보다 긴 경우 자르고 한글처리
if ( strlen($TSTR) > $TLEN )
{
// $flag == 1 이면 그 바이트는 한글의 시작 바이트 이라서 거기까지 자르게 되면
// 한글이 깨지게 되는 현상이 발생합니다.
$flag = 0;
for($i=0 ; $i< $TLEN ; $i++)
{
$j = ord($TSTR[$i]); // 문자의 ASCII 값을 구합니다.
// 구한 ASCII값이 127보다 크면 그 바이트가 한글의 시작바이트이거나 끝바이트(?)라는 뜻이죠.
if($j > 127)
{
if( $flag ) $flag = 0; // $flag 값이 존재한다는 것은 이번 문자는 한글의 끝바이트이기 때문에
// $flag 를 0으로 해줍니다.
else $flag = 1; // 값이 존재하지 않으면 한글의 시작바이트이죠. 그러므로 $flag 는 1!
}
else $flag = 0; // 다른 숫자나 영문일때는 그냥 넘어가면 되겠죠.
}
if( $flag )
{
// 이렇게 해서 마지막 문자까지의 $flag를 계산해서 $flag가 존재하면
$TSTR = substr($TSTR, 0, $TLEN - 1);
if( $TAG == 'Y' )
{
$TSTR = $TSTR.chr(32);
}
else
{
$TSTR = $TSTR.'+';
}
}
else
{
// 한바이트를 더해서 자르던지 빼서 자르던지 해야겠죠.
$TSTR = substr($TSTR, 0, $TLEN); // 아님 말구....
}
return $TSTR; // 이제 결정된 스트링을 반환합니다.
// 입력자료가 길이보다 작은 경우 SPACE로 채운다
}
else if ( strlen($TSTR) < $TLEN )
{
$TLENGTH = strlen($TSTR);
for ( $i=0 ; $i < $TLEN - $TLENGTH; $i++ )
{
if( $TAG == 'Y' )
{
$TSTR = $TSTR.chr(32);
}
else
{
$TSTR = $TSTR.'+';
}
}
return ($TSTR);
// 입력자료가 길이와 같은경우
}
else if ( strlen($TSTR) == $TLEN )
{
return ($TSTR);
}
}
/*
입력한 글자가 숫자아스키값에 해당하는지 판단.
*/
function IsNumber($word)
{
for($i = 0; $i < strlen($word); $i++)
{
$wordNum = ord( substr( $word, $i, 1 ) );
if( $wordNum < 48 || $wordNum > 57 )
{
return false;
}
}
return true;
}
/*
경고 메세지
*/
function AlertMsg( $msg , $go=0)
{
$msg = str_replace( "\"" ,"'" ,$msg );
$msg = str_replace( "\n" ,"\\n" ,$msg );
print "<script language='javascript'>";
print "alert( '".$msg."' );";
if( $go < 0 )
print "history.go( ".$go." );";
print "</script>";
}
function HistoryGo( $go )
{
print "<script language='javascript'>";
print "history.go( ".$go." );";
print "</script>";
}
function AlertExit( $msg )
{
AlertMsg( $msg );
exit;
}
function AlertGoBack( $msg )
{
AlertMsg( $msg, -1);
exit;
}
}
/**************************************************************************************
*
* 올더게이트 결제로그 기록 클래스
*
***************************************************************************************/
class PayLog
{
var $log_fd;
var $log;
var $logLevel;
var $array_key;
var $debug_msg;
var $starttime;
var $homedir;
var $StoreId;
function PayLog( $request )
{
$this->debug_msg = array( "", "FATAL", "ERROR", "WARN", "INFO", "DEBUG" );
$this->log = $request["log"];
$this->logLevel = $request["logLevel"];
$this->homedir = $request["AgsPayHome"];
$this->StoreId = $request["StoreId"];
$this->starttime=GetTime();
}
function InitLog()
{
if( $this->log == "false" ) return true;
$logfile = $this->homedir. "/log/".PROGRAM."_".TYPE."_".$this->StoreId."_".date("ymd").".log";
$this->log_fd = fopen( $logfile, "a+" );
if( !$this->log_fd ) return false;
$this->WriteLog( INFO, "===============================================================" );
$this->WriteLog( INFO, "START ".PROGRAM." ".TYPE." (OS:".php_uname('s').php_uname('r').",PHP:".phpversion().")" );
return true;
}
function WriteLog($debug, $data)
{
if( $this->log == "false" || !$this->log_fd ) return;
if(strtoupper($this->logLevel) == "FATAL") $logLevel_int = 1;
if(strtoupper($this->logLevel) == "ERROR") $logLevel_int = 2;
if(strtoupper($this->logLevel) == "WARN") $logLevel_int = 3;
if(strtoupper($this->logLevel) == "INFO") $logLevel_int = 4;
if(strtoupper($this->logLevel) == "DEBUG") $logLevel_int = 5;
if( $debug > $logLevel_int ){ return; }
$prefix = $this->debug_msg[$debug]."\t[" . SetTimeStamp() . "] <" . getmypid() . "> ";
if( is_array( $data ) )
{
foreach ($data as $key => $val)
{
fwrite( $this->log_fd, $prefix . $key . ":" . $val . "\r\n");
}
}
else
{
fwrite( $this->log_fd, $prefix . $data . "\r\n" );
}
fflush( $this->log_fd );
}
function CloseLog($msg)
{
if( $this->log == "false" ) return;
$Transaction_time=GetTime()-$this->starttime;
$this->WriteLog( INFO, "END ".$this->REQUEST["Type"]." ".$msg." Transaction time:[".round($Transaction_time,3)."sec]" );
$this->WriteLog( INFO, "===============================================================" );
fclose( $this->log_fd );
}
}
function GetTime()
{
list($sec1, $sec2) = explode(" ", microtime(true));
return (float)$sec1 + (float)$sec2;
}
function SetTimeStamp()
{
$microtm = explode(' ',microtime());
list($t_Seconds, $Milliseconds) = array($microtm[1], (int)round($microtm[0]*1000,3));
return date("Y-m-d H:i:s", $t_Seconds) . ":$Milliseconds";
}
?>