이니시스 웹표준 결제모듈 적용
This commit is contained in:
@ -74,6 +74,11 @@ if(!isset($default['de_inicis_mid'])) {
|
||||
ADD `de_inicis_admin_key` varchar(255) NOT NULL DEFAULT '' AFTER `de_inicis_mid` ", true);
|
||||
}
|
||||
|
||||
if(!isset($default['de_inicis_sign_key'])) {
|
||||
sql_query(" ALTER TABLE `{$g5['g5_shop_default_table']}`
|
||||
ADD `de_inicis_sign_key` varchar(255) NOT NULL DEFAULT '' AFTER `de_inicis_mid` ", true);
|
||||
}
|
||||
|
||||
|
||||
// 모바일 초기화면 이미지 줄 수 필드 추가
|
||||
if(!isset($default['de_mobile_type1_list_row'])) {
|
||||
@ -693,6 +698,13 @@ if(!isset($default['de_kakaopay_mid'])) {
|
||||
<input type="text" name="de_inicis_admin_key" value="<?php echo $default['de_inicis_admin_key']; ?>" id="de_inicis_admin_key" class="frm_input" size="5" maxlength="4">
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="pg_info_fld inicis_info_fld">
|
||||
<th scope="row"><label for="de_inicis_sign_key">KG이니시스 웹결제 사인키</label></th>
|
||||
<td>
|
||||
<?php echo help("KG이니시스에서 발급받은 웹결제 사인키를 입력합니다.\n관리자 페이지의 상점정보 > 계약정보 > 부가정보의 웹결제 signkey생성 조회 버튼 클릭, 팝업창에서 생성 버튼 클릭 후 해당 값을 입력합니다."); ?>
|
||||
<input type="text" name="de_inicis_sign_key" value="<?php echo $default['de_inicis_sign_key']; ?>" id="de_inicis_sign_key" class="frm_input" size="40" maxlength="50">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">
|
||||
<label for="de_kakaopay_mid">카카오페이 상점MID</label>
|
||||
|
||||
@ -158,6 +158,7 @@ $sql = " update {$g5['g5_shop_default_table']}
|
||||
de_kcp_site_key = '{$_POST['de_kcp_site_key']}',
|
||||
de_inicis_mid = '{$_POST['de_inicis_mid']}',
|
||||
de_inicis_admin_key = '{$_POST['de_inicis_admin_key']}',
|
||||
de_inicis_sign_key = '{$_POST['de_inicis_sign_key']}',
|
||||
de_iche_use = '{$_POST['de_iche_use']}',
|
||||
de_sms_cont1 = '{$_POST['de_sms_cont1']}',
|
||||
de_sms_cont2 = '{$_POST['de_sms_cont2']}',
|
||||
|
||||
28
shop/inicis/INIStdPayResult.php
Normal file
28
shop/inicis/INIStdPayResult.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
$g5['title'] = 'KG 이니시스 결제';
|
||||
$g5['body_script'] = ' onload="setPAYResult();"';
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
|
||||
$exclude = array();
|
||||
|
||||
echo '<form name="forderform" method="post" action="'.$order_action_url.'" autocomplete="off">'.PHP_EOL;
|
||||
|
||||
echo make_order_field($data, $exclude);
|
||||
|
||||
echo '</form>'.PHP_EOL;
|
||||
?>
|
||||
|
||||
<div id="pay_working">
|
||||
<span style="display:block; text-align:center;margin-top:120px"><img src="<?php echo G5_SHOP_URL; ?>/img/loading.gif" alt=""></span>
|
||||
<span style="display:block; text-align:center;margin-top:10px; font-size:14px">주문완료 중입니다. 잠시만 기다려 주십시오.</span>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
function setPAYResult() {
|
||||
setTimeout( function() {
|
||||
document.forderform.submit();
|
||||
}, 300);
|
||||
}
|
||||
</script>
|
||||
171
shop/inicis/INIStdPayReturn.php
Normal file
171
shop/inicis/INIStdPayReturn.php
Normal file
@ -0,0 +1,171 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_SHOP_PATH.'/settle_inicis.inc.php');
|
||||
require_once(G5_SHOP_PATH.'/inicis/libs/HttpClient.php');
|
||||
require_once(G5_SHOP_PATH.'/inicis/libs/json_lib.php');
|
||||
|
||||
try {
|
||||
|
||||
//#############################
|
||||
// 인증결과 파라미터 일괄 수신
|
||||
//#############################
|
||||
// $var = $_REQUEST["data"];
|
||||
|
||||
//#####################
|
||||
// 인증이 성공일 경우만
|
||||
//#####################
|
||||
if (strcmp('0000', $_REQUEST['resultCode']) == 0) {
|
||||
|
||||
//############################################
|
||||
// 1.전문 필드 값 설정(***가맹점 개발수정***)
|
||||
//############################################
|
||||
|
||||
$charset = 'UTF-8'; // 리턴형식[UTF-8,EUC-KR](가맹점 수정후 고정)
|
||||
|
||||
$format = 'JSON'; // 리턴형식[XML,JSON,NVP](가맹점 수정후 고정)
|
||||
// 추가적 noti가 필요한 경우(필수아님, 공백일 경우 미발송, 승인은 성공시, 실패시 모두 Noti발송됨) 미사용
|
||||
//String notiUrl = "";
|
||||
|
||||
$authToken = $_REQUEST['authToken']; // 취소 요청 tid에 따라서 유동적(가맹점 수정후 고정)
|
||||
|
||||
$authUrl = $_REQUEST['authUrl']; // 승인요청 API url(수신 받은 값으로 설정, 임의 세팅 금지)
|
||||
|
||||
$netCancel = $_REQUEST['netCancel']; // 망취소 API url(수신 받은f값으로 설정, 임의 세팅 금지)
|
||||
|
||||
///$mKey = $util->makeHash(signKey, "sha256"); // 가맹점 확인을 위한 signKey를 해시값으로 변경 (SHA-256방식 사용)
|
||||
$mKey = hash("sha256", $signKey);
|
||||
|
||||
//#####################
|
||||
// 2.signature 생성
|
||||
//#####################
|
||||
$signParam['authToken'] = $authToken; // 필수
|
||||
$signParam['timestamp'] = $timestamp; // 필수
|
||||
// signature 데이터 생성 (모듈에서 자동으로 signParam을 알파벳 순으로 정렬후 NVP 방식으로 나열해 hash)
|
||||
$signature = $util->makeSignature($signParam);
|
||||
|
||||
|
||||
//#####################
|
||||
// 3.API 요청 전문 생성
|
||||
//#####################
|
||||
$authMap['mid'] = $mid; // 필수
|
||||
$authMap['authToken'] = $authToken; // 필수
|
||||
$authMap['signature'] = $signature; // 필수
|
||||
$authMap['timestamp'] = $timestamp; // 필수
|
||||
$authMap['charset'] = $charset; // default=UTF-8
|
||||
$authMap['format'] = $format; // default=XML
|
||||
//if(null != notiUrl && notiUrl.length() > 0){
|
||||
// authMap.put("notiUrl" ,notiUrl);
|
||||
//}
|
||||
|
||||
|
||||
try {
|
||||
|
||||
$httpUtil = new HttpClient();
|
||||
|
||||
//#####################
|
||||
// 4.API 통신 시작
|
||||
//#####################
|
||||
|
||||
$authResultString = "";
|
||||
if ($httpUtil->processHTTP($authUrl, $authMap)) {
|
||||
$authResultString = $httpUtil->body;
|
||||
} else {
|
||||
echo "Http Connect Error\n";
|
||||
echo $httpUtil->errormsg;
|
||||
|
||||
throw new Exception("Http Connect Error");
|
||||
}
|
||||
|
||||
//############################################################
|
||||
//5.API 통신결과 처리(***가맹점 개발수정***)
|
||||
//############################################################
|
||||
|
||||
$resultMap = json_decode($authResultString, true);
|
||||
|
||||
$tid = $resultMap['tid'];
|
||||
$oid = $resultMap['MOID'];
|
||||
|
||||
$sql = " select * from {$g5['g5_shop_order_data_table']} where od_id = '$oid' ";
|
||||
$row = sql_fetch($sql);
|
||||
|
||||
$data = unserialize(base64_decode($row['dt_data']));
|
||||
|
||||
if(isset($data['pp_id']) && $data['pp_id']) {
|
||||
$order_action_url = G5_HTTPS_SHOP_URL.'/personalpayformupdate.php';
|
||||
$page_return_url = G5_SHOP_URL.'/personalpayform.php?pp_id='.$data['pp_id'];
|
||||
} else {
|
||||
$order_action_url = G5_HTTPS_SHOP_URL.'/orderformupdate.php';
|
||||
$page_return_url = G5_SHOP_URL.'/orderform.php';
|
||||
if($_SESSION['ss_direct'])
|
||||
$page_return_url .= '?sw_direct=1';
|
||||
}
|
||||
|
||||
if (strcmp('0000', $resultMap['resultCode']) == 0) {
|
||||
/* * ***************************************************************************
|
||||
* 여기에 가맹점 내부 DB에 결제 결과를 반영하는 관련 프로그램 코드를 구현한다.
|
||||
|
||||
[중요!] 승인내용에 이상이 없음을 확인한 뒤 가맹점 DB에 해당건이 정상처리 되었음을 반영함
|
||||
처리중 에러 발생시 망취소를 한다.
|
||||
* **************************************************************************** */
|
||||
|
||||
// 결제결과 session에 저장
|
||||
set_session('resultMap', $resultMap);
|
||||
|
||||
require G5_SHOP_PATH.'/inicis/INIStdPayResult.php';
|
||||
exit;
|
||||
} else {
|
||||
$s = '(오류코드:'.$resultMap['resultCode'].') '.$resultMap['resultMsg'];
|
||||
alert($s, $page_return_url);
|
||||
}
|
||||
|
||||
// 수신결과를 파싱후 resultCode가 "0000"이면 승인성공 이외 실패
|
||||
// 가맹점에서 스스로 파싱후 내부 DB 처리 후 화면에 결과 표시
|
||||
// payViewType을 popup으로 해서 결제를 하셨을 경우
|
||||
// 내부처리후 스크립트를 이용해 opener의 화면 전환처리를 하세요
|
||||
//throw new Exception("강제 Exception");
|
||||
} catch (Exception $e) {
|
||||
// $s = $e->getMessage() . ' (오류코드:' . $e->getCode() . ')';
|
||||
//####################################
|
||||
// 실패시 처리(***가맹점 개발수정***)
|
||||
//####################################
|
||||
//---- db 저장 실패시 등 예외처리----//
|
||||
$s = $e->getMessage() . ' (오류코드:' . $e->getCode() . ')';
|
||||
echo $s;
|
||||
|
||||
//#####################
|
||||
// 망취소 API
|
||||
//#####################
|
||||
|
||||
$netcancelResultString = ""; // 망취소 요청 API url(고정, 임의 세팅 금지)
|
||||
if ($httpUtil->processHTTP($netCancel, $authMap)) {
|
||||
$netcancelResultString = $httpUtil->body;
|
||||
} else {
|
||||
echo "Http Connect Error\n";
|
||||
echo $httpUtil->errormsg;
|
||||
|
||||
throw new Exception("Http Connect Error");
|
||||
}
|
||||
|
||||
echo "## 망취소 API 결과 ##";
|
||||
|
||||
$netcancelResultString = str_replace("<", "<", $$netcancelResultString);
|
||||
$netcancelResultString = str_replace(">", ">", $$netcancelResultString);
|
||||
|
||||
echo "<pre>", $netcancelResultString . "</pre>";
|
||||
// 취소 결과 확인
|
||||
}
|
||||
} else {
|
||||
|
||||
//#############
|
||||
// 인증 실패시
|
||||
//#############
|
||||
echo "<br/>";
|
||||
echo "####인증실패####";
|
||||
|
||||
echo "<pre>" . var_dump($_REQUEST) . "</pre>";
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$s = $e->getMessage() . ' (오류코드:' . $e->getCode() . ')';
|
||||
echo $s;
|
||||
}
|
||||
?>
|
||||
1
shop/inicis/close.php
Normal file
1
shop/inicis/close.php
Normal file
@ -0,0 +1 @@
|
||||
<script language="javascript" type="text/javascript" src="https://stgstdpay.inicis.com/stdjs/INIStdPay_close.js" charset="UTF-8"></script>
|
||||
@ -1,65 +0,0 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_LIB_PATH.'/json.lib.php');
|
||||
include_once(G5_SHOP_PATH.'/settle_inicis.inc.php');
|
||||
|
||||
$price = trim($_POST['price']);
|
||||
|
||||
/**************************
|
||||
* 3. 암호화 대상/값 설정 *
|
||||
**************************/
|
||||
$inipay->SetField("type", "chkfake"); // 고정 (절대 수정 불가)
|
||||
$inipay->SetField("enctype","asym"); //asym:비대칭, symm:대칭(현재 asym으로 고정)
|
||||
/**************************************************************************************************
|
||||
* admin 은 키패스워드 변수명입니다. 수정하시면 안됩니다. 1111의 부분만 수정해서 사용하시기 바랍니다.
|
||||
* 키패스워드는 상점관리자 페이지(https://iniweb.inicis.com)의 비밀번호가 아닙니다. 주의해 주시기 바랍니다.
|
||||
* 키패스워드는 숫자 4자리로만 구성됩니다. 이 값은 키파일 발급시 결정됩니다.
|
||||
* 키패스워드 값을 확인하시려면 상점측에 발급된 키파일 안의 readme.txt 파일을 참조해 주십시오.
|
||||
**************************************************************************************************/
|
||||
$inipay->SetField("admin", $default['de_inicis_admin_key']); // 키패스워드(키발급시 생성, 상점관리자 패스워드와 상관없음)
|
||||
$inipay->SetField("checkopt", "false"); //base64함:false, base64안함:true(현재 false로 고정)
|
||||
|
||||
//필수항목 : mid, price, nointerest, quotabase
|
||||
//추가가능 : INIregno, oid
|
||||
//*주의* : 추가가능한 항목중 암호화 대상항목에 추가한 필드는 반드시 hidden 필드에선 제거하고
|
||||
// SESSION이나 DB를 이용해 다음페이지(INIsecureresult.php)로 전달/셋팅되어야 합니다.
|
||||
$inipay->SetField("mid", $default['de_inicis_mid']); // 상점아이디
|
||||
$inipay->SetField("price", $price); // 가격
|
||||
$inipay->SetField("nointerest", $inipay_nointerest); // 무이자여부(no:일반, yes:무이자)
|
||||
$inipay->SetField("quotabase", iconv_euckr($inipay_quotabase));//할부기간
|
||||
|
||||
/********************************
|
||||
* 4. 암호화 대상/값을 암호화함 *
|
||||
********************************/
|
||||
$inipay->startAction();
|
||||
|
||||
/*********************
|
||||
* 5. 암호화 결과 *
|
||||
*********************/
|
||||
if( $inipay->GetResult("ResultCode") != "00" )
|
||||
{
|
||||
die('{"error":"'.$inipay->GetResult("ResultMsg").'"}');
|
||||
}
|
||||
|
||||
/*********************
|
||||
* 6. 세션정보 저장 *
|
||||
*********************/
|
||||
set_session('INI_MID', $default['de_inicis_mid']); //상점ID
|
||||
set_session('INI_ADMIN', $default['de_inicis_admin_key']); // 키패스워드(키발급시 생성, 상점관리자 패스워드와 상관없음)
|
||||
set_session('INI_PRICE', $price); //가격
|
||||
set_session('INI_RN', $inipay->GetResult("rn")); //고정 (절대 수정 불가)
|
||||
set_session('INI_ENCTYPE', $inipay->GetResult("enctype")); //고정 (절대 수정 불가)
|
||||
|
||||
$ini_encfield = $inipay->GetResult("encfield");
|
||||
$ini_certid = $inipay->GetResult("certid");
|
||||
|
||||
$result = array(
|
||||
'error' => '',
|
||||
'ini_encfield' => $ini_encfield,
|
||||
'ini_certid' => $ini_certid
|
||||
);
|
||||
|
||||
die(json_encode($result));
|
||||
|
||||
//die('{"error":"", "ini_encfield":"'.$ini_encfield.'", "ini_certid":"'.$ini_certid.'"}');
|
||||
?>
|
||||
@ -1,216 +1,39 @@
|
||||
<?php
|
||||
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_SHOP_PATH.'/settle_inicis.inc.php');
|
||||
|
||||
/* INIsecureresult.php
|
||||
*
|
||||
* 이니페이 플러그인을 통해 요청된 지불을 처리한다.
|
||||
* 지불 요청을 처리한다.
|
||||
* 코드에 대한 자세한 설명은 매뉴얼을 참조하십시오.
|
||||
* <주의> 구매자의 세션을 반드시 체크하도록하여 부정거래를 방지하여 주십시요.
|
||||
*
|
||||
* http://www.inicis.com
|
||||
* Copyright (C) 2006 Inicis Co., Ltd. All rights reserved.
|
||||
*/
|
||||
$resultMap = get_session('resultMap');
|
||||
|
||||
include_once(G5_SHOP_PATH.'/settle_inicis.inc.php');
|
||||
|
||||
/*********************
|
||||
* 3. 지불 정보 설정 *
|
||||
*********************/
|
||||
if($default['de_tax_flag_use']) { // 복합과세 사용 때
|
||||
$inipay->SetXPath("INIpay/GoodsInfo/Tax", $_POST['comm_vat_mny']); // 부가세 금액
|
||||
$inipay->SetXPath("INIpay/GoodsInfo/TaxFree", $_POST['comm_free_mny']); // 면세 금액
|
||||
}
|
||||
$inipay->SetField("type", "securepay"); // 고정 (절대 수정 불가)
|
||||
$inipay->SetField("pgid", "INIphp".$pgid); // 고정 (절대 수정 불가)
|
||||
$inipay->SetField("subpgip", "203.238.3.10"); // 고정 (절대 수정 불가)
|
||||
$inipay->SetField("admin", get_session('INI_ADMIN')); // 키패스워드(상점아이디에 따라 변경)
|
||||
$inipay->SetField("uid", $uid); // INIpay User ID (절대 수정 불가)
|
||||
$inipay->SetField("goodname", iconv_euckr($goodname)); // 상품명
|
||||
$inipay->SetField("currency", $currency); // 화폐단위
|
||||
|
||||
$inipay->SetField("mid", get_session('INI_MID')); // 상점아이디
|
||||
$inipay->SetField("rn", get_session('INI_RN')); // 웹페이지 위변조용 RN값
|
||||
$inipay->SetField("price", get_session('INI_PRICE')); // 가격
|
||||
$inipay->SetField("enctype", get_session('INI_ENCTYPE')); // 고정 (절대 수정 불가)
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------
|
||||
price 등의 중요데이터는
|
||||
브라우저상의 위변조여부를 반드시 확인하셔야 합니다.
|
||||
|
||||
결제 요청페이지에서 요청된 금액과
|
||||
실제 결제가 이루어질 금액을 반드시 비교하여 처리하십시오.
|
||||
|
||||
설치 메뉴얼 2장의 결제 처리페이지 작성부분의 보안경고 부분을 확인하시기 바랍니다.
|
||||
적용참조문서: 이니시스홈페이지->가맹점기술지원자료실->기타자료실 의
|
||||
'결제 처리 페이지 상에 결제 금액 변조 유무에 대한 체크' 문서를 참조하시기 바랍니다.
|
||||
예제)
|
||||
원 상품 가격 변수를 OriginalPrice 하고 원 가격 정보를 리턴하는 함수를 Return_OrgPrice()라 가정하면
|
||||
다음 같이 적용하여 원가격과 웹브라우저에서 Post되어 넘어온 가격을 비교 한다.
|
||||
|
||||
$OriginalPrice = Return_OrgPrice();
|
||||
$PostPrice = $_SESSION['INI_PRICE'];
|
||||
if ( $OriginalPrice != $PostPrice )
|
||||
{
|
||||
//결제 진행을 중단하고 금액 변경 가능성에 대한 메시지 출력 처리
|
||||
//처리 종료
|
||||
}
|
||||
|
||||
----------------------------------------------------------------------------------------*/
|
||||
$inipay->SetField("buyername", iconv_euckr($buyername)); // 구매자 명
|
||||
$inipay->SetField("buyertel", $buyertel); // 구매자 연락처(휴대폰 번호 또는 유선전화번호)
|
||||
$inipay->SetField("buyeremail", $buyeremail); // 구매자 이메일 주소
|
||||
$inipay->SetField("paymethod", $paymethod); // 지불방법 (절대 수정 불가)
|
||||
$inipay->SetField("encrypted", $encrypted); // 암호문
|
||||
$inipay->SetField("sessionkey", $sessionkey); // 암호문
|
||||
$inipay->SetField("url", G5_URL); // 실제 서비스되는 상점 SITE URL로 변경할것
|
||||
$inipay->SetField("cardcode", $cardcode); // 카드코드 리턴
|
||||
$inipay->SetField("parentemail", $parentemail); // 보호자 이메일 주소(핸드폰 , 전화결제시에 14세 미만의 고객이 결제하면 부모 이메일로 결제 내용통보 의무, 다른결제 수단 사용시에 삭제 가능)
|
||||
|
||||
/*-----------------------------------------------------------------*
|
||||
* 수취인 정보 * *
|
||||
*-----------------------------------------------------------------*
|
||||
* 실물배송을 하는 상점의 경우에 사용되는 필드들이며 *
|
||||
* 아래의 값들은 INIsecurepay.html 페이지에서 포스트 되도록 *
|
||||
* 필드를 만들어 주도록 하십시요. *
|
||||
* 컨텐츠 제공업체의 경우 삭제하셔도 무방합니다. *
|
||||
*-----------------------------------------------------------------*/
|
||||
$inipay->SetField("recvname", iconv_euckr($recvname)); // 수취인 명
|
||||
$inipay->SetField("recvtel", $recvtel); // 수취인 연락처
|
||||
$inipay->SetField("recvaddr", iconv_euckr($recvaddr)); // 수취인 주소
|
||||
$inipay->SetField("recvpostnum", $recvpostnum); // 수취인 우편번호
|
||||
$inipay->SetField("recvmsg", $recvmsg); // 전달 메세지
|
||||
|
||||
$inipay->SetField("joincard", $joincard); // 제휴카드코드
|
||||
$inipay->SetField("joinexpire", $joinexpire); // 제휴카드유효기간
|
||||
$inipay->SetField("id_customer", $id_customer); //user_id
|
||||
|
||||
|
||||
/****************
|
||||
* 4. 지불 요청 *
|
||||
****************/
|
||||
$inipay->startAction();
|
||||
|
||||
/****************************************************************************************************************
|
||||
* 5. 결제 결과
|
||||
*
|
||||
* 1 모든 결제 수단에 공통되는 결제 결과 데이터
|
||||
* 거래번호 : $inipay->GetResult('TID')
|
||||
* 결과코드 : $inipay->GetResult('ResultCode') ("00"이면 지불 성공)
|
||||
* 결과내용 : $inipay->GetResult('ResultMsg') (지불결과에 대한 설명)
|
||||
* 지불방법 : $inipay->GetResult('PayMethod') (매뉴얼 참조)
|
||||
* 상점주문번호 : $inipay->GetResult('MOID')
|
||||
* 결제완료금액 : $inipay->GetResult('TotPrice')
|
||||
*
|
||||
* 결제 되는 금액 =>원상품가격과 결제결과금액과 비교하여 금액이 동일하지 않다면
|
||||
* 결제 금액의 위변조가 의심됨으로 정상적인 처리가 되지않도록 처리 바랍니다. (해당 거래 취소 처리)
|
||||
*
|
||||
*
|
||||
* 2. 신용카드,ISP,핸드폰, 전화 결제, 은행계좌이체, OK CASH BAG Point 결제 결과 데이터
|
||||
* (무통장입금 , 문화 상품권 포함)
|
||||
* 이니시스 승인날짜 : $inipay->GetResult('ApplDate') (YYYYMMDD)
|
||||
* 이니시스 승인시각 : $inipay->GetResult('ApplTime') (HHMMSS)
|
||||
*
|
||||
* 3. 신용카드 결제 결과 데이터
|
||||
*
|
||||
* 신용카드 승인번호 : $inipay->GetResult('ApplNum')
|
||||
* 할부기간 : $inipay->GetResult('CARD_Quota')
|
||||
* 무이자할부 여부 : $inipay->GetResult('CARD_Interest') ("1"이면 무이자할부)
|
||||
* 신용카드사 코드 : $inipay->GetResult('CARD_Code') (매뉴얼 참조)
|
||||
* 카드발급사 코드 : $inipay->GetResult('CARD_BankCode') (매뉴얼 참조)
|
||||
* 본인인증 수행여부 : $inipay->GetResult('CARD_AuthType') ("00"이면 수행)
|
||||
* 각종 이벤트 적용 여부 : $inipay->GetResult('EventCode')
|
||||
*
|
||||
* ** 달러결제 시 통화코드와 환률 정보 **
|
||||
* 해당 통화코드 : $inipay->GetResult('OrgCurrency')
|
||||
* 환율 : $inipay->GetResult('ExchangeRate')
|
||||
*
|
||||
* 아래는 "신용카드 및 OK CASH BAG 복합결제" 또는"신용카드 지불시에 OK CASH BAG적립"시에 추가되는 데이터
|
||||
* OK Cashbag 적립 승인번호 : $inipay->GetResult('OCB_SaveApplNum')
|
||||
* OK Cashbag 사용 승인번호 : $inipay->GetResult('OCB_PayApplNum')
|
||||
* OK Cashbag 승인일시 : $inipay->GetResult('OCB_ApplDate') (YYYYMMDDHHMMSS)
|
||||
* OCB 카드번호 : $inipay->GetResult('OCB_Num')
|
||||
* OK Cashbag 복합결재시 신용카드 지불금액 : $inipay->GetResult('CARD_ApplPrice')
|
||||
* OK Cashbag 복합결재시 포인트 지불금액 : $inipay->GetResult('OCB_PayPrice')
|
||||
*
|
||||
* 4. 실시간 계좌이체 결제 결과 데이터
|
||||
*
|
||||
* 은행코드 : $inipay->GetResult('ACCT_BankCode')
|
||||
* 현금영수증 발행결과코드 : $inipay->GetResult('CSHR_ResultCode')
|
||||
* 현금영수증 발행구분코드 : $inipay->GetResult('CSHR_Type')
|
||||
* *
|
||||
* 5. OK CASH BAG 결제수단을 이용시에만 결제 결과 데이터
|
||||
* OK Cashbag 적립 승인번호 : $inipay->GetResult('OCB_SaveApplNum')
|
||||
* OK Cashbag 사용 승인번호 : $inipay->GetResult('OCB_PayApplNum')
|
||||
* OK Cashbag 승인일시 : $inipay->GetResult('OCB_ApplDate') (YYYYMMDDHHMMSS)
|
||||
* OCB 카드번호 : $inipay->GetResult('OCB_Num')
|
||||
*
|
||||
* 6. 무통장 입금 결제 결과 데이터 *
|
||||
* 가상계좌 채번에 사용된 주민번호 : $inipay->GetResult('VACT_RegNum') *
|
||||
* 가상계좌 번호 : $inipay->GetResult('VACT_Num') *
|
||||
* 입금할 은행 코드 : $inipay->GetResult('VACT_BankCode') *
|
||||
* 입금예정일 : $inipay->GetResult('VACT_Date') (YYYYMMDD) *
|
||||
* 송금자 명 : $inipay->GetResult('VACT_InputName') *
|
||||
* 예금주 명 : $inipay->GetResult('VACT_Name') *
|
||||
* *
|
||||
* 7. 핸드폰, 전화 결제 결과 데이터( "실패 내역 자세히 보기"에서 필요 , 상점에서는 필요없는 정보임) *
|
||||
* 전화결제 사업자 코드 : $inipay->GetResult('HPP_GWCode') *
|
||||
* *
|
||||
* 8. 핸드폰 결제 결과 데이터 *
|
||||
* 휴대폰 번호 : $inipay->GetResult('HPP_Num') (핸드폰 결제에 사용된 휴대폰번호) *
|
||||
* *
|
||||
* 9. 전화 결제 결과 데이터 *
|
||||
* 전화번호 : $inipay->GetResult('ARSB_Num') (전화결제에 사용된 전화번호) *
|
||||
* *
|
||||
* 10. 문화 상품권 결제 결과 데이터 *
|
||||
* 컬쳐 랜드 ID : $inipay->GetResult('CULT_UserID') *
|
||||
* *
|
||||
* 11. K-merce 상품권 결제 결과 데이터 (K-merce ID, 틴캐시 아이디 공통사용) *
|
||||
* K-merce ID : $inipay->GetResult('CULT_UserID') *
|
||||
* *
|
||||
* 12. 모든 결제 수단에 대해 결제 실패시에만 결제 결과 데이터 *
|
||||
* 에러코드 : $inipay->GetResult('ResultErrorCode') *
|
||||
* *
|
||||
* 13.현금영수증 발급 결과코드 (은행계좌이체시에만 리턴) *
|
||||
* $inipay->GetResult('CSHR_ResultCode') *
|
||||
* *
|
||||
* 14.틴캐시 잔액 데이터 *
|
||||
* $inipay->GetResult('TEEN_Remains') *
|
||||
* 틴캐시 ID : $inipay->GetResult('CULT_UserID') *
|
||||
* 15.게임문화 상품권 *
|
||||
* 사용 카드 갯수 : $inipay->GetResult('GAMG_Cnt') *
|
||||
* *
|
||||
****************************************************************************************************************/
|
||||
|
||||
if( $inipay->GetResult("ResultCode") == "00" ) {
|
||||
if( strcmp('0000', $resultMap['resultCode']) == 0 ) {
|
||||
//최종결제요청 결과 성공 DB처리
|
||||
$tno = $inipay->GetResult('TID');
|
||||
$amount = $inipay->GetResult('TotPrice');
|
||||
$app_time = $inipay->GetResult('ApplDate').$inipay->GetResult('ApplTime');
|
||||
$pay_method = $inipay->GetResult('PayMethod');
|
||||
$pay_type = $PAY_METHOD[$pay_method];
|
||||
$depositor = iconv_utf8($inipay->GetResult('VACT_InputName'));
|
||||
$commid = '';
|
||||
$mobile_no = $inipay->GetResult('HPP_Num');
|
||||
$app_no = $inipay->GetResult('ApplNum');
|
||||
$card_name = $CARD_CODE[$inipay->GetResult('CARD_Code')];
|
||||
if ($default['de_escrow_use'] == 1)
|
||||
$escw_yn = 'Y';
|
||||
$tno = $resultMap['tid'];
|
||||
$amount = $resultMap['TotPrice'];
|
||||
$app_time = $resultMap['applDate'].$resultMap['applTime'];
|
||||
$pay_method = $resultMap['payMethod'];
|
||||
$pay_type = $PAY_METHOD[$pay_method];
|
||||
$depositor = $resultMap['VACT_InputName'];
|
||||
$commid = '';
|
||||
$mobile_no = $resultMap['HPP_Num'];
|
||||
$app_no = $resultMap['applNum'];
|
||||
$card_name = $CARD_CODE[$resultMap['CARD_Code']];
|
||||
switch($pay_type) {
|
||||
case '계좌이체':
|
||||
$bank_name = $BANK_CODE[$inipay->GetResult('ACCT_BankCode')];
|
||||
$bank_name = $BANK_CODE[$resultMap['ACCT_BankCode']];
|
||||
if ($default['de_escrow_use'] == 1)
|
||||
$escw_yn = 'Y';
|
||||
break;
|
||||
case '가상계좌':
|
||||
$bankname = $BANK_CODE[$inipay->GetResult('VACT_BankCode')];
|
||||
$account = $inipay->GetResult('VACT_Num').' '.iconv_utf8($inipay->GetResult('VACT_Name'));
|
||||
$app_no = $inipay->GetResult('VACT_Num');
|
||||
$bankname = $BANK_CODE[$resultMap['VACT_BankCode']];
|
||||
$account = $resultMap['VACT_Num'].' '.$resultMap['VACT_Name'];
|
||||
$app_no = $resultMap['VACT_Num'];
|
||||
if ($default['de_escrow_use'] == 1)
|
||||
$escw_yn = 'Y';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
alert(iconv_utf8($inipay->GetResult("ResultMsg")).' 코드 : '.$inipay->GetResult("ResultCode"));
|
||||
die($resultMap['resultMsg'].' 코드 : '.$resultMap['resultCode']);
|
||||
}
|
||||
|
||||
?>
|
||||
120
shop/inicis/libs/CreateIdModule.php
Normal file
120
shop/inicis/libs/CreateIdModule.php
Normal file
@ -0,0 +1,120 @@
|
||||
<?php
|
||||
|
||||
class CreateIdModule {
|
||||
|
||||
function makeTid($payMetod, $mid, $mobileType) {
|
||||
date_default_timezone_set('Asia/Seoul');
|
||||
$date = new DateTime();
|
||||
|
||||
$prefix = "";
|
||||
|
||||
if ($mobileType) {
|
||||
$prefix = "StdMX_";
|
||||
} else {
|
||||
$prefix = "Stdpay";
|
||||
}
|
||||
|
||||
|
||||
/////////////
|
||||
list($usec, $sec) = explode(" ", microtime());
|
||||
$time = date("YmdHis", $sec) . intval(round($usec * 1000));
|
||||
if (strlen($time) == 17) {
|
||||
|
||||
} elseif (strlen($time) == 16) {
|
||||
$time = $time . "0";
|
||||
} else {
|
||||
$time = $time . "00";
|
||||
}
|
||||
/////////////
|
||||
|
||||
$tid = $prefix . $this->getPGID($payMetod) . $mid . $time . $this->makeRandNum();
|
||||
|
||||
|
||||
return $tid;
|
||||
}
|
||||
|
||||
function getPGID($payMethod) {
|
||||
$pgid = "";
|
||||
|
||||
if ($payMethod == "Card") {
|
||||
$pgid = "CARD";
|
||||
} elseif ($payMethod == "Account") {
|
||||
$pgid = "ACCT";
|
||||
} elseif ($payMethod == "DirectBank") {
|
||||
$pgid = "DBNK";
|
||||
} elseif ($payMethod == "OCBPoint") {
|
||||
$pgid = "OCBP";
|
||||
} elseif ($payMethod == "VCard") {
|
||||
$pgid = "ISP_";
|
||||
} elseif ($payMethod == "HPP") {
|
||||
$pgid = "HPP_";
|
||||
} elseif ($payMethod == "Nemo") {
|
||||
$pgid = "NEMO";
|
||||
} elseif ($payMethod == "ArsBill") {
|
||||
$pgid = "ARSB";
|
||||
} elseif ($payMethod == "PhoneBill") {
|
||||
$pgid = "PHNB";
|
||||
} elseif ($payMethod == "Ars1588Bill") {
|
||||
$pgid = "1588";
|
||||
} elseif ($payMethod == "VBank") {
|
||||
$pgid = "VBNK";
|
||||
} elseif ($payMethod == "Culture") {
|
||||
$pgid = "CULT";
|
||||
} elseif ($payMethod == "CMS") {
|
||||
$pgid = "CMS_";
|
||||
} elseif ($payMethod == "AUTH") {
|
||||
$pgid = "AUTH";
|
||||
} elseif ($payMethod == "INIcard") {
|
||||
$pgid = "INIC";
|
||||
} elseif ($payMethod == "MDX") {
|
||||
$pgid = "MDX_";
|
||||
} elseif ($payMethod == "CASH") {
|
||||
$pgid = "CASH";
|
||||
} elseif (strlen($payMethod) > 4) {
|
||||
$pgid = strtoupper($payMethod);
|
||||
$pgid = substr($pgid, 0, 4);
|
||||
} else {
|
||||
$pgid = trim($pgid);
|
||||
}
|
||||
|
||||
return $pgid;
|
||||
}
|
||||
|
||||
//랜덤 숫자 생성
|
||||
function makeRandNum() {
|
||||
$strNum = "";
|
||||
$randNum = rand(0, 300);
|
||||
|
||||
if ($randNum < 10) {
|
||||
$strNum = $strNum . "00" . $randNum;
|
||||
} elseif ($randNum < 100) {
|
||||
$strNum = $strNum . "0" . $randNum;
|
||||
} else {
|
||||
$strNum = $randNum;
|
||||
}
|
||||
|
||||
return $strNum;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
149
shop/inicis/libs/HttpClient.php
Normal file
149
shop/inicis/libs/HttpClient.php
Normal file
@ -0,0 +1,149 @@
|
||||
<?php
|
||||
|
||||
define("CONNECT_TIMEOUT", 5);
|
||||
define("READ_TIMEOUT", 15);
|
||||
//$explode_data = explode('/', $P_REQ_URL);
|
||||
//$host = $explode_data[2];
|
||||
//$path = "/" . $explode_data[3] . "/" . $explode_data[4];
|
||||
|
||||
class HttpClient {
|
||||
|
||||
var $sock = 0;
|
||||
var $ssl;
|
||||
var $host;
|
||||
var $port;
|
||||
var $path;
|
||||
var $status;
|
||||
var $headers = "";
|
||||
var $body = "";
|
||||
var $reqeust;
|
||||
var $errorcode;
|
||||
var $errormsg;
|
||||
|
||||
function processHTTP($url, $param) {
|
||||
|
||||
$data = "";
|
||||
foreach ($param as $key => $value) {
|
||||
$key2 = urlencode($key);
|
||||
$value2 = urlencode($value);
|
||||
$data .= "&$key2=$value2";
|
||||
}
|
||||
|
||||
$data = substr($data, 1); // remove leading "&"
|
||||
$url_data = parse_url($url);
|
||||
|
||||
|
||||
if ($url_data["scheme"] == "https") {
|
||||
$this->ssl = "ssl://";
|
||||
$this->port = 443;
|
||||
}
|
||||
|
||||
$this->host = $url_data["host"];
|
||||
/*
|
||||
|
||||
if (is_null($url_data["port"])) {
|
||||
$this->port = "80";
|
||||
} else {
|
||||
$this->port = $url_data["port"];
|
||||
}
|
||||
*/
|
||||
|
||||
$this->path = $url_data["path"];
|
||||
|
||||
if (!$this->sock = @fsockopen($this->ssl . $this->host, $this->port, $errno, $errstr, CONNECT_TIMEOUT)) {
|
||||
|
||||
switch ($errno) {
|
||||
case -3:
|
||||
$this->errormsg = 'Socket creation failed (-3)';
|
||||
case -4:
|
||||
$this->errormsg = 'DNS lookup failure (-4)';
|
||||
case -5:
|
||||
$this->errormsg = 'Connection refused or timed out (-5)';
|
||||
default:
|
||||
$this->errormsg = 'Connection failed (' . $errno . ')';
|
||||
$this->errormsg .= ' ' . $errstr;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->headers = "";
|
||||
$this->body = "";
|
||||
|
||||
/* Write */
|
||||
$request = "POST " . $this->path . " HTTP/1.0\r\n";
|
||||
$request .= "Connection: close\r\n";
|
||||
$request .= "Host: " . $this->host . "\r\n";
|
||||
$request .= "Content-type: application/x-www-form-urlencoded\r\n";
|
||||
$request .= "Content-length: " . strlen($data) . "\r\n";
|
||||
$request .= "Accept: */*\r\n";
|
||||
$request .= "\r\n";
|
||||
$request .= $data . "\r\n";
|
||||
$request .= "\r\n";
|
||||
fwrite($this->sock, $request);
|
||||
|
||||
/* Read */
|
||||
stream_set_blocking($this->sock, FALSE);
|
||||
$atStart = true;
|
||||
$IsHeader = true;
|
||||
$timeout = false;
|
||||
$start_time = time();
|
||||
while (!feof($this->sock) && !$timeout) {
|
||||
$line = fgets($this->sock, 4096);
|
||||
$diff = time() - $start_time;
|
||||
if ($diff >= READ_TIMEOUT) {
|
||||
$timeout = true;
|
||||
}
|
||||
if ($IsHeader) {
|
||||
if ($line == "") {
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 2) == "\r\n") {
|
||||
$IsHeader = false;
|
||||
continue;
|
||||
}
|
||||
$this->headers .= $line;
|
||||
if ($atStart) {
|
||||
$atStart = false;
|
||||
if (!preg_match('/HTTP\/(\\d\\.\\d)\\s*(\\d+)\\s*(.*)/', $line, $m)) {
|
||||
$this->errormsg = "Status code line invalid: " . htmlentities($line) . $m[1] . $m[2] . $m[3];
|
||||
fclose($this->sock);
|
||||
return false;
|
||||
}
|
||||
$http_version = $m[1];
|
||||
$this->status = $m[2];
|
||||
$status_string = $m[3];
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
$this->body .= $line;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fclose($this->sock);
|
||||
|
||||
if ($timeout) {
|
||||
$this->errorcode = READ_TIMEOUT_ERR;
|
||||
$this->errormsg = "Socket Timeout(" . $diff . "SEC)";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
// return false;
|
||||
}
|
||||
|
||||
function getErrorCode() {
|
||||
return $this->errorcode;
|
||||
}
|
||||
|
||||
function getErrorMsg() {
|
||||
return $this->errormsg;
|
||||
}
|
||||
|
||||
function getBody() {
|
||||
return $this->body;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@ -3,8 +3,8 @@
|
||||
/**
|
||||
* Copyright (C) 2007 INICIS Inc.
|
||||
*
|
||||
* <EFBFBD>ش<EFBFBD> <20><><EFBFBD>̺귯<CCBA><EAB7AF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<C7BE><EEBCAD> <20>ȵ˴ϴ<CBB4>.
|
||||
* <EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ忡 <20><><EFBFBD><EFBFBD> å<><C3A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˷<EFBFBD><CBB7>帳<EFBFBD>ϴ<EFBFBD>.
|
||||
* 해당 라이브러리는 절대 수정되어서는 안됩니다.
|
||||
* 임의로 수정된 코드에 대한 책임은 전적으로 수정자에게 있음을 알려드립니다.
|
||||
*
|
||||
*/
|
||||
require_once ( "INIDFN.php" );
|
||||
@ -16,57 +16,57 @@ require_once ( "INIXml.php" );
|
||||
extract($_POST);
|
||||
extract($_GET);
|
||||
switch ($paymethod) {
|
||||
case(Card): // <EFBFBD>ſ<EFBFBD>ī<EFBFBD><EFBFBD>
|
||||
case(Card): // 신용카드
|
||||
$pgid = "CARD";
|
||||
break;
|
||||
case(Account): // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü
|
||||
case(Account): // 은행 계좌 이체
|
||||
$pgid = "ACCT";
|
||||
break;
|
||||
case(DirectBank): // <EFBFBD>ǽð<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü
|
||||
case(DirectBank): // 실시간 계좌 이체
|
||||
$pgid = "DBNK";
|
||||
break;
|
||||
case(OCBPoint): // OCB
|
||||
$pgid = "OCBP";
|
||||
break;
|
||||
case(VCard): // ISP <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
case(VCard): // ISP 결제
|
||||
$pgid = "ISP_";
|
||||
break;
|
||||
case(HPP): // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
case(HPP): // 휴대폰 결제
|
||||
$pgid = "HPP_";
|
||||
break;
|
||||
case(ArsBill): // 700 <EFBFBD><EFBFBD>ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
case(ArsBill): // 700 전화결제
|
||||
$pgid = "ARSB";
|
||||
break;
|
||||
case(PhoneBill): // PhoneBill <EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><EFBFBD> <20><>ȭ)
|
||||
case(PhoneBill): // PhoneBill 결제(받는 전화)
|
||||
$pgid = "PHNB";
|
||||
break;
|
||||
case(Ars1588Bill):// 1588 <EFBFBD><EFBFBD>ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
case(Ars1588Bill):// 1588 전화결제
|
||||
$pgid = "1588";
|
||||
break;
|
||||
case(VBank): // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü
|
||||
case(VBank): // 가상계좌 이체
|
||||
$pgid = "VBNK";
|
||||
break;
|
||||
case(Culture): // <EFBFBD><EFBFBD>ȭ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
case(Culture): // 문화상품권 결제
|
||||
$pgid = "CULT";
|
||||
break;
|
||||
case(CMS): // CMS <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
case(CMS): // CMS 결제
|
||||
$pgid = "CMS_";
|
||||
break;
|
||||
case(AUTH): // <EFBFBD>ſ<EFBFBD>ī<EFBFBD><EFBFBD> <20><>ȿ<EFBFBD><C8BF> <20>˻<EFBFBD>
|
||||
case(AUTH): // 신용카드 유효성 검사
|
||||
$pgid = "AUTH";
|
||||
break;
|
||||
case(INIcard): // <EFBFBD><EFBFBD>Ƽ<EFBFBD>Ӵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
case(INIcard): // 네티머니 결제
|
||||
$pgid = "INIC";
|
||||
break;
|
||||
case(MDX): // <EFBFBD><EFBFBD>ī<EFBFBD><EFBFBD>
|
||||
case(MDX): // 몬덱스카드
|
||||
$pgid = "MDX_";
|
||||
break;
|
||||
default: // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD> <20><> <20>߰<EFBFBD><DFB0>Ǵ<EFBFBD> <20><><EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD> paymethod<6F><64> 4<>ڸ<EFBFBD><DAB8><EFBFBD> <20>Ѿ<EFBFBD><D1BE>´<EFBFBD>.
|
||||
default: // 상기 지불수단 외 추가되는 지불수단의 경우 기본으로 paymethod가 4자리로 넘어온다.
|
||||
$pgid = $paymethod;
|
||||
}
|
||||
|
||||
if ($quotainterest == "1") {
|
||||
$interest = "(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Һ<EFBFBD>)";
|
||||
$interest = "(무이자할부)";
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------- */
|
||||
@ -188,7 +188,7 @@ class INIData {
|
||||
var $m_PG1IP;
|
||||
var $m_PG2IP;
|
||||
//----------------------------
|
||||
//IFD <EFBFBD><EFBFBD>û<EFBFBD>ʵ<EFBFBD>
|
||||
//IFD 요청필드
|
||||
//----------------------------
|
||||
var $m_sCmd;
|
||||
var $m_sCrypto;
|
||||
@ -205,7 +205,7 @@ class INIData {
|
||||
var $m_sEncrypted;
|
||||
var $m_sSessionKey;
|
||||
//----------------------------
|
||||
//IFD <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʵ<EFBFBD>
|
||||
//IFD 응답헤더 필드
|
||||
//----------------------------
|
||||
var $m_FlgCrypto;
|
||||
var $m_FlgSign;
|
||||
@ -215,7 +215,7 @@ class INIData {
|
||||
var $m_Xml = array();
|
||||
var $m_REQUEST = array();
|
||||
var $m_REQUEST2 = array(); //User Defined Entity
|
||||
var $m_RESULT = array(); //Encrypted <EFBFBD>ʵ<EFBFBD> hash table
|
||||
var $m_RESULT = array(); //Encrypted 필드 hash table
|
||||
var $m_RESULT2 = array(); //PG Added Entity
|
||||
|
||||
function INIData($request, $request2) {
|
||||
@ -238,7 +238,7 @@ class INIData {
|
||||
$this->m_sCmd = CMS_REQ_OPEN_SUB;
|
||||
$this->m_sCrypto = FLAG_CRYPTO_3DES;
|
||||
}
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>ȯ<EFBFBD><C8AF> <20>߰<EFBFBD>
|
||||
//가상계좌 부분환불 추가
|
||||
else if (( $this->m_Type == TYPE_REPAY) || ( $this->m_Type == TYPE_VACCTREPAY)) {
|
||||
$this->m_sCmd = CMD_REQ_PRTC;
|
||||
$this->m_sCrypto = FLAG_CRYPTO_3DES;
|
||||
@ -265,7 +265,7 @@ class INIData {
|
||||
$this->m_sCmd = CMD_REQ_DNY_CNF;
|
||||
$this->m_sCrypto = FLAG_CRYPTO_3DES;
|
||||
}
|
||||
} else if ($this->m_Type == TYPE_REFUND) { //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȯ<EFBFBD><EFBFBD>(09.08.05)
|
||||
} else if ($this->m_Type == TYPE_REFUND) { //가상계좌환불(09.08.05)
|
||||
$this->m_sCmd = CMD_REQ_RFD;
|
||||
$this->m_sCrypto = FLAG_CRYPTO_3DES;
|
||||
} else {
|
||||
@ -286,7 +286,7 @@ class INIData {
|
||||
|
||||
function CheckField() {
|
||||
//---------------------------------
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//공통
|
||||
//---------------------------------
|
||||
if (trim($this->m_REQUEST["inipayhome"]) == "") {
|
||||
$this->m_ErrCode = NULL_DIR_ERR;
|
||||
@ -309,7 +309,7 @@ class INIData {
|
||||
return false;
|
||||
}
|
||||
//---------------------------------
|
||||
//type<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//type별로
|
||||
//---------------------------------
|
||||
if ($this->m_Type == TYPE_SECUREPAY) {
|
||||
/*
|
||||
@ -378,7 +378,7 @@ class INIData {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>ȯ<EFBFBD>ҵ<EFBFBD> <20>κ<EFBFBD>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
||||
//가상계좌 부분환불도 부분환불 로직에 추가
|
||||
else if (( $this->m_Type == TYPE_REPAY ) || ( $this->m_Type == TYPE_VACCTREPAY )) {
|
||||
if (trim($this->m_REQUEST["oldtid"]) == "") {
|
||||
$this->m_ErrCode = NULL_TID_ERR;
|
||||
@ -396,21 +396,21 @@ class INIData {
|
||||
return false;
|
||||
}
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ,<2C><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD> <20>ʼ<EFBFBD>
|
||||
//가상계좌 부분환불 로직에서는 계조번호,은행코드,계좌주명이 필수
|
||||
if ($this->m_Type == TYPE_VACCTREPAY) {
|
||||
if (trim($this->m_REQUEST["refundacctnum"]) == "") {
|
||||
$this->m_ErrCode = NULL_FIELD_REFUNDACCTNUM;
|
||||
$this->m_ErrMsg = "ȯ<EFBFBD>Ұ<EFBFBD><EFBFBD>¹<EFBFBD>ȣ";
|
||||
$this->m_ErrMsg = "환불계좌번호";
|
||||
return false;
|
||||
}
|
||||
if (trim($this->m_REQUEST["refundbankcode"]) == "") {
|
||||
$this->m_ErrCode = NULL_FIELD_REFUNDBANKCODE;
|
||||
$this->m_ErrMsg = "ȯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>";
|
||||
$this->m_ErrMsg = "환불은행코드";
|
||||
return false;
|
||||
}
|
||||
if (trim($this->m_REQUEST["refundacctname"]) == "") {
|
||||
$this->m_ErrCode = NULL_FIELD_REFUNDACCTNAME;
|
||||
$this->m_ErrMsg = "ȯ<EFBFBD>Ұ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><EFBFBD><EFBFBD>";
|
||||
$this->m_ErrMsg = "환불계좌주성명";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -433,17 +433,17 @@ class INIData {
|
||||
}
|
||||
if (trim($this->m_REQUEST["racctnum"]) == "") {
|
||||
$this->m_ErrCode = NULL_FIELD_REFUNDACCTNUM;
|
||||
$this->m_ErrMsg = "ȯ<EFBFBD>Ұ<EFBFBD><EFBFBD>¹<EFBFBD>ȣ";
|
||||
$this->m_ErrMsg = "환불계좌번호";
|
||||
return false;
|
||||
}
|
||||
if (trim($this->m_REQUEST["rbankcode"]) == "") {
|
||||
$this->m_ErrCode = NULL_FIELD_REFUNDBANKCODE;
|
||||
$this->m_ErrMsg = "ȯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>";
|
||||
$this->m_ErrMsg = "환불은행코드";
|
||||
return false;
|
||||
}
|
||||
if (trim($this->m_REQUEST["racctname"]) == "") {
|
||||
$this->m_ErrCode = NULL_FIELD_REFUNDACCTNAME;
|
||||
$this->m_ErrMsg = "ȯ<EFBFBD>Ұ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><EFBFBD><EFBFBD>";
|
||||
$this->m_ErrMsg = "환불계좌주성명";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -460,10 +460,10 @@ class INIData {
|
||||
list($usec, $sec) = explode(" ", microtime());
|
||||
$datestr = date("YmdHis", $sec) . substr($usec, 2, 3); //YYYYMMDDHHMMSSSSS
|
||||
|
||||
$datestr_con = substr($datestr, 0, 14) . substr($datestr, 15, 2); //YYYYMMDDHHMMSSxSS <EFBFBD>߰<EFBFBD><EFBFBD><EFBFBD> x<><78><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(milli second<6E><64> ù<><C3B9>° <20>ڸ<EFBFBD><DAB8><EFBFBD>)
|
||||
$datestr_con = substr($datestr, 0, 14) . substr($datestr, 15, 2); //YYYYMMDDHHMMSSxSS 중간의 x값은 버림(milli second의 첫번째 자리수)
|
||||
|
||||
mt_srand(getmypid() * mt_rand(1, 999)); //mt_rand <EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> srand <EFBFBD><EFBFBD> seed <EFBFBD><EFBFBD><EFBFBD><EFBFBD> , seed key = pid * mt_rand(1,999)
|
||||
//pgid + mid + 16<EFBFBD>ڸ<EFBFBD> <20><>¥<EFBFBD><C2A5> <20>ð<EFBFBD> + random_key 4<EFBFBD>ڸ<EFBFBD> (seed<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
mt_srand(getmypid() * mt_rand(1, 999)); //mt_rand 하기전에 srand 로 seed 적용 , seed key = pid * mt_rand(1,999)
|
||||
//pgid + mid + 16자리 날짜및 시간 + random_key 4자리 (seed적용)
|
||||
$this->m_sTID = $this->m_REQUEST["pgid"] . $this->m_REQUEST["mid"] . $datestr_con . mt_rand(1000, 9999);
|
||||
if (strlen($this->m_sTID) != TID_LEN) {
|
||||
return false;
|
||||
@ -524,16 +524,16 @@ class INIData {
|
||||
$CD = $xml->add_node($CI, TX_PRTC_REMAINS, $this->m_REQUEST["confirm_price"]);
|
||||
$CD = $xml->add_node($CI, TX_PRTC_QUOTA, $this->m_REQUEST["cardquota"]);
|
||||
$CD = $xml->add_node($CI, TX_PRTC_INTEREST, $this->m_REQUEST["quotainterest"]);
|
||||
//I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD><EFBFBD>ҽ<EFBFBD> <20><><EFBFBD>¹<EFBFBD>ȣ <20><><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 2011-10-06
|
||||
//I계좌이체 국민은행 부분취소시 계좌번호 계좌주성명을 받음 2011-10-06
|
||||
$CD = $xml->add_node($CI, TX_PRTC_NOACCT, $this->m_REQUEST["no_acct"]);
|
||||
$CD = $xml->add_node($CI, TX_PRTC_NMACCT, $this->m_REQUEST["nm_acct"], array("urlencode" => "1"));
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD> 2014-07-23 by jung.ks
|
||||
//과세,비과세 추가 2014-07-23 by jung.ks
|
||||
//$CD = $xml->add_node($CI, TX_PRTC_TAX, $this->m_REQUEST["tax"] );
|
||||
//$CD = $xml->add_node($CI, TX_PRTC_TAXFREE, $this->m_REQUEST["taxfree"] );
|
||||
|
||||
$this->AddUserDefinedEntity(PARTCANCELINFO, "", $xml, $CI);
|
||||
}
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>ȯ<EFBFBD><C8AF>
|
||||
//가상계좌 부분환불
|
||||
else if ($this->m_Type == TYPE_VACCTREPAY) {
|
||||
//PartCancelInfo(ROOT)
|
||||
$CI = $xml->add_node("", PARTCANCELINFO);
|
||||
@ -682,18 +682,18 @@ class INIData {
|
||||
function MakeBody() {
|
||||
$xml = new XML();
|
||||
|
||||
//ROOT(INIpay) ROOT<EFBFBD><EFBFBD> ROOTINFO<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 2011-05-23
|
||||
//ROOT(INIpay) ROOT를 ROOTINFO로 수정 2011-05-23
|
||||
$root = $xml->add_node("", ROOTINFO);
|
||||
|
||||
if ($this->m_Type == TYPE_SECUREPAY || $this->m_Type == TYPE_RECEIPT) {
|
||||
//GoodsInfo
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>(2010.04.13)
|
||||
//==goodscnt<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>ٱ<EFBFBD><D9B1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴҰ<C6B4><D2B0><EFBFBD>) <20>⺻ <20><> 1<><31> <20><><EFBFBD><EFBFBD>
|
||||
//장바구니 기능 추가(2010.04.13)
|
||||
//==goodscnt가 없을 경우(장바구니 기능이 아닐경우) 기본 값 1로 설정
|
||||
$tGoodCnt = ($this->m_REQUEST["goodscnt"] != null && (int) $this->m_REQUEST["goodscnt"] > 0 ) ? $this->m_REQUEST["goodscnt"] : 1;
|
||||
|
||||
$GI = $xml->add_node($root, GOODSINFO);
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>(2010.04.13)
|
||||
//==TX_GOOSCNT<EFBFBD><EFBFBD> $tGoodCnt<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Է<EFBFBD>
|
||||
//장바구니 기능 추가(2010.04.13)
|
||||
//==TX_GOOSCNT는 $tGoodCnt로 부터 입력
|
||||
//$GP = $xml->add_node($GI, TX_GOOSCNT, "1" );
|
||||
$GP = $xml->add_node($GI, TX_GOOSCNT, $tGoodCnt);
|
||||
$GP = $xml->add_node($GI, TX_MOID, $this->m_REQUEST["oid"], array("urlencode" => "1"));
|
||||
@ -702,8 +702,8 @@ class INIData {
|
||||
$GP = $xml->add_node($GI, TX_TAXFREE, $this->m_REQUEST["taxfree"]);
|
||||
$this->AddUserDefinedEntity(GOODSINFO, "", $xml, $GI);
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>(2010.04.13) [START]
|
||||
//==<EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD><EFBFBD> XML <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
||||
//장바구니 기능 추가(2010.04.13) [START]
|
||||
//==장바구니 XML 전문 추가
|
||||
$iGoodCnt = 1;
|
||||
while ($iGoodCnt <= $tGoodCnt) {
|
||||
if ($this->m_REQUEST["smid_" . $iGoodCnt] != "" && strlen($this->m_REQUEST["smid_" . $iGoodCnt]) > 0) {
|
||||
@ -728,7 +728,7 @@ class INIData {
|
||||
}
|
||||
$iGoodCnt++;
|
||||
}
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>(2010.04.13) [END]
|
||||
//장바구니 기능 추가(2010.04.13) [END]
|
||||
|
||||
$this->AddUserDefinedEntity(GOODSINFO, GOODS, $xml, $GS);
|
||||
//BuyerInfo
|
||||
@ -765,7 +765,7 @@ class INIData {
|
||||
$CD = $xml->add_node($CI, TX_SESSIONKEY, $this->m_sSessionKey);
|
||||
$CD = $xml->add_node($CI, TX_ENCRYPTED, $this->m_sEncrypted);
|
||||
}
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>ȯ<EFBFBD><C8AF><EFBFBD>߰<EFBFBD>
|
||||
//가상계좌 부분환불추가
|
||||
else if (( $this->m_Type == TYPE_REPAY ) || ( $this->m_Type == TYPE_VACCTREPAY )) {
|
||||
//PartCancelInfo
|
||||
$CI = $xml->add_node($root, PARTCANCELINFO);
|
||||
@ -804,8 +804,8 @@ class INIData {
|
||||
$CD = $xml->add_node($CI, TX_ENCRYPTED, $this->m_sEncrypted);
|
||||
} else if ($this->m_Type == TYPE_OPENSUB) {
|
||||
//GoodsInfo
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>(2010.04.13)
|
||||
//==goodscnt<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>ٱ<EFBFBD><D9B1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴҰ<C6B4><D2B0><EFBFBD>) <20>⺻ <20><> 1<><31> <20><><EFBFBD><EFBFBD>
|
||||
//장바구니 기능 추가(2010.04.13)
|
||||
//==goodscnt가 없을 경우(장바구니 기능이 아닐경우) 기본 값 1로 설정
|
||||
$tSubCnt = ($this->m_REQUEST["subcnt"] != null && (int) $this->m_REQUEST["subcnt"] > 0 ) ? $this->m_REQUEST["subcnt"] : 1;
|
||||
|
||||
$OI = $xml->add_node($root, OPENSUBINFO);
|
||||
@ -829,7 +829,7 @@ class INIData {
|
||||
|
||||
$iSubCnt++;
|
||||
}
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>(2010.04.13) [END]
|
||||
//장바구니 기능 추가(2010.04.13) [END]
|
||||
$this->AddUserDefinedEntity(OPENSUBINFO, "", $xml, $OI);
|
||||
}
|
||||
//ReservedInfo
|
||||
@ -901,8 +901,8 @@ class INIData {
|
||||
$this->m_RESULT[NM_MOID] = $this->GetXMLData(MOID);
|
||||
|
||||
//PAYMENTINFO
|
||||
//<EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> paymethod<6F><64> <20><><EFBFBD><EFBFBD> <20>ʾ<EFBFBD> <20>ӽ÷<D3BD> <20><>û Paymethod<EFBFBD><EFBFBD> <20><>ü
|
||||
//PG<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> PayMethod<EFBFBD><EFBFBD> <20><>ûPaymethod<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!
|
||||
//기타지불수단이 paymethod를 주지 않아 임시로 요청 Paymethod로 대체
|
||||
//PG에서 주는 PayMethod와 요청Paymethod는 같다!
|
||||
$this->m_RESULT[NM_PAYMETHOD] = $this->m_sPayMethod;
|
||||
|
||||
$ResultCode = $this->GetXMLData("ResultCode");
|
||||
@ -928,8 +928,8 @@ class INIData {
|
||||
$this->m_Xml = array_merge($this->m_Xml, $xml->xml_node);
|
||||
|
||||
if ($this->m_Type == TYPE_SECUREPAY || $this->m_Type == TYPE_RECEIPT) {
|
||||
//<EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD>¥(ApplDate), <EFBFBD><EFBFBD><EFBFBD>νð<EFBFBD>(ApplTime), <EFBFBD><EFBFBD><EFBFBD>ι<EFBFBD>ȣ(ApplNum)<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!!(OCB, <EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
//ISP, CARD<EFBFBD><EFBFBD> CARD<EFBFBD><EFBFBD> assign. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ISP<53><50> <20><><EFBFBD><EFBFBD>, CARD<52><44> <20><><EFBFBD><EFBFBD> <20>˰<EFBFBD> <20><><EFBFBD><EFBFBD>!!!-_-
|
||||
//승인날짜(ApplDate), 승인시간(ApplTime), 승인번호(ApplNum)는 공통!!(OCB, 현금영수증 제외)
|
||||
//ISP, CARD는 CARD로 assign. 고객/상점은 ISP가 뭔지, CARD가 뭔지 알게 뭐야!!!-_-
|
||||
if ($this->m_sPayMethod == NM_TX_CARD) {
|
||||
$this->m_RESULT[APPLDATE] = $this->GetXMLData(CARD_APPLDATE);
|
||||
$this->m_RESULT[APPLTIME] = $this->GetXMLData(CARD_APPLTIME);
|
||||
@ -994,7 +994,7 @@ class INIData {
|
||||
$this->m_RESULT[APPLTIME] = $this->GetXMLData(GAMG_APPLTIME);
|
||||
$this->m_RESULT[APPLNUM] = $this->GetXMLData(GAMG_APPLNUM);
|
||||
$this->m_RESULT[GAMG_CNT] = $this->GetXMLData(GAMG_CNT);
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>ȭ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Multi<74><69><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//게임문화상품권은 Multi결제 가능
|
||||
MakePathGAMG($this->m_RESULT[GAMG_CNT]);
|
||||
for ($i = 1; $i <= $this->m_RESULT[GAMG_CNT]; $i++) {
|
||||
$this->m_RESULT[constant("GAMG_NUM$i")] = $this->GetXMLData(constant("GAMG_NUM$i"));
|
||||
@ -1061,7 +1061,7 @@ class INIData {
|
||||
$this->m_PG2IP = $pg2ip;
|
||||
}
|
||||
|
||||
// Xpath<EFBFBD><EFBFBD> <20>Ȱ<EFBFBD><C8B0><EFBFBD><EFBFBD>´<EFBFBD>. <20>Ѵ<EFBFBD><D1B4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߴ<EFBFBD>!!
|
||||
// Xpath로 안가져온다. 한달을 헛지랄 했다!!
|
||||
// added by ddaemiri, 2007.09.03
|
||||
function GetXMLData($node) {
|
||||
$content = $this->m_Xml[$node . "[1]"]["text"];
|
||||
@ -1074,7 +1074,7 @@ class INIData {
|
||||
|
||||
/* ----------------------------------------------------- */
|
||||
/* Crypto Class */
|
||||
/* PHP4.2 & OpenSSL <EFBFBD>ʿ<EFBFBD>) */
|
||||
/* PHP4.2 & OpenSSL 필요) */
|
||||
/* ----------------------------------------------------- */
|
||||
|
||||
class INICrypto {
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
/**
|
||||
* Copyright (C) 2007 INICIS Inc.
|
||||
*
|
||||
* <EFBFBD>ش<EFBFBD> <20><><EFBFBD>̺귯<CCBA><EAB7AF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<C7BE><EEBCAD> <20>ȵ˴ϴ<CBB4>.
|
||||
* <EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ忡 <20><><EFBFBD><EFBFBD> å<><C3A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˷<EFBFBD><CBB7>帳<EFBFBD>ϴ<EFBFBD>.
|
||||
* 해당 라이브러리는 절대 수정되어서는 안됩니다.
|
||||
* 임의로 수정된 코드에 대한 책임은 전적으로 수정자에게 있음을 알려드립니다.
|
||||
*
|
||||
* @version 5.0
|
||||
* @author ddaemiri
|
||||
@ -15,37 +15,37 @@
|
||||
*
|
||||
* @buildno 5001
|
||||
* @date 2008.01.15
|
||||
* @note <EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ũ<EFBFBD><EFBFBD> <20>߰<EFBFBD>, DNS Lookup Timeout <EFBFBD>߰<EFBFBD>, DNS Lookup <EFBFBD><EFBFBD><EFBFBD>н<EFBFBD> socket close<EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>κ<EFBFBD> <20>߰<EFBFBD>
|
||||
* @note 자체에스크로 추가, DNS Lookup Timeout 추가, DNS Lookup 실패시 socket close안하는 부분 추가
|
||||
* @date 2008.01.16
|
||||
* @note Encrypt,Decrypt <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, pkcs5 padding <EFBFBD>߰<EFBFBD>
|
||||
* @note Encrypt,Decrypt 모듈 개선, pkcs5 padding 추가
|
||||
* @date 2008.01.24
|
||||
* @note non block connect immediate return check code/str
|
||||
* @date 2008.02.11
|
||||
* @note key load <EFBFBD><EFBFBD> read<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fclose <EFBFBD>߰<EFBFBD>
|
||||
* @note key load 후 read에러발생시 fclose 추가
|
||||
* @date 2008.03.03
|
||||
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(passing by reference) <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note 참조에 의한 전달(passing by reference) 수정
|
||||
* @date 2008.03.11
|
||||
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ũ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Cmd <EFBFBD>߰<EFBFBD>
|
||||
* @note 에스크로 망취소 Cmd 추가
|
||||
* @date 2008.03.12
|
||||
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP<49><50> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @note 기존 연결된 IP로 망취소 수정
|
||||
* @buildno 5002
|
||||
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҽ<EFBFBD> Sign<67>߰<EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>->5001<30><31> <20><><EFBFBD><EFBFBD><EFBFBD>ҽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>,<2C><EFBFBD><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD> <20><>)
|
||||
* @note 망취소시 Sign추가(기존에 안했음->5001은 망취소시 서버측에서 서명오류가 남,그래도 망취소처리는 됨)
|
||||
* @date 2008.03.12
|
||||
* @buildno 5016
|
||||
* @note pg1ip, pg2ip <EFBFBD>߰<EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> drpg<70><67> <20><><EFBFBD>õ<EFBFBD>
|
||||
* @note pg1ip, pg2ip 추가/취소 원거래없음시 drpg로 재시도
|
||||
* @date 2008.04.02
|
||||
* @buildno 5017
|
||||
* @note 1)chkfake<EFBFBD><EFBFBD> <20>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD> <20><><EFBFBD><EFBFBD>(<28>ߺ<EFBFBD>)
|
||||
* 2)call-time pass-by-reference => pass-by-value<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @note 1)chkfake시 파라미터 로깅 삭제(중복)
|
||||
* 2)call-time pass-by-reference => pass-by-value로 수정
|
||||
* @date 2009.01.12
|
||||
* @buildno 5019
|
||||
* @note delete UIP
|
||||
* @date 2009.01.21
|
||||
* @note add mkey/mergelog ( for Makeshop )
|
||||
* @date 2009.02.24
|
||||
* @note 1)define MKEY deprecated 2009.02.19 ( Makeshop <EFBFBD>ʱ<EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD>ǰ<F1BDBAB5> <20>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
* 2)Makeshop PG Updrade<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>γ<EFBFBD><CEB3><EFBFBD> 2009.02.19 (interface<EFBFBD><EFBFBD><EFBFBD><EFBFBD> mkey<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> ó<><C3B3><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
* 3)Makeshop PG Updrade<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>γ<EFBFBD><CEB3><EFBFBD> 2009.02.24 (interface<EFBFBD><EFBFBD><EFBFBD><EFBFBD> mergelog<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> ó<><C3B3><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
* @note 1)define MKEY deprecated 2009.02.19 ( Makeshop 초기 한번나감. 서비스되고 있는지는 모름)
|
||||
* 2)Makeshop PG Updrade용으로 새로나감 2009.02.19 (interface에서 mkey값을 받아 처리하게 변경)
|
||||
* 3)Makeshop PG Updrade용으로 새로나감 2009.02.24 (interface에서 mergelog값을 받아 처리하게 변경)
|
||||
* @date 2009.05.07
|
||||
* @note add BUILDDATE in TXVersion
|
||||
* @date 2009.08.05
|
||||
@ -57,12 +57,12 @@
|
||||
* @date 2010.07.14
|
||||
* @note add Tax, TaxFree info(TX_TAX, TX_TAXFREE)
|
||||
* @date 2010.09.09
|
||||
* @note <EFBFBD><EFBFBD><EFBFBD>ҿ<EFBFBD>û<EFBFBD><EFBFBD> PG <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>->IP, INILib.php)
|
||||
* @note 취소요청시 PG 설정 변경(도메인->IP, INILib.php)
|
||||
* @note BUILDDATE update(100414 -> 100909)
|
||||
* @note 2011.05.23 5030 XML ELEMENT <EFBFBD><EFBFBD> ROOT <EFBFBD><EFBFBD> ROOTINFO<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @note 2011.05.23 5030 XML ELEMENT 중 ROOT 를 ROOTINFO로 수정
|
||||
* @buildno 5032
|
||||
* @note 2012.07.09 <EFBFBD>ŷ<EFBFBD><EFBFBD><EFBFBD>ȸ <20>߰<EFBFBD> (TYPE_INQUIRY)
|
||||
* @note 2012.07.09 PHP ini <EFBFBD><EFBFBD><EFBFBD><EFBFBD> error display setting <EFBFBD>߰<EFBFBD>
|
||||
* @note 2012.07.09 거래조회 추가 (TYPE_INQUIRY)
|
||||
* @note 2012.07.09 PHP ini 파일 error display setting 추가
|
||||
* @buildno 5036
|
||||
* @note 2014.12.09 add gather parameter tid, type
|
||||
*/
|
||||
@ -111,8 +111,8 @@ define("IMJK", "UkVHSVNUX05PX1JDNEtFWQ==");
|
||||
define("IMJV", "UkVHSVNUX05PX1JDNElW");
|
||||
|
||||
//define for mkey
|
||||
//deprecated 2009.02.19 ( Makeshop <EFBFBD>ʱ<EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD>ǰ<F1BDBAB5> <20>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
//Makeshop PG Updrade<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>γ<EFBFBD><CEB3><EFBFBD> 2009.02.19 (interface<EFBFBD><EFBFBD><EFBFBD><EFBFBD> mkey<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> ó<><C3B3><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
//deprecated 2009.02.19 ( Makeshop 초기 한번나감. 서비스되고 있는지는 모름)
|
||||
//Makeshop PG Updrade용으로 새로나감 2009.02.19 (interface에서 mkey값을 받아 처리하게 변경)
|
||||
//define("MKEY", 1);
|
||||
//non block connect immediate return check code/str
|
||||
define("ERRSTR_INPROGRESS", "Operation now in progress");
|
||||
@ -152,24 +152,24 @@ define("CMD_REQ_PRTC", "0620");
|
||||
define("CMD_RES_PRTC", "0630");
|
||||
define("CMD_REQ_ACK", "0800");
|
||||
define("CMD_RES_ACK", "0810");
|
||||
//<EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ũ<EFBFBD><EFBFBD>
|
||||
//자체에스크로
|
||||
//added 2008.01.08
|
||||
define("CMD_REQ_DLV", "3020"); //<EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><EFBFBD><EFBFBD>
|
||||
define("CMD_REQ_CNF", "3030"); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȯ<EFBFBD><EFBFBD>
|
||||
define("CMD_REQ_DNY", "3040"); //<EFBFBD><EFBFBD><EFBFBD>Ű<EFBFBD><EFBFBD><EFBFBD>
|
||||
define("CMD_REQ_DNY_CNF", "3080"); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȯ<EFBFBD><EFBFBD>
|
||||
define("CMD_REQ_DLV_NETC", "3520"); //<EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
define("CMD_REQ_CNF_NETC", "3530"); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȯ<EFBFBD>θ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
define("CMD_REQ_DNY_NETC", "3540"); //<EFBFBD><EFBFBD><EFBFBD>Ű<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȯ<EFBFBD><EFBFBD>(09.08.05)
|
||||
define("CMD_REQ_DLV", "3020"); //배송등록
|
||||
define("CMD_REQ_CNF", "3030"); //구매확인
|
||||
define("CMD_REQ_DNY", "3040"); //구매거절
|
||||
define("CMD_REQ_DNY_CNF", "3080"); //거절확인
|
||||
define("CMD_REQ_DLV_NETC", "3520"); //배송등록망상취소
|
||||
define("CMD_REQ_CNF_NETC", "3530"); //구매확인망상취소
|
||||
define("CMD_REQ_DNY_NETC", "3540"); //구매거절망상취소
|
||||
//가상계좌환불(09.08.05)
|
||||
define("CMD_REQ_RFD", "0421");
|
||||
define("CMD_RES_RFD", "0431");
|
||||
|
||||
//<EFBFBD>ŷ<EFBFBD><EFBFBD><EFBFBD>ȸ(12.04.20)
|
||||
//거래조회(12.04.20)
|
||||
define("CMS_REQ_INQR", "0900");
|
||||
define("CMS_RES_INQR", "0910");
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(14.03.06)
|
||||
//서브몰하위가맹점등록(14.03.06)
|
||||
define("CMS_REQ_OPEN_SUB", "1040");
|
||||
define("CMS_RES_OPEN_SUB", "1041");
|
||||
|
||||
@ -187,14 +187,14 @@ define("FLAG_SIGN_SHA1", "SHA1");
|
||||
define("FLAG_SIGN_MD5", "MD5");
|
||||
|
||||
//------------------------------------------------------
|
||||
//TYPE(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
//TYPE(서비스별)
|
||||
//------------------------------------------------------
|
||||
define("TYPE_SECUREPAY", "securepay");
|
||||
define("TYPE_CANCEL", "cancel");
|
||||
define("TYPE_FORMPAY", "formpay");
|
||||
define("TYPE_RECEIPT", "receipt");
|
||||
define("TYPE_REPAY", "repay");
|
||||
define("TYPE_ESCROW", "escrow"); //<EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ũ<EFBFBD><EFBFBD>!
|
||||
define("TYPE_ESCROW", "escrow"); //자체에스크로!
|
||||
define("TYPE_CONFIRM", "confirm");
|
||||
define("TYPE_OCBQUERY", "ocbquery");
|
||||
define("TYPE_OCBSAVE", "ocbsave");
|
||||
@ -207,26 +207,26 @@ define("TYPE_VBANK", "VBank");
|
||||
define("TYPE_REQREALBILL", "reqrealbill");
|
||||
define("TYPE_FORMAUTH", "formauth");
|
||||
define("TYPE_CHKFAKE", "chkfake");
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȯ<EFBFBD><EFBFBD>(09.08.05)
|
||||
//가상계좌환불(09.08.05)
|
||||
define("TYPE_REFUND", "refund");
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ºκ<EFBFBD>ȯ<EFBFBD><EFBFBD>(12.06.05)
|
||||
//가상계좌부분환불(12.06.05)
|
||||
define("TYPE_VACCTREPAY", "vacctrepay");
|
||||
//<EFBFBD>ŷ<EFBFBD><EFBFBD><EFBFBD>ȸ(12.04.20)
|
||||
//거래조회(12.04.20)
|
||||
define("TYPE_INQUIRY", "inquiry");
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(14.03.06)
|
||||
//서브몰하위가맹점등록(14.03.06)
|
||||
define("TYPE_OPENSUB", "opensub");
|
||||
//------------------------------------------------------
|
||||
//EscrowType(<EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ũ<EFBFBD><EFBFBD> Ÿ<><C5B8>)
|
||||
//EscrowType(자체에스크로 타입)
|
||||
//added 2008.01.08
|
||||
//------------------------------------------------------
|
||||
define("TYPE_ESCROW_DLV", "dlv");
|
||||
define("TYPE_ESCROW_CNF", "confirm"); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȯ<EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>(<28>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>)
|
||||
define("TYPE_ESCROW_DNY", "deny"); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD>,<2C>ǹ̾<C7B9><CCBE><EFBFBD>
|
||||
define("TYPE_ESCROW_CNF", "confirm"); //구매확인/거절(플러그인)
|
||||
define("TYPE_ESCROW_DNY", "deny"); //위에서 처리됨,의미없음
|
||||
define("TYPE_ESCROW_DNY_CNF", "dcnf");
|
||||
|
||||
|
||||
//------------------------------------------------------
|
||||
//PayMethod(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, TX)
|
||||
//PayMethod(서비스별, TX)
|
||||
//------------------------------------------------------
|
||||
define("NM_TX_ISP", "VCard");
|
||||
define("NM_TX_CARD", "Card");
|
||||
@ -244,7 +244,7 @@ define("NM_TX_TEEN", "TEEN");
|
||||
define("NM_TX_ESCR", "Escrow");
|
||||
|
||||
//------------------------------------------------------
|
||||
//PayMethod(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, PG)
|
||||
//PayMethod(서비스별, PG)
|
||||
//------------------------------------------------------
|
||||
define("NM_ISP", "ISP");
|
||||
define("NM_CARD", "CARD");
|
||||
@ -274,7 +274,7 @@ define("URLENCODE", "urlencode");
|
||||
define("URLDECODE", "urldecode");
|
||||
|
||||
//------------------------------------------------------
|
||||
//<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//요청전문
|
||||
//------------------------------------------------------
|
||||
define("TX_GOOSCNT", "GoodsCnt");
|
||||
define("TX_MOID", "MOID");
|
||||
@ -317,8 +317,8 @@ define("TX_RN", "TXRN");
|
||||
//CancelInfo
|
||||
define("TX_CANCELTID", "CancelTID");
|
||||
define("TX_CANCELMSG", "CancelMsg");
|
||||
define("TX_CANCELREASON", "CancelReason"); //2012-10-19 <EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD> <20>߰<EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȯ<EFBFBD><EFBFBD>(09.08.05)
|
||||
define("TX_CANCELREASON", "CancelReason"); //2012-10-19 취소사유코드 추가
|
||||
//가상계좌환불(09.08.05)
|
||||
define("TX_REFUNDACCTNUM", "RefundAcctNum");
|
||||
define("TX_REFUNDBANKCODE", "RefundBankCode");
|
||||
define("TX_REFUNDACCTNAME", "RefundAcctName");
|
||||
@ -333,15 +333,15 @@ define("TX_PRTC_TAXFREE", "TaxFree");
|
||||
|
||||
define("TX_PRTC_CURRENCY", "Currency");
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I<><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü <20>κ<EFBFBD><CEBA><EFBFBD><EFBFBD>ҽ<EFBFBD> <20><><EFBFBD>¹<EFBFBD>ȣ/<2F><><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD>߰<EFBFBD> 2011-10-06
|
||||
//국민은행 I계좌이체 부분취소시 계좌번호/계좌주성명추가 2011-10-06
|
||||
define("TX_PRTC_NOACCT", "PRTC_NoAcctFNBC");
|
||||
define("TX_PRTC_NMACCT", "PRTC_NmAcctFNBC");
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
||||
//가상계좌 부분환불 관련 추가
|
||||
define("TX_PRTC_REFUNDFLGREMIT", "PRTC_RefundFlgRemit");
|
||||
define("TX_PRTC_REFUNDBANKCODE", "PRTC_RefundBankCode");
|
||||
//CaptureInfo
|
||||
define("TX_CAPTURETID", "CaptureTID");
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//현금영수증
|
||||
define("TX_CSHR_APPLPRICE", "CSHR_ApplPrice");
|
||||
define("TX_CSHR_SUPPLYPRICE", "CSHR_SupplyPrice");
|
||||
define("TX_CSHR_TAX", "CSHR_Tax");
|
||||
@ -357,9 +357,9 @@ define("TX_CSHR_SUBREGNUM1", "CSHR_SubRegNum1");
|
||||
define("TX_CSHR_SUBMID1", "CSHR_SubMID1");
|
||||
define("TX_CSHR_SUBAPPLPRICE1", "CSHR_SubApplPrice1");
|
||||
define("TX_CSHR_SUBSERVICEPRICE1", "CSHR_SubServicePrice1");
|
||||
//<EFBFBD>ŷ<EFBFBD><EFBFBD><EFBFBD>ȸ(12.04.20)
|
||||
//거래조회(12.04.20)
|
||||
define("TX_INQR_TID", "INQR_TID");
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(14.03.06)
|
||||
//서브몰하위가맹점등록(14.03.06)
|
||||
define("TX_OPENREG_TID", "OrgTID");
|
||||
define("TX_OPENREG_MID", "MID");
|
||||
define("TX_OPENREG_SUBCNT", "SubCnt");
|
||||
@ -374,7 +374,7 @@ define("TX_OPENREG_SUBPRICE", "SubPrice");
|
||||
|
||||
//------------------------------------------------------
|
||||
//
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//응답전문
|
||||
//
|
||||
//------------------------------------------------------
|
||||
//HEAD
|
||||
@ -433,9 +433,9 @@ define("CANCELINFO", "CancelInfo");
|
||||
define("PARTCANCELINFO", "PartCancelInfo");
|
||||
//Capture
|
||||
define("CAPTUREINFO", "CaptureInfo");
|
||||
//<EFBFBD>ŷ<EFBFBD><EFBFBD><EFBFBD>ȸ(12.04.20)
|
||||
//거래조회(12.04.20)
|
||||
define("INQUIRYINFO", "InquiryInfo");
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(14.03.06)
|
||||
//서브몰하위가맹점등록(14.03.06)
|
||||
define("OPENSUBINFO", "OpenSubInfo");
|
||||
//Escrow
|
||||
//added 2008.01.09
|
||||
@ -541,7 +541,7 @@ define("TEEN_APPLNUM", "TEEN_ApplNum");
|
||||
//----------------------------------
|
||||
//ERROR CODE
|
||||
//----------------------------------
|
||||
//!!<EFBFBD><EFBFBD>TX<EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>!!!
|
||||
//!!신TX에 추가된 에러!!!
|
||||
define("NULL_DIR_ERR", "TX9001");
|
||||
define("NULL_TYPE_ERR", "TX9002");
|
||||
define("NULL_NOINTEREST_ERR", "TX9003");
|
||||
@ -551,7 +551,7 @@ define("MERCHANT_DB_ERR", "TX9006");
|
||||
define("DNS_LOOKUP_TIMEOUT_ERR", "TX9007");
|
||||
define("PGPUB_UPDATE_ERR", "TX9612");
|
||||
|
||||
//<EFBFBD>Ϻ<EFBFBD>ȣȭ <20><><EFBFBD><EFBFBD>
|
||||
//암복호화 에러
|
||||
define("B64DECODE_UPDATE_ERR", "TX9101");
|
||||
define("B64DECODE_FINAL_ERR", "TX9102");
|
||||
define("B64DECODE_LENGTH_ERR", "TX9103");
|
||||
@ -576,7 +576,7 @@ define("SIGN_CHECK_ERR", "TX9121");
|
||||
define("ENC_NULL_F_ERR", "TX9122");
|
||||
define("ENC_INIT_RAND_ERR", "TX9123");
|
||||
define("ENC_PUTENV_ERR", "TX9124");
|
||||
//<EFBFBD>ʵ<EFBFBD>üũ
|
||||
//필드체크
|
||||
define("NULL_KEYPW_ERR", "TX9201");
|
||||
define("NULL_MID_ERR", "TX9202");
|
||||
define("NULL_PGID_ERR", "TX9203");
|
||||
@ -607,37 +607,37 @@ define("NULL_BUYERNAME_ERR", "TX9227");
|
||||
define("NULL_BUYERTEL_ERR", "TX9228");
|
||||
define("NULL_BUYEREMAIL_ERR", "TX9229");
|
||||
define("NULL_SESSIONKEY_ERR", "TX9230");
|
||||
//pg<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ű <20>ε<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//pg공개키 로드 오류
|
||||
define("NULL_PGCERT_FP_ERR", "TX9231");
|
||||
define("NULL_X509_ERR", "TX9232");
|
||||
define("NULL_PGCERT_ERR", "TX9233");
|
||||
|
||||
define("RESULT_MSG_FORMAT_ERR", "TX9234");
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_PERNO_ERR", "TX9235"); // <EFBFBD>ֹι<EFBFBD>ȣ <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_OID_ERR", "TX9236"); // <EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD>ȣ <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_VCDBANK_ERR", "TX9237"); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_DTINPUT_ERR", "TX9238"); // <EFBFBD>Ա<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_NMINPUT_ERR", "TX9239"); // <EFBFBD>۱<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//<EFBFBD>ǽð<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_BILLKEY_ERR", "TX9240"); // <EFBFBD><EFBFBD>Ű <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_CARDPASS_ERR", "TX9241"); // ī<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_BILLTYPE_ERR", "TX9242"); // <EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// CMS <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü
|
||||
define("NULL_PRICE_ORG_ERR", "TX9250"); // CMS <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѱݾ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_CMSDAY_ERR", "TX9251"); // CMS <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_CMSDATEFROM_ERR", "TX9252"); // CMS <EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_CMSDATETO_ERR", "TX9253"); // CMS <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// <EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
define("NULL_CONFIRM_PRICE_ERR", "TX9260"); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD>ݾ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_CR_PRICE_ERR", "TX9270"); // <EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD> <20>ݾ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_SUP_PRICE_ERR", "TX9271"); // <EFBFBD><EFBFBD><EFBFBD>ް<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_TAX_ERR", "TX9272"); // <EFBFBD>ΰ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_SRVC_PRICE_ERR", "TX9273"); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
define("NULL_REG_NUM_ERR", "TX9274"); // <EFBFBD>ֹι<EFBFBD>ȣ(<28><><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD>ȣ)
|
||||
define("NULL_USEOPT_ERR", "TX9275"); // <EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>뵵 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 가상 계좌 이체 예약
|
||||
define("NULL_PERNO_ERR", "TX9235"); // 주민번호 빠짐
|
||||
define("NULL_OID_ERR", "TX9236"); // 주문번호 빠짐
|
||||
define("NULL_VCDBANK_ERR", "TX9237"); // 은행코드 빠짐
|
||||
define("NULL_DTINPUT_ERR", "TX9238"); // 입금 예정일 빠짐
|
||||
define("NULL_NMINPUT_ERR", "TX9239"); // 송금자 성명 빠짐
|
||||
//실시간 빌링
|
||||
define("NULL_BILLKEY_ERR", "TX9240"); // 빌키 빠짐
|
||||
define("NULL_CARDPASS_ERR", "TX9241"); // 카드 비번 빠짐
|
||||
define("NULL_BILLTYPE_ERR", "TX9242"); // 빌타입 누락
|
||||
// CMS 계좌이체
|
||||
define("NULL_PRICE_ORG_ERR", "TX9250"); // CMS 출금총금액 빠짐
|
||||
define("NULL_CMSDAY_ERR", "TX9251"); // CMS 출금일자 빠짐
|
||||
define("NULL_CMSDATEFROM_ERR", "TX9252"); // CMS 출금시작월 빠짐
|
||||
define("NULL_CMSDATETO_ERR", "TX9253"); // CMS 출금종료월 빠짐
|
||||
// 부분취소
|
||||
define("NULL_CONFIRM_PRICE_ERR", "TX9260"); // 재승인 요청금액 누락 에러
|
||||
// 현금영수증 발행
|
||||
define("NULL_CR_PRICE_ERR", "TX9270"); // 현금결제 금액 빠짐
|
||||
define("NULL_SUP_PRICE_ERR", "TX9271"); // 공급가액 빠짐
|
||||
define("NULL_TAX_ERR", "TX9272"); // 부가세 빠짐
|
||||
define("NULL_SRVC_PRICE_ERR", "TX9273"); // 봉사료 빠짐
|
||||
define("NULL_REG_NUM_ERR", "TX9274"); // 주민번호(사업자번호)
|
||||
define("NULL_USEOPT_ERR", "TX9275"); // 현금영수증 용도 구분자 빠짐
|
||||
|
||||
define("PRIVKEY_FILE_OPEN_ERR", "TX9301");
|
||||
define("INVALID_KEYPASS_ERR", "TX9302");
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,251 +1,222 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Copyright (C) 2007 INICIS Inc.
|
||||
*
|
||||
* <EFBFBD>ش<EFBFBD> <20><><EFBFBD>̺귯<CCBA><EAB7AF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<C7BE><EEBCAD> <20>ȵ˴ϴ<CBB4>.
|
||||
* <EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ忡 <20><><EFBFBD><EFBFBD> å<><C3A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˷<EFBFBD><CBB7>帳<EFBFBD>ϴ<EFBFBD>.
|
||||
* 해당 라이브러리는 절대 수정되어서는 안됩니다.
|
||||
* 임의로 수정된 코드에 대한 책임은 전적으로 수정자에게 있음을 알려드립니다.
|
||||
*
|
||||
*/
|
||||
class INISocket {
|
||||
|
||||
class INISocket{
|
||||
var $hnd;
|
||||
var $host;
|
||||
var $ip;
|
||||
var $port;
|
||||
var $type;
|
||||
var $family;
|
||||
var $protocol;
|
||||
var $bConnected;
|
||||
var $sBuffer;
|
||||
var $sSocErr;
|
||||
var $dns_laptime;
|
||||
var $hnd;
|
||||
var $host;
|
||||
var $ip;
|
||||
var $port;
|
||||
var $type;
|
||||
var $family;
|
||||
var $protocol;
|
||||
var $bConnected;
|
||||
var $sBuffer;
|
||||
var $sSocErr;
|
||||
var $dns_laptime;
|
||||
|
||||
function error($msg=null)
|
||||
{
|
||||
$errCode = socket_last_error($this->hnd);
|
||||
if($errCode!=0)
|
||||
{
|
||||
//Connection reset by peer
|
||||
if($errCode==104)
|
||||
$this->bConnected = false;
|
||||
$errMsg = socket_strerror($errCode);
|
||||
$this->sSocErr = "(".$errCode.")(".$errMsg.")";
|
||||
socket_clear_error($this->hnd);
|
||||
}
|
||||
elseif (strlen($msg))
|
||||
{
|
||||
$this->sSocErr = $errMsg;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function INISocket($host)
|
||||
{
|
||||
$this->family = AF_INET;
|
||||
$this->type = SOCK_STREAM;
|
||||
$this->protocol = SOL_TCP;
|
||||
$this->hnd = @socket_create($this->family,$this->type,$this->protocol);
|
||||
$this->error();
|
||||
$this->sBuffer = false;
|
||||
$this->ip = null;
|
||||
$this->host = $host;
|
||||
$this->port = PG_PORT;
|
||||
}
|
||||
|
||||
function DNSLookUP()
|
||||
{
|
||||
$starttime=GetMicroTime();
|
||||
$ip = @gethostbyname($this->host);
|
||||
if($ip)
|
||||
{
|
||||
$this->ip = $ip;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error("Hostname ".$this->host." could not be resolved");
|
||||
return DNS_LOOKUP_ERR;
|
||||
}
|
||||
|
||||
$this->dns_laptime=round(GetMicroTime()-$starttime, 3);
|
||||
if( $this->dns_laptime > DNS_LOOKUP_TIMEOUT )
|
||||
return DNS_LOOKUP_TIMEOUT_ERR;
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
function open()
|
||||
{
|
||||
//Connect timeout Trickkkkkkkkk ##2. NONBLOCKING NEED , less CPU clocking!!^^
|
||||
//modified by ddaemiri, 2007.08.30
|
||||
|
||||
socket_set_nonblock($this->hnd);
|
||||
if (!@socket_connect($this->hnd, $this->ip, $this->port))
|
||||
{
|
||||
$err = socket_last_error($this->hnd);
|
||||
$err_str = socket_strerror($err);
|
||||
if ($err == 106) //EISCONN
|
||||
{
|
||||
$this->bConnected = true;
|
||||
socket_set_block($this->hnd);
|
||||
return OK;
|
||||
}
|
||||
//EINPROGRESS( Linux:115, Window Socket:10035, FreeBSD4.10:36, <20><><EFBFBD><EFBFBD> OS üũ <20>Ұ<EFBFBD><D2B0><EFBFBD><EFBFBD>ؼ<EFBFBD> str<74><72><EFBFBD>ε<EFBFBD> <20>˻<EFBFBD> )
|
||||
if ($err != ERRCODE_INPROGRESS_LINUX && $err != ERRCODE_INPROGRESS_WIN &&
|
||||
$err != ERRCODE_INPROGRESS_FREEBSD && $err_str != ERRSTR_INPROGRESS )
|
||||
{
|
||||
$this->error();
|
||||
socket_close($this->hnd);
|
||||
return SOCK_CONN_ERR;
|
||||
}
|
||||
function error($msg = null) {
|
||||
$errCode = socket_last_error($this->hnd);
|
||||
if ($errCode != 0) {
|
||||
//Connection reset by peer
|
||||
if ($errCode == 104)
|
||||
$this->bConnected = false;
|
||||
$errMsg = socket_strerror($errCode);
|
||||
$this->sSocErr = "(" . $errCode . ")(" . $errMsg . ")";
|
||||
socket_clear_error($this->hnd);
|
||||
}
|
||||
elseif (strlen($msg)) {
|
||||
$this->sSocErr = $errMsg;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
$read = array($this->hnd);
|
||||
$write = array($this->hnd);
|
||||
$rtv = @socket_select($read,$write,$except=NULL,TIMEOUT_CONNECT);
|
||||
if( $rtv == 0 ) //TIMEOUT
|
||||
{
|
||||
$this->error();
|
||||
socket_close($this->hnd);
|
||||
return SOCK_TIMEO_ERR;
|
||||
function INISocket($host) {
|
||||
$this->family = AF_INET;
|
||||
$this->type = SOCK_STREAM;
|
||||
$this->protocol = SOL_TCP;
|
||||
$this->hnd = @socket_create($this->family, $this->type, $this->protocol);
|
||||
$this->error();
|
||||
$this->sBuffer = false;
|
||||
$this->ip = null;
|
||||
$this->host = $host;
|
||||
$this->port = PG_PORT;
|
||||
}
|
||||
else if ( $rtv === FALSE )
|
||||
{
|
||||
$this->error();
|
||||
socket_close($this->hnd);
|
||||
return SOCK_ETC1_ERR;
|
||||
|
||||
function DNSLookUP() {
|
||||
$starttime = GetMicroTime();
|
||||
$ip = @gethostbyname($this->host);
|
||||
if ($ip) {
|
||||
$this->ip = $ip;
|
||||
} else {
|
||||
$this->error("Hostname " . $this->host . " could not be resolved");
|
||||
return DNS_LOOKUP_ERR;
|
||||
}
|
||||
|
||||
$this->dns_laptime = round(GetMicroTime() - $starttime, 3);
|
||||
if ($this->dns_laptime > DNS_LOOKUP_TIMEOUT)
|
||||
return DNS_LOOKUP_TIMEOUT_ERR;
|
||||
|
||||
return OK;
|
||||
}
|
||||
if( in_array($this->hnd,$read) || in_array($this->hnd,$write))
|
||||
{
|
||||
if(@socket_get_option($this->hnd, SOL_SOCKET, SO_ERROR) === FALSE)
|
||||
{
|
||||
$this->error();
|
||||
socket_close($this->hnd);
|
||||
return SOCK_ETC2_ERR;
|
||||
}
|
||||
}
|
||||
$this->bConnected = true;
|
||||
socket_set_block($this->hnd);
|
||||
return OK;
|
||||
}
|
||||
function close()
|
||||
{
|
||||
//if(!$this->bConnected) return;
|
||||
@socket_shutdown($this->hnd,2);
|
||||
@socket_close($this->hnd);
|
||||
}
|
||||
|
||||
function send($sBuf)
|
||||
{
|
||||
if(!$this->bConnected)
|
||||
{
|
||||
$this->error("Socket error. Cannot send data on a closed socket.");
|
||||
return SOCK_SEND1_ERR;
|
||||
}
|
||||
function open() {
|
||||
//Connect timeout Trickkkkkkkkk ##2. NONBLOCKING NEED , less CPU clocking!!^^
|
||||
//modified by ddaemiri, 2007.08.30
|
||||
|
||||
$vWrite = array($this->hnd);
|
||||
socket_set_nonblock($this->hnd);
|
||||
if (!@socket_connect($this->hnd, $this->ip, $this->port)) {
|
||||
$err = socket_last_error($this->hnd);
|
||||
$err_str = socket_strerror($err);
|
||||
if ($err == 106) { //EISCONN
|
||||
$this->bConnected = true;
|
||||
socket_set_block($this->hnd);
|
||||
return OK;
|
||||
}
|
||||
//EINPROGRESS( Linux:115, Window Socket:10035, FreeBSD4.10:36, 모든 OS 체크 불가능해서 str으로도 검색 )
|
||||
if ($err != ERRCODE_INPROGRESS_LINUX && $err != ERRCODE_INPROGRESS_WIN &&
|
||||
$err != ERRCODE_INPROGRESS_FREEBSD && $err_str != ERRSTR_INPROGRESS) {
|
||||
$this->error();
|
||||
socket_close($this->hnd);
|
||||
return SOCK_CONN_ERR;
|
||||
}
|
||||
}
|
||||
|
||||
while(($rtv = @socket_select($vRead = null,$vWrite ,$vExcept = null, TIMEOUT_WRITE)) === FALSE);
|
||||
$read = array($this->hnd);
|
||||
$write = array($this->hnd);
|
||||
$rtv = @socket_select($read, $write, $except = NULL, TIMEOUT_CONNECT);
|
||||
if ($rtv == 0) { //TIMEOUT
|
||||
$this->error();
|
||||
socket_close($this->hnd);
|
||||
return SOCK_TIMEO_ERR;
|
||||
} else if ($rtv === FALSE) {
|
||||
$this->error();
|
||||
socket_close($this->hnd);
|
||||
return SOCK_ETC1_ERR;
|
||||
}
|
||||
if (in_array($this->hnd, $read) || in_array($this->hnd, $write)) {
|
||||
if (@socket_get_option($this->hnd, SOL_SOCKET, SO_ERROR) === FALSE) {
|
||||
$this->error();
|
||||
socket_close($this->hnd);
|
||||
return SOCK_ETC2_ERR;
|
||||
}
|
||||
}
|
||||
$this->bConnected = true;
|
||||
socket_set_block($this->hnd);
|
||||
return OK;
|
||||
}
|
||||
|
||||
if( $rtv == 0 )
|
||||
{
|
||||
$this->error();
|
||||
//return SOCK_TIMEO_ERR;
|
||||
return SOCK_CONN_ERR; //modify 2008.04.01
|
||||
}
|
||||
if( $rtv === FALSE )
|
||||
{
|
||||
$this->error();
|
||||
return SOCK_SEND2_ERR;
|
||||
}
|
||||
function close() {
|
||||
//if(!$this->bConnected) return;
|
||||
@socket_shutdown($this->hnd, 2);
|
||||
@socket_close($this->hnd);
|
||||
}
|
||||
|
||||
$tmpBuf = strlen($sBuf) ? $sBuf : $this->sBuffer;
|
||||
$iBufLen = strlen($tmpBuf);
|
||||
$res = @socket_send($this->hnd,$tmpBuf,$iBufLen,0);
|
||||
function send($sBuf) {
|
||||
if (!$this->bConnected) {
|
||||
$this->error("Socket error. Cannot send data on a closed socket.");
|
||||
return SOCK_SEND1_ERR;
|
||||
}
|
||||
|
||||
if($res === FALSE)
|
||||
{
|
||||
$this->error();
|
||||
return SOCK_SEND2_ERR;
|
||||
}
|
||||
elseif ($res < $iBufLen)
|
||||
{
|
||||
$tmpBuf = substr($tmpBuf,$res);
|
||||
$this->send($tmpBuf);
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
function WaitRecv( &$recv_buf, $nleft )
|
||||
{
|
||||
$recv_buf = null;
|
||||
$read = array($this->hnd);
|
||||
$buf = null;
|
||||
while( $nleft > 0 )
|
||||
{
|
||||
$rtv = @socket_select($read,$write=NULL,$except=NULL,TIMEOUT_READ);
|
||||
if( $rtv == 0 )
|
||||
{
|
||||
$this->error();
|
||||
return SOCK_TIMEO_ERR;
|
||||
}
|
||||
else if ( $rtv === FALSE )
|
||||
{
|
||||
$this->error();
|
||||
return SOCK_ETC1_ERR;
|
||||
}
|
||||
$vWrite = array($this->hnd);
|
||||
|
||||
if(!in_array($this->hnd,$read))
|
||||
{
|
||||
$this->error();
|
||||
return SOCK_RECV1_ERR;
|
||||
}
|
||||
if($buf = @socket_read($this->hnd, $nleft))
|
||||
{
|
||||
$recv_buf .= $buf;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error();
|
||||
return SOCK_RECV1_ERR;
|
||||
}
|
||||
$nleft -= strlen( $buf );
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
function recv(&$head, &$body, &$tail)
|
||||
{
|
||||
if(!$this->bConnected)
|
||||
{
|
||||
$this->error("Socket error. Cannot read any data on a closed socket.");
|
||||
return SOCK_RECV1_ERR;
|
||||
}
|
||||
while (($rtv = @socket_select($vRead = null, $vWrite, $vExcept = null, TIMEOUT_WRITE)) === FALSE);
|
||||
|
||||
//------------------------------------------------------
|
||||
//head
|
||||
//------------------------------------------------------
|
||||
if( ($rtv = $this->WaitRecv( $head, MSGHEADER_LEN)) != OK ) return $rtv;
|
||||
if ($rtv == 0) {
|
||||
$this->error();
|
||||
//return SOCK_TIMEO_ERR;
|
||||
return SOCK_CONN_ERR; //modify 2008.04.01
|
||||
}
|
||||
if ($rtv === FALSE) {
|
||||
$this->error();
|
||||
return SOCK_SEND2_ERR;
|
||||
}
|
||||
|
||||
if( $head == "" ) return SOCK_RECV2_ERR;
|
||||
$body_len = intval(substr( $head, 0, BODY_LEN ));
|
||||
$tail_len = intval(substr( $head, BODY_LEN, TAIL_LEN ));
|
||||
|
||||
//------------------------------------------------------
|
||||
//body
|
||||
//------------------------------------------------------
|
||||
if( ($rtv = $this->WaitRecv( $body, $body_len)) != OK ) return $rtv;
|
||||
|
||||
//------------------------------------------------------
|
||||
//tail
|
||||
//------------------------------------------------------
|
||||
if( ($rtv = $this->WaitRecv( $tail, $tail_len)) != OK ) return $rtv;
|
||||
$tmpBuf = strlen($sBuf) ? $sBuf : $this->sBuffer;
|
||||
$iBufLen = strlen($tmpBuf);
|
||||
$res = @socket_send($this->hnd, $tmpBuf, $iBufLen, 0);
|
||||
|
||||
return OK;
|
||||
}
|
||||
function getErr()
|
||||
{
|
||||
return $this->sSocErr;
|
||||
}
|
||||
if ($res === FALSE) {
|
||||
$this->error();
|
||||
return SOCK_SEND2_ERR;
|
||||
} elseif ($res < $iBufLen) {
|
||||
$tmpBuf = substr($tmpBuf, $res);
|
||||
$this->send($tmpBuf);
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
function WaitRecv(&$recv_buf, $nleft) {
|
||||
$recv_buf = null;
|
||||
$read = array($this->hnd);
|
||||
$buf = null;
|
||||
while ($nleft > 0) {
|
||||
$rtv = @socket_select($read, $write = NULL, $except = NULL, TIMEOUT_READ);
|
||||
if ($rtv == 0) {
|
||||
$this->error();
|
||||
return SOCK_TIMEO_ERR;
|
||||
} else if ($rtv === FALSE) {
|
||||
$this->error();
|
||||
return SOCK_ETC1_ERR;
|
||||
}
|
||||
|
||||
if (!in_array($this->hnd, $read)) {
|
||||
$this->error();
|
||||
return SOCK_RECV1_ERR;
|
||||
}
|
||||
if ($buf = @socket_read($this->hnd, $nleft)) {
|
||||
$recv_buf .= $buf;
|
||||
} else {
|
||||
$this->error();
|
||||
return SOCK_RECV1_ERR;
|
||||
}
|
||||
$nleft -= strlen($buf);
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
function recv(&$head, &$body, &$tail) {
|
||||
if (!$this->bConnected) {
|
||||
$this->error("Socket error. Cannot read any data on a closed socket.");
|
||||
return SOCK_RECV1_ERR;
|
||||
}
|
||||
|
||||
//------------------------------------------------------
|
||||
//head
|
||||
//------------------------------------------------------
|
||||
if (($rtv = $this->WaitRecv($head, MSGHEADER_LEN)) != OK)
|
||||
return $rtv;
|
||||
|
||||
if ($head == "")
|
||||
return SOCK_RECV2_ERR;
|
||||
$body_len = intval(substr($head, 0, BODY_LEN));
|
||||
$tail_len = intval(substr($head, BODY_LEN, TAIL_LEN));
|
||||
|
||||
//------------------------------------------------------
|
||||
//body
|
||||
//------------------------------------------------------
|
||||
if (($rtv = $this->WaitRecv($body, $body_len)) != OK)
|
||||
return $rtv;
|
||||
|
||||
//------------------------------------------------------
|
||||
//tail
|
||||
//------------------------------------------------------
|
||||
if (($rtv = $this->WaitRecv($tail, $tail_len)) != OK)
|
||||
return $rtv;
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
function getErr() {
|
||||
return $this->sSocErr;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
|
||||
74
shop/inicis/libs/INIStdPayUtil.php
Normal file
74
shop/inicis/libs/INIStdPayUtil.php
Normal file
@ -0,0 +1,74 @@
|
||||
|
||||
|
||||
<?php
|
||||
|
||||
class INIStdPayUtil {
|
||||
|
||||
function getTimestamp() {
|
||||
// timezone 을 설정하지 않으면 getTimestapme() 실행시 오류가 발생한다.
|
||||
// php.ini 에 timezone 설정이 되어 잇으면 아래 코드가 필요없다.
|
||||
// php 5.3 이후로는 반드시 timezone 설정을 해야하기 때문에 아래 코드가 필요없을 수 있음. 나중에 확인 후 수정필요.
|
||||
// 이니시스 플로우에서 timestamp 값이 중요하게 사용되는 것으로 보이기 때문에 정확한 timezone 설정후 timestamp 값이 필요하지 않을까 함.
|
||||
|
||||
/**********php5
|
||||
date_default_timezone_set('Asia/Seoul');
|
||||
$date = new DateTime();
|
||||
*/
|
||||
|
||||
putenv('TZ=Asia/Seoul');
|
||||
|
||||
$milliseconds = round(microtime(true) * 1000);
|
||||
$tempValue1 = round($milliseconds / 1000); //max integer 자릿수가 9이므로 뒤 3자리를 뺀다
|
||||
$tempValue2 = round(microtime(false) * 1000); //뒤 3자리를 저장
|
||||
switch (strlen($tempValue2)) {
|
||||
case '3':
|
||||
break;
|
||||
case '2':
|
||||
$tempValue2 = "0" . $tempValue2;
|
||||
break;
|
||||
case '1':
|
||||
$tempValue2 = "00" . $tempValue2;
|
||||
break;
|
||||
default:
|
||||
$tempValue2 = "000";
|
||||
break;
|
||||
}
|
||||
|
||||
return "" . $tempValue1 . $tempValue2;
|
||||
}
|
||||
|
||||
/*
|
||||
//*** 위변조 방지체크를 signature 생성 ***
|
||||
|
||||
mid, price, timestamp 3개의 키와 값을
|
||||
key=value 형식으로 하여 '&'로 연결한 하여 SHA-256 Hash로 생성 된값
|
||||
ex) mid=INIpayTest&price=819000×tamp=2012-02-01 09:19:04.004
|
||||
|
||||
* key기준 알파벳 정렬
|
||||
* timestamp는 반드시 signature생성에 사용한 timestamp 값을 timestamp input에 그데로 사용하여야함
|
||||
*/
|
||||
|
||||
function makeSignature($signParam) {
|
||||
ksort($signParam);
|
||||
$string = "";
|
||||
foreach ($signParam as $key => $value) {
|
||||
$string .= "&$key=$value";
|
||||
}
|
||||
$string = substr($string, 1); // remove leading "&"
|
||||
|
||||
$sign = hash( "sha256", $string);
|
||||
|
||||
return $sign;
|
||||
}
|
||||
|
||||
function makeHash($data, $alg) {
|
||||
// $s = hash_hmac('sha256', $data, 'secret', true);
|
||||
// return base64_encode($s);
|
||||
|
||||
///$ret = openssl_digest($data, $alg);
|
||||
$ret = hash($alg, $data);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
File diff suppressed because it is too large
Load Diff
15
shop/inicis/libs/INIpayStdMakeSignature.php
Normal file
15
shop/inicis/libs/INIpayStdMakeSignature.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
require_once('../libs/INIStdPayUtil.php');
|
||||
|
||||
$SignatureUtil = new INIStdPayUtil();
|
||||
|
||||
$input = "oid=" . $_REQUEST["oid"] . "&price=" . $_REQUEST["price"] . "×tamp=" . $_REQUEST["timestamp"];
|
||||
|
||||
$output['signature'] = array(
|
||||
///'signature' => $SignatureUtil->makeHash($input, "sha256")
|
||||
'signature' => hash("sha256", $input)
|
||||
);
|
||||
|
||||
echo json_encode($output);
|
||||
?>
|
||||
806
shop/inicis/libs/JSON.php
Normal file
806
shop/inicis/libs/JSON.php
Normal file
@ -0,0 +1,806 @@
|
||||
<?php
|
||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||
|
||||
/**
|
||||
* Converts to and from JSON format.
|
||||
*
|
||||
* JSON (JavaScript Object Notation) is a lightweight data-interchange
|
||||
* format. It is easy for humans to read and write. It is easy for machines
|
||||
* to parse and generate. It is based on a subset of the JavaScript
|
||||
* Programming Language, Standard ECMA-262 3rd Edition - December 1999.
|
||||
* This feature can also be found in Python. JSON is a text format that is
|
||||
* completely language independent but uses conventions that are familiar
|
||||
* to programmers of the C-family of languages, including C, C++, C#, Java,
|
||||
* JavaScript, Perl, TCL, and many others. These properties make JSON an
|
||||
* ideal data-interchange language.
|
||||
*
|
||||
* This package provides a simple encoder and decoder for JSON notation. It
|
||||
* is intended for use with client-side Javascript applications that make
|
||||
* use of HTTPRequest to perform server communication functions - data can
|
||||
* be encoded into JSON notation for use in a client-side javascript, or
|
||||
* decoded from incoming Javascript requests. JSON format is native to
|
||||
* Javascript, and can be directly eval()'ed with no further parsing
|
||||
* overhead
|
||||
*
|
||||
* All strings should be in ASCII or UTF-8 format!
|
||||
*
|
||||
* LICENSE: Redistribution and use in source and binary forms, with or
|
||||
* without modification, are permitted provided that the following
|
||||
* conditions are met: Redistributions of source code must retain the
|
||||
* above copyright notice, this list of conditions and the following
|
||||
* disclaimer. Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
||||
* NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
* DAMAGE.
|
||||
*
|
||||
* @category
|
||||
* @package Services_JSON
|
||||
* @author Michal Migurski <mike-json@teczno.com>
|
||||
* @author Matt Knapp <mdknapp[at]gmail[dot]com>
|
||||
* @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
|
||||
* @copyright 2005 Michal Migurski
|
||||
* @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $
|
||||
* @license http://www.opensource.org/licenses/bsd-license.php
|
||||
* @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
|
||||
*/
|
||||
|
||||
/**
|
||||
* Marker constant for Services_JSON::decode(), used to flag stack state
|
||||
*/
|
||||
define('SERVICES_JSON_SLICE', 1);
|
||||
|
||||
/**
|
||||
* Marker constant for Services_JSON::decode(), used to flag stack state
|
||||
*/
|
||||
define('SERVICES_JSON_IN_STR', 2);
|
||||
|
||||
/**
|
||||
* Marker constant for Services_JSON::decode(), used to flag stack state
|
||||
*/
|
||||
define('SERVICES_JSON_IN_ARR', 3);
|
||||
|
||||
/**
|
||||
* Marker constant for Services_JSON::decode(), used to flag stack state
|
||||
*/
|
||||
define('SERVICES_JSON_IN_OBJ', 4);
|
||||
|
||||
/**
|
||||
* Marker constant for Services_JSON::decode(), used to flag stack state
|
||||
*/
|
||||
define('SERVICES_JSON_IN_CMT', 5);
|
||||
|
||||
/**
|
||||
* Behavior switch for Services_JSON::decode()
|
||||
*/
|
||||
define('SERVICES_JSON_LOOSE_TYPE', 16);
|
||||
|
||||
/**
|
||||
* Behavior switch for Services_JSON::decode()
|
||||
*/
|
||||
define('SERVICES_JSON_SUPPRESS_ERRORS', 32);
|
||||
|
||||
/**
|
||||
* Converts to and from JSON format.
|
||||
*
|
||||
* Brief example of use:
|
||||
*
|
||||
* <code>
|
||||
* // create a new instance of Services_JSON
|
||||
* $json = new Services_JSON();
|
||||
*
|
||||
* // convert a complexe value to JSON notation, and send it to the browser
|
||||
* $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
|
||||
* $output = $json->encode($value);
|
||||
*
|
||||
* print($output);
|
||||
* // prints: ["foo","bar",[1,2,"baz"],[3,[4]]]
|
||||
*
|
||||
* // accept incoming POST data, assumed to be in JSON notation
|
||||
* $input = file_get_contents('php://input', 1000000);
|
||||
* $value = $json->decode($input);
|
||||
* </code>
|
||||
*/
|
||||
class Services_JSON
|
||||
{
|
||||
/**
|
||||
* constructs a new JSON instance
|
||||
*
|
||||
* @param int $use object behavior flags; combine with boolean-OR
|
||||
*
|
||||
* possible values:
|
||||
* - SERVICES_JSON_LOOSE_TYPE: loose typing.
|
||||
* "{...}" syntax creates associative arrays
|
||||
* instead of objects in decode().
|
||||
* - SERVICES_JSON_SUPPRESS_ERRORS: error suppression.
|
||||
* Values which can't be encoded (e.g. resources)
|
||||
* appear as NULL instead of throwing errors.
|
||||
* By default, a deeply-nested resource will
|
||||
* bubble up with an error, so all return values
|
||||
* from encode() should be checked with isError()
|
||||
*/
|
||||
function Services_JSON($use = 0)
|
||||
{
|
||||
$this->use = $use;
|
||||
}
|
||||
|
||||
/**
|
||||
* convert a string from one UTF-16 char to one UTF-8 char
|
||||
*
|
||||
* Normally should be handled by mb_convert_encoding, but
|
||||
* provides a slower PHP-only method for installations
|
||||
* that lack the multibye string extension.
|
||||
*
|
||||
* @param string $utf16 UTF-16 character
|
||||
* @return string UTF-8 character
|
||||
* @access private
|
||||
*/
|
||||
function utf162utf8($utf16)
|
||||
{
|
||||
// oh please oh please oh please oh please oh please
|
||||
if(function_exists('mb_convert_encoding')) {
|
||||
return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
|
||||
}
|
||||
|
||||
$bytes = (ord($utf16{0}) << 8) | ord($utf16{1});
|
||||
|
||||
switch(true) {
|
||||
case ((0x7F & $bytes) == $bytes):
|
||||
// this case should never be reached, because we are in ASCII range
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return chr(0x7F & $bytes);
|
||||
|
||||
case (0x07FF & $bytes) == $bytes:
|
||||
// return a 2-byte UTF-8 character
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return chr(0xC0 | (($bytes >> 6) & 0x1F))
|
||||
. chr(0x80 | ($bytes & 0x3F));
|
||||
|
||||
case (0xFFFF & $bytes) == $bytes:
|
||||
// return a 3-byte UTF-8 character
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return chr(0xE0 | (($bytes >> 12) & 0x0F))
|
||||
. chr(0x80 | (($bytes >> 6) & 0x3F))
|
||||
. chr(0x80 | ($bytes & 0x3F));
|
||||
}
|
||||
|
||||
// ignoring UTF-32 for now, sorry
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* convert a string from one UTF-8 char to one UTF-16 char
|
||||
*
|
||||
* Normally should be handled by mb_convert_encoding, but
|
||||
* provides a slower PHP-only method for installations
|
||||
* that lack the multibye string extension.
|
||||
*
|
||||
* @param string $utf8 UTF-8 character
|
||||
* @return string UTF-16 character
|
||||
* @access private
|
||||
*/
|
||||
function utf82utf16($utf8)
|
||||
{
|
||||
// oh please oh please oh please oh please oh please
|
||||
if(function_exists('mb_convert_encoding')) {
|
||||
return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
|
||||
}
|
||||
|
||||
switch(strlen($utf8)) {
|
||||
case 1:
|
||||
// this case should never be reached, because we are in ASCII range
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return $utf8;
|
||||
|
||||
case 2:
|
||||
// return a UTF-16 character from a 2-byte UTF-8 char
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return chr(0x07 & (ord($utf8{0}) >> 2))
|
||||
. chr((0xC0 & (ord($utf8{0}) << 6))
|
||||
| (0x3F & ord($utf8{1})));
|
||||
|
||||
case 3:
|
||||
// return a UTF-16 character from a 3-byte UTF-8 char
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return chr((0xF0 & (ord($utf8{0}) << 4))
|
||||
| (0x0F & (ord($utf8{1}) >> 2)))
|
||||
. chr((0xC0 & (ord($utf8{1}) << 6))
|
||||
| (0x7F & ord($utf8{2})));
|
||||
}
|
||||
|
||||
// ignoring UTF-32 for now, sorry
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* encodes an arbitrary variable into JSON format
|
||||
*
|
||||
* @param mixed $var any number, boolean, string, array, or object to be encoded.
|
||||
* see argument 1 to Services_JSON() above for array-parsing behavior.
|
||||
* if var is a strng, note that encode() always expects it
|
||||
* to be in ASCII or UTF-8 format!
|
||||
*
|
||||
* @return mixed JSON string representation of input var or an error if a problem occurs
|
||||
* @access public
|
||||
*/
|
||||
function encode($var)
|
||||
{
|
||||
switch (gettype($var)) {
|
||||
case 'boolean':
|
||||
return $var ? 'true' : 'false';
|
||||
|
||||
case 'NULL':
|
||||
return 'null';
|
||||
|
||||
case 'integer':
|
||||
return (int) $var;
|
||||
|
||||
case 'double':
|
||||
case 'float':
|
||||
return (float) $var;
|
||||
|
||||
case 'string':
|
||||
// STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
|
||||
$ascii = '';
|
||||
$strlen_var = strlen($var);
|
||||
|
||||
/*
|
||||
* Iterate over every character in the string,
|
||||
* escaping with a slash or encoding to UTF-8 where necessary
|
||||
*/
|
||||
for ($c = 0; $c < $strlen_var; ++$c) {
|
||||
|
||||
$ord_var_c = ord($var{$c});
|
||||
|
||||
switch (true) {
|
||||
case $ord_var_c == 0x08:
|
||||
$ascii .= '\b';
|
||||
break;
|
||||
case $ord_var_c == 0x09:
|
||||
$ascii .= '\t';
|
||||
break;
|
||||
case $ord_var_c == 0x0A:
|
||||
$ascii .= '\n';
|
||||
break;
|
||||
case $ord_var_c == 0x0C:
|
||||
$ascii .= '\f';
|
||||
break;
|
||||
case $ord_var_c == 0x0D:
|
||||
$ascii .= '\r';
|
||||
break;
|
||||
|
||||
case $ord_var_c == 0x22:
|
||||
case $ord_var_c == 0x2F:
|
||||
case $ord_var_c == 0x5C:
|
||||
// double quote, slash, slosh
|
||||
$ascii .= '\\'.$var{$c};
|
||||
break;
|
||||
|
||||
case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
|
||||
// characters U-00000000 - U-0000007F (same as ASCII)
|
||||
$ascii .= $var{$c};
|
||||
break;
|
||||
|
||||
case (($ord_var_c & 0xE0) == 0xC0):
|
||||
// characters U-00000080 - U-000007FF, mask 110XXXXX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$char = pack('C*', $ord_var_c, ord($var{$c + 1}));
|
||||
$c += 1;
|
||||
$utf16 = $this->utf82utf16($char);
|
||||
$ascii .= sprintf('\u%04s', bin2hex($utf16));
|
||||
break;
|
||||
|
||||
case (($ord_var_c & 0xF0) == 0xE0):
|
||||
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$char = pack('C*', $ord_var_c,
|
||||
ord($var{$c + 1}),
|
||||
ord($var{$c + 2}));
|
||||
$c += 2;
|
||||
$utf16 = $this->utf82utf16($char);
|
||||
$ascii .= sprintf('\u%04s', bin2hex($utf16));
|
||||
break;
|
||||
|
||||
case (($ord_var_c & 0xF8) == 0xF0):
|
||||
// characters U-00010000 - U-001FFFFF, mask 11110XXX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$char = pack('C*', $ord_var_c,
|
||||
ord($var{$c + 1}),
|
||||
ord($var{$c + 2}),
|
||||
ord($var{$c + 3}));
|
||||
$c += 3;
|
||||
$utf16 = $this->utf82utf16($char);
|
||||
$ascii .= sprintf('\u%04s', bin2hex($utf16));
|
||||
break;
|
||||
|
||||
case (($ord_var_c & 0xFC) == 0xF8):
|
||||
// characters U-00200000 - U-03FFFFFF, mask 111110XX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$char = pack('C*', $ord_var_c,
|
||||
ord($var{$c + 1}),
|
||||
ord($var{$c + 2}),
|
||||
ord($var{$c + 3}),
|
||||
ord($var{$c + 4}));
|
||||
$c += 4;
|
||||
$utf16 = $this->utf82utf16($char);
|
||||
$ascii .= sprintf('\u%04s', bin2hex($utf16));
|
||||
break;
|
||||
|
||||
case (($ord_var_c & 0xFE) == 0xFC):
|
||||
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$char = pack('C*', $ord_var_c,
|
||||
ord($var{$c + 1}),
|
||||
ord($var{$c + 2}),
|
||||
ord($var{$c + 3}),
|
||||
ord($var{$c + 4}),
|
||||
ord($var{$c + 5}));
|
||||
$c += 5;
|
||||
$utf16 = $this->utf82utf16($char);
|
||||
$ascii .= sprintf('\u%04s', bin2hex($utf16));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return '"'.$ascii.'"';
|
||||
|
||||
case 'array':
|
||||
/*
|
||||
* As per JSON spec if any array key is not an integer
|
||||
* we must treat the the whole array as an object. We
|
||||
* also try to catch a sparsely populated associative
|
||||
* array with numeric keys here because some JS engines
|
||||
* will create an array with empty indexes up to
|
||||
* max_index which can cause memory issues and because
|
||||
* the keys, which may be relevant, will be remapped
|
||||
* otherwise.
|
||||
*
|
||||
* As per the ECMA and JSON specification an object may
|
||||
* have any string as a property. Unfortunately due to
|
||||
* a hole in the ECMA specification if the key is a
|
||||
* ECMA reserved word or starts with a digit the
|
||||
* parameter is only accessible using ECMAScript's
|
||||
* bracket notation.
|
||||
*/
|
||||
|
||||
// treat as a JSON object
|
||||
if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
|
||||
$properties = array_map(array($this, 'name_value'),
|
||||
array_keys($var),
|
||||
array_values($var));
|
||||
|
||||
foreach($properties as $property) {
|
||||
if(Services_JSON::isError($property)) {
|
||||
return $property;
|
||||
}
|
||||
}
|
||||
|
||||
return '{' . join(',', $properties) . '}';
|
||||
}
|
||||
|
||||
// treat it like a regular array
|
||||
$elements = array_map(array($this, 'encode'), $var);
|
||||
|
||||
foreach($elements as $element) {
|
||||
if(Services_JSON::isError($element)) {
|
||||
return $element;
|
||||
}
|
||||
}
|
||||
|
||||
return '[' . join(',', $elements) . ']';
|
||||
|
||||
case 'object':
|
||||
$vars = get_object_vars($var);
|
||||
|
||||
$properties = array_map(array($this, 'name_value'),
|
||||
array_keys($vars),
|
||||
array_values($vars));
|
||||
|
||||
foreach($properties as $property) {
|
||||
if(Services_JSON::isError($property)) {
|
||||
return $property;
|
||||
}
|
||||
}
|
||||
|
||||
return '{' . join(',', $properties) . '}';
|
||||
|
||||
default:
|
||||
return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS)
|
||||
? 'null'
|
||||
: new Services_JSON_Error(gettype($var)." can not be encoded as JSON string");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* array-walking function for use in generating JSON-formatted name-value pairs
|
||||
*
|
||||
* @param string $name name of key to use
|
||||
* @param mixed $value reference to an array element to be encoded
|
||||
*
|
||||
* @return string JSON-formatted name-value pair, like '"name":value'
|
||||
* @access private
|
||||
*/
|
||||
function name_value($name, $value)
|
||||
{
|
||||
$encoded_value = $this->encode($value);
|
||||
|
||||
if(Services_JSON::isError($encoded_value)) {
|
||||
return $encoded_value;
|
||||
}
|
||||
|
||||
return $this->encode(strval($name)) . ':' . $encoded_value;
|
||||
}
|
||||
|
||||
/**
|
||||
* reduce a string by removing leading and trailing comments and whitespace
|
||||
*
|
||||
* @param $str string string value to strip of comments and whitespace
|
||||
*
|
||||
* @return string string value stripped of comments and whitespace
|
||||
* @access private
|
||||
*/
|
||||
function reduce_string($str)
|
||||
{
|
||||
$str = preg_replace(array(
|
||||
|
||||
// eliminate single line comments in '// ...' form
|
||||
'#^\s*//(.+)$#m',
|
||||
|
||||
// eliminate multi-line comments in '/* ... */' form, at start of string
|
||||
'#^\s*/\*(.+)\*/#Us',
|
||||
|
||||
// eliminate multi-line comments in '/* ... */' form, at end of string
|
||||
'#/\*(.+)\*/\s*$#Us'
|
||||
|
||||
), '', $str);
|
||||
|
||||
// eliminate extraneous space
|
||||
return trim($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* decodes a JSON string into appropriate variable
|
||||
*
|
||||
* @param string $str JSON-formatted string
|
||||
*
|
||||
* @return mixed number, boolean, string, array, or object
|
||||
* corresponding to given JSON input string.
|
||||
* See argument 1 to Services_JSON() above for object-output behavior.
|
||||
* Note that decode() always returns strings
|
||||
* in ASCII or UTF-8 format!
|
||||
* @access public
|
||||
*/
|
||||
function decode($str)
|
||||
{
|
||||
$str = $this->reduce_string($str);
|
||||
|
||||
switch (strtolower($str)) {
|
||||
case 'true':
|
||||
return true;
|
||||
|
||||
case 'false':
|
||||
return false;
|
||||
|
||||
case 'null':
|
||||
return null;
|
||||
|
||||
default:
|
||||
$m = array();
|
||||
|
||||
if (is_numeric($str)) {
|
||||
// Lookie-loo, it's a number
|
||||
|
||||
// This would work on its own, but I'm trying to be
|
||||
// good about returning integers where appropriate:
|
||||
// return (float)$str;
|
||||
|
||||
// Return float or int, as appropriate
|
||||
return ((float)$str == (integer)$str)
|
||||
? (integer)$str
|
||||
: (float)$str;
|
||||
|
||||
} elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) {
|
||||
// STRINGS RETURNED IN UTF-8 FORMAT
|
||||
$delim = substr($str, 0, 1);
|
||||
$chrs = substr($str, 1, -1);
|
||||
$utf8 = '';
|
||||
$strlen_chrs = strlen($chrs);
|
||||
|
||||
for ($c = 0; $c < $strlen_chrs; ++$c) {
|
||||
|
||||
$substr_chrs_c_2 = substr($chrs, $c, 2);
|
||||
$ord_chrs_c = ord($chrs{$c});
|
||||
|
||||
switch (true) {
|
||||
case $substr_chrs_c_2 == '\b':
|
||||
$utf8 .= chr(0x08);
|
||||
++$c;
|
||||
break;
|
||||
case $substr_chrs_c_2 == '\t':
|
||||
$utf8 .= chr(0x09);
|
||||
++$c;
|
||||
break;
|
||||
case $substr_chrs_c_2 == '\n':
|
||||
$utf8 .= chr(0x0A);
|
||||
++$c;
|
||||
break;
|
||||
case $substr_chrs_c_2 == '\f':
|
||||
$utf8 .= chr(0x0C);
|
||||
++$c;
|
||||
break;
|
||||
case $substr_chrs_c_2 == '\r':
|
||||
$utf8 .= chr(0x0D);
|
||||
++$c;
|
||||
break;
|
||||
|
||||
case $substr_chrs_c_2 == '\\"':
|
||||
case $substr_chrs_c_2 == '\\\'':
|
||||
case $substr_chrs_c_2 == '\\\\':
|
||||
case $substr_chrs_c_2 == '\\/':
|
||||
if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
|
||||
($delim == "'" && $substr_chrs_c_2 != '\\"')) {
|
||||
$utf8 .= $chrs{++$c};
|
||||
}
|
||||
break;
|
||||
|
||||
case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)):
|
||||
// single, escaped unicode character
|
||||
$utf16 = chr(hexdec(substr($chrs, ($c + 2), 2)))
|
||||
. chr(hexdec(substr($chrs, ($c + 4), 2)));
|
||||
$utf8 .= $this->utf162utf8($utf16);
|
||||
$c += 5;
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
|
||||
$utf8 .= $chrs{$c};
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c & 0xE0) == 0xC0:
|
||||
// characters U-00000080 - U-000007FF, mask 110XXXXX
|
||||
//see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$utf8 .= substr($chrs, $c, 2);
|
||||
++$c;
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c & 0xF0) == 0xE0:
|
||||
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$utf8 .= substr($chrs, $c, 3);
|
||||
$c += 2;
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c & 0xF8) == 0xF0:
|
||||
// characters U-00010000 - U-001FFFFF, mask 11110XXX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$utf8 .= substr($chrs, $c, 4);
|
||||
$c += 3;
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c & 0xFC) == 0xF8:
|
||||
// characters U-00200000 - U-03FFFFFF, mask 111110XX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$utf8 .= substr($chrs, $c, 5);
|
||||
$c += 4;
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c & 0xFE) == 0xFC:
|
||||
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$utf8 .= substr($chrs, $c, 6);
|
||||
$c += 5;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $utf8;
|
||||
|
||||
} elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
|
||||
// array, or object notation
|
||||
|
||||
if ($str{0} == '[') {
|
||||
$stk = array(SERVICES_JSON_IN_ARR);
|
||||
$arr = array();
|
||||
} else {
|
||||
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
|
||||
$stk = array(SERVICES_JSON_IN_OBJ);
|
||||
$obj = array();
|
||||
} else {
|
||||
$stk = array(SERVICES_JSON_IN_OBJ);
|
||||
$obj = new stdClass();
|
||||
}
|
||||
}
|
||||
|
||||
array_push($stk, array('what' => SERVICES_JSON_SLICE,
|
||||
'where' => 0,
|
||||
'delim' => false));
|
||||
|
||||
$chrs = substr($str, 1, -1);
|
||||
$chrs = $this->reduce_string($chrs);
|
||||
|
||||
if ($chrs == '') {
|
||||
if (reset($stk) == SERVICES_JSON_IN_ARR) {
|
||||
return $arr;
|
||||
|
||||
} else {
|
||||
return $obj;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//print("\nparsing {$chrs}\n");
|
||||
|
||||
$strlen_chrs = strlen($chrs);
|
||||
|
||||
for ($c = 0; $c <= $strlen_chrs; ++$c) {
|
||||
|
||||
$top = end($stk);
|
||||
$substr_chrs_c_2 = substr($chrs, $c, 2);
|
||||
|
||||
if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
|
||||
// found a comma that is not inside a string, array, etc.,
|
||||
// OR we've reached the end of the character list
|
||||
$slice = substr($chrs, $top['where'], ($c - $top['where']));
|
||||
array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
|
||||
//print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
|
||||
|
||||
if (reset($stk) == SERVICES_JSON_IN_ARR) {
|
||||
// we are in an array, so just push an element onto the stack
|
||||
array_push($arr, $this->decode($slice));
|
||||
|
||||
} elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
|
||||
// we are in an object, so figure
|
||||
// out the property name and set an
|
||||
// element in an associative array,
|
||||
// for now
|
||||
$parts = array();
|
||||
|
||||
if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
|
||||
// "name":value pair
|
||||
$key = $this->decode($parts[1]);
|
||||
$val = $this->decode($parts[2]);
|
||||
|
||||
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
|
||||
$obj[$key] = $val;
|
||||
} else {
|
||||
$obj->$key = $val;
|
||||
}
|
||||
} elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
|
||||
// name:value pair, where name is unquoted
|
||||
$key = $parts[1];
|
||||
$val = $this->decode($parts[2]);
|
||||
|
||||
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
|
||||
$obj[$key] = $val;
|
||||
} else {
|
||||
$obj->$key = $val;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
|
||||
// found a quote, and we are not inside a string
|
||||
array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
|
||||
//print("Found start of string at {$c}\n");
|
||||
|
||||
} elseif (($chrs{$c} == $top['delim']) &&
|
||||
($top['what'] == SERVICES_JSON_IN_STR) &&
|
||||
((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) {
|
||||
// found a quote, we're in a string, and it's not escaped
|
||||
// we know that it's not escaped becase there is _not_ an
|
||||
// odd number of backslashes at the end of the string so far
|
||||
array_pop($stk);
|
||||
//print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
|
||||
|
||||
} elseif (($chrs{$c} == '[') &&
|
||||
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
|
||||
// found a left-bracket, and we are in an array, object, or slice
|
||||
array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false));
|
||||
//print("Found start of array at {$c}\n");
|
||||
|
||||
} elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
|
||||
// found a right-bracket, and we're in an array
|
||||
array_pop($stk);
|
||||
//print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
|
||||
|
||||
} elseif (($chrs{$c} == '{') &&
|
||||
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
|
||||
// found a left-brace, and we are in an array, object, or slice
|
||||
array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false));
|
||||
//print("Found start of object at {$c}\n");
|
||||
|
||||
} elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
|
||||
// found a right-brace, and we're in an object
|
||||
array_pop($stk);
|
||||
//print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
|
||||
|
||||
} elseif (($substr_chrs_c_2 == '/*') &&
|
||||
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
|
||||
// found a comment start, and we are in an array, object, or slice
|
||||
array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false));
|
||||
$c++;
|
||||
//print("Found start of comment at {$c}\n");
|
||||
|
||||
} elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) {
|
||||
// found a comment end, and we're in one now
|
||||
array_pop($stk);
|
||||
$c++;
|
||||
|
||||
for ($i = $top['where']; $i <= $c; ++$i)
|
||||
$chrs = substr_replace($chrs, ' ', $i, 1);
|
||||
|
||||
//print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (reset($stk) == SERVICES_JSON_IN_ARR) {
|
||||
return $arr;
|
||||
|
||||
} elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
|
||||
return $obj;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo Ultimately, this should just call PEAR::isError()
|
||||
*/
|
||||
function isError($data, $code = null)
|
||||
{
|
||||
if (class_exists('pear')) {
|
||||
return PEAR::isError($data, $code);
|
||||
} elseif (is_object($data) && (get_class($data) == 'services_json_error' ||
|
||||
is_subclass_of($data, 'services_json_error'))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (class_exists('PEAR_Error')) {
|
||||
|
||||
class Services_JSON_Error extends PEAR_Error
|
||||
{
|
||||
function Services_JSON_Error($message = 'unknown error', $code = null,
|
||||
$mode = null, $options = null, $userinfo = null)
|
||||
{
|
||||
parent::PEAR_Error($message, $code, $mode, $options, $userinfo);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
/**
|
||||
* @todo Ultimately, this class shall be descended from PEAR_Error
|
||||
*/
|
||||
class Services_JSON_Error
|
||||
{
|
||||
function Services_JSON_Error($message = 'unknown error', $code = null,
|
||||
$mode = null, $options = null, $userinfo = null)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
30
shop/inicis/libs/json_lib.php
Normal file
30
shop/inicis/libs/json_lib.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2015-11-05
|
||||
* Time: 오후 2:59
|
||||
*/
|
||||
|
||||
if (!function_exists('json_decode')) {
|
||||
function json_decode($content, $assoc=false) {
|
||||
require_once 'JSON.php';
|
||||
if ($assoc) {
|
||||
$json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
|
||||
}
|
||||
else {
|
||||
$json = new Services_JSON;
|
||||
}
|
||||
return $json->decode($content);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('json_encode')) {
|
||||
function json_encode($content) {
|
||||
require_once 'JSON.php';
|
||||
$json = new Services_JSON;
|
||||
return $json->encode($content);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
414
shop/inicis/libs/sha256.inc.php
Normal file
414
shop/inicis/libs/sha256.inc.php
Normal file
@ -0,0 +1,414 @@
|
||||
<?php
|
||||
/*
|
||||
* Transparent SHA-256 Implementation for PHP 4 and PHP 5
|
||||
*
|
||||
* Author: Perry McGee (pmcgee@nanolink.ca)
|
||||
* Website: http://www.nanolink.ca/pub/sha256
|
||||
*
|
||||
* Copyright (C) 2006,2007,2008,2009 Nanolink Solutions
|
||||
*
|
||||
* Created: Feb 11, 2006
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Include:
|
||||
*
|
||||
* require_once("[path/]sha256.inc.php");
|
||||
*
|
||||
* Usage Options:
|
||||
*
|
||||
* 1) $shaStr = hash('sha256', $string_to_hash);
|
||||
*
|
||||
* 2) $shaStr = sha256($string_to_hash[, bool ignore_php5_hash = false]);
|
||||
*
|
||||
* 3) $obj = new nanoSha2([bool $upper_case_output = false]);
|
||||
* $shaStr = $obj->hash($string_to_hash[, bool $ignore_php5_hash = false]);
|
||||
*
|
||||
* Reference: http://csrc.nist.gov/groups/ST/toolkit/secure_hashing.html
|
||||
*
|
||||
* 2007-12-13: Cleaned up for initial public release
|
||||
* 2008-05-10: Moved all helper functions into a class. API access unchanged.
|
||||
* 2009-06-23: Created abstraction of hash() routine
|
||||
* 2009-07-23: Added detection of 32 vs 64bit platform, and patches.
|
||||
* Ability to define "_NANO_SHA2_UPPER" to yeild upper case hashes.
|
||||
* 2009-08-01: Added ability to attempt to use mhash() prior to running pure
|
||||
* php code.
|
||||
*
|
||||
* NOTE: Some sporadic versions of PHP do not handle integer overflows the
|
||||
* same as the majority of builds. If you get hash results of:
|
||||
* 7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff
|
||||
*
|
||||
* If you do not have permissions to change PHP versions (if you did
|
||||
* you'd probably upgrade to PHP 5 anyway) it is advised you install a
|
||||
* module that will allow you to use their hashing routines, examples are:
|
||||
* - mhash module : http://ca3.php.net/mhash
|
||||
* - Suhosin : http://www.hardened-php.net/suhosin/
|
||||
*
|
||||
* If you install the Suhosin module, this script will transparently
|
||||
* use their routine and define the PHP routine as _nano_sha256().
|
||||
*
|
||||
* If the mhash module is present, and $ignore_php5_hash = false the
|
||||
* script will attempt to use the output from mhash prior to running
|
||||
* the PHP code.
|
||||
*/
|
||||
if (!class_exists('nanoSha2'))
|
||||
{
|
||||
class nanoSha2
|
||||
{
|
||||
// php 4 - 5 compatable class properties
|
||||
var $toUpper;
|
||||
var $platform;
|
||||
|
||||
// Php 4 - 6 compatable constructor
|
||||
function nanoSha2($toUpper = false) {
|
||||
// Determine if the caller wants upper case or not.
|
||||
$this->toUpper = is_bool($toUpper)
|
||||
? $toUpper
|
||||
: ((defined('_NANO_SHA2_UPPER')) ? true : false);
|
||||
|
||||
// Deteremine if the system is 32 or 64 bit.
|
||||
$tmpInt = (int)4294967295;
|
||||
$this->platform = ($tmpInt > 0) ? 64 : 32;
|
||||
}
|
||||
|
||||
// Do the SHA-256 Padding routine (make input a multiple of 512 bits)
|
||||
function char_pad($str)
|
||||
{
|
||||
$tmpStr = $str;
|
||||
|
||||
$l = strlen($tmpStr)*8; // # of bits from input string
|
||||
|
||||
$tmpStr .= "\x80"; // append the "1" bit followed by 7 0's
|
||||
|
||||
$k = (512 - (($l + 8 + 64) % 512)) / 8; // # of 0 bytes to append
|
||||
$k += 4; // PHP Strings will never exceed (2^31)-1, 1st 32bits of
|
||||
// the 64-bit value representing $l can be all 0's
|
||||
|
||||
for ($x = 0; $x < $k; $x++) {
|
||||
$tmpStr .= "\0";
|
||||
}
|
||||
|
||||
// append the 32-bits representing # of bits from input string ($l)
|
||||
$tmpStr .= chr((($l>>24) & 0xFF));
|
||||
$tmpStr .= chr((($l>>16) & 0xFF));
|
||||
$tmpStr .= chr((($l>>8) & 0xFF));
|
||||
$tmpStr .= chr(($l & 0xFF));
|
||||
|
||||
return $tmpStr;
|
||||
}
|
||||
|
||||
// Here are the bitwise and functions as defined in FIPS180-2 Standard
|
||||
function addmod2n($x, $y, $n = 4294967296) // Z = (X + Y) mod 2^32
|
||||
{
|
||||
$mask = 0x80000000;
|
||||
|
||||
if ($x < 0) {
|
||||
$x &= 0x7FFFFFFF;
|
||||
$x = (float)$x + $mask;
|
||||
}
|
||||
|
||||
if ($y < 0) {
|
||||
$y &= 0x7FFFFFFF;
|
||||
$y = (float)$y + $mask;
|
||||
}
|
||||
|
||||
$r = $x + $y;
|
||||
|
||||
if ($r >= $n) {
|
||||
while ($r >= $n) {
|
||||
$r -= $n;
|
||||
}
|
||||
}
|
||||
|
||||
return (int)$r;
|
||||
}
|
||||
|
||||
// Logical bitwise right shift (PHP default is arithmetic shift)
|
||||
function SHR($x, $n) // x >> n
|
||||
{
|
||||
if ($n >= 32) { // impose some limits to keep it 32-bit
|
||||
return (int)0;
|
||||
}
|
||||
|
||||
if ($n <= 0) {
|
||||
return (int)$x;
|
||||
}
|
||||
|
||||
$mask = 0x40000000;
|
||||
|
||||
if ($x < 0) {
|
||||
$x &= 0x7FFFFFFF;
|
||||
$mask = $mask >> ($n-1);
|
||||
return ($x >> $n) | $mask;
|
||||
}
|
||||
|
||||
return (int)$x >> (int)$n;
|
||||
}
|
||||
|
||||
function ROTR($x, $n) { return (int)(($this->SHR($x, $n) | ($x << (32-$n)) & 0xFFFFFFFF)); }
|
||||
function Ch($x, $y, $z) { return ($x & $y) ^ ((~$x) & $z); }
|
||||
function Maj($x, $y, $z) { return ($x & $y) ^ ($x & $z) ^ ($y & $z); }
|
||||
function Sigma0($x) { return (int) ($this->ROTR($x, 2)^$this->ROTR($x, 13)^$this->ROTR($x, 22)); }
|
||||
function Sigma1($x) { return (int) ($this->ROTR($x, 6)^$this->ROTR($x, 11)^$this->ROTR($x, 25)); }
|
||||
function sigma_0($x) { return (int) ($this->ROTR($x, 7)^$this->ROTR($x, 18)^$this->SHR($x, 3)); }
|
||||
function sigma_1($x) { return (int) ($this->ROTR($x, 17)^$this->ROTR($x, 19)^$this->SHR($x, 10)); }
|
||||
|
||||
/*
|
||||
* Custom functions to provide PHP support
|
||||
*/
|
||||
// split a byte-string into integer array values
|
||||
function int_split($input)
|
||||
{
|
||||
$l = strlen($input);
|
||||
|
||||
if ($l <= 0) {
|
||||
return (int)0;
|
||||
}
|
||||
|
||||
if (($l % 4) != 0) { // invalid input
|
||||
return false;
|
||||
}
|
||||
|
||||
for ($i = 0; $i < $l; $i += 4)
|
||||
{
|
||||
$int_build = (ord($input[$i]) << 24);
|
||||
$int_build += (ord($input[$i+1]) << 16);
|
||||
$int_build += (ord($input[$i+2]) << 8);
|
||||
$int_build += (ord($input[$i+3]));
|
||||
|
||||
$result[] = $int_build;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process and return the hash.
|
||||
*
|
||||
* @param $str Input string to hash
|
||||
* @param $ig_func Option param to ignore checking for php > 5.1.2
|
||||
* @return string Hexadecimal representation of the message digest
|
||||
*/
|
||||
function hash($str, $ig_func = false)
|
||||
{
|
||||
unset($binStr); // binary representation of input string
|
||||
unset($hexStr); // 256-bit message digest in readable hex format
|
||||
|
||||
// check for php's internal sha256 function, ignore if ig_func==true
|
||||
if ($ig_func == false) {
|
||||
if (version_compare(PHP_VERSION,'5.1.2','>=')) {
|
||||
return hash("sha256", $str, false);
|
||||
} else if (function_exists('mhash') && defined('MHASH_SHA256')) {
|
||||
return base64_encode(bin2hex(mhash(MHASH_SHA256, $str)));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* SHA-256 Constants
|
||||
* Sequence of sixty-four constant 32-bit words representing the
|
||||
* first thirty-two bits of the fractional parts of the cube roots
|
||||
* of the first sixtyfour prime numbers.
|
||||
*/
|
||||
$K = array((int)0x428a2f98, (int)0x71374491, (int)0xb5c0fbcf,
|
||||
(int)0xe9b5dba5, (int)0x3956c25b, (int)0x59f111f1,
|
||||
(int)0x923f82a4, (int)0xab1c5ed5, (int)0xd807aa98,
|
||||
(int)0x12835b01, (int)0x243185be, (int)0x550c7dc3,
|
||||
(int)0x72be5d74, (int)0x80deb1fe, (int)0x9bdc06a7,
|
||||
(int)0xc19bf174, (int)0xe49b69c1, (int)0xefbe4786,
|
||||
(int)0x0fc19dc6, (int)0x240ca1cc, (int)0x2de92c6f,
|
||||
(int)0x4a7484aa, (int)0x5cb0a9dc, (int)0x76f988da,
|
||||
(int)0x983e5152, (int)0xa831c66d, (int)0xb00327c8,
|
||||
(int)0xbf597fc7, (int)0xc6e00bf3, (int)0xd5a79147,
|
||||
(int)0x06ca6351, (int)0x14292967, (int)0x27b70a85,
|
||||
(int)0x2e1b2138, (int)0x4d2c6dfc, (int)0x53380d13,
|
||||
(int)0x650a7354, (int)0x766a0abb, (int)0x81c2c92e,
|
||||
(int)0x92722c85, (int)0xa2bfe8a1, (int)0xa81a664b,
|
||||
(int)0xc24b8b70, (int)0xc76c51a3, (int)0xd192e819,
|
||||
(int)0xd6990624, (int)0xf40e3585, (int)0x106aa070,
|
||||
(int)0x19a4c116, (int)0x1e376c08, (int)0x2748774c,
|
||||
(int)0x34b0bcb5, (int)0x391c0cb3, (int)0x4ed8aa4a,
|
||||
(int)0x5b9cca4f, (int)0x682e6ff3, (int)0x748f82ee,
|
||||
(int)0x78a5636f, (int)0x84c87814, (int)0x8cc70208,
|
||||
(int)0x90befffa, (int)0xa4506ceb, (int)0xbef9a3f7,
|
||||
(int)0xc67178f2);
|
||||
|
||||
// Pre-processing: Padding the string
|
||||
$binStr = $this->char_pad($str);
|
||||
|
||||
// Parsing the Padded Message (Break into N 512-bit blocks)
|
||||
$M = str_split($binStr, 64);
|
||||
|
||||
// Set the initial hash values
|
||||
$h[0] = (int)0x6a09e667;
|
||||
$h[1] = (int)0xbb67ae85;
|
||||
$h[2] = (int)0x3c6ef372;
|
||||
$h[3] = (int)0xa54ff53a;
|
||||
$h[4] = (int)0x510e527f;
|
||||
$h[5] = (int)0x9b05688c;
|
||||
$h[6] = (int)0x1f83d9ab;
|
||||
$h[7] = (int)0x5be0cd19;
|
||||
|
||||
// loop through message blocks and compute hash. ( For i=1 to N : )
|
||||
$N = count($M);
|
||||
for ($i = 0; $i < $N; $i++)
|
||||
{
|
||||
// Break input block into 16 32bit words (message schedule prep)
|
||||
$MI = $this->int_split($M[$i]);
|
||||
|
||||
// Initialize working variables
|
||||
$_a = (int)$h[0];
|
||||
$_b = (int)$h[1];
|
||||
$_c = (int)$h[2];
|
||||
$_d = (int)$h[3];
|
||||
$_e = (int)$h[4];
|
||||
$_f = (int)$h[5];
|
||||
$_g = (int)$h[6];
|
||||
$_h = (int)$h[7];
|
||||
unset($_s0);
|
||||
unset($_s1);
|
||||
unset($_T1);
|
||||
unset($_T2);
|
||||
$W = array();
|
||||
|
||||
// Compute the hash and update
|
||||
for ($t = 0; $t < 16; $t++)
|
||||
{
|
||||
// Prepare the first 16 message schedule values as we loop
|
||||
$W[$t] = $MI[$t];
|
||||
|
||||
// Compute hash
|
||||
$_T1 = $this->addmod2n($this->addmod2n($this->addmod2n($this->addmod2n($_h, $this->Sigma1($_e)), $this->Ch($_e, $_f, $_g)), $K[$t]), $W[$t]);
|
||||
$_T2 = $this->addmod2n($this->Sigma0($_a), $this->Maj($_a, $_b, $_c));
|
||||
|
||||
// Update working variables
|
||||
$_h = $_g; $_g = $_f; $_f = $_e; $_e = $this->addmod2n($_d, $_T1);
|
||||
$_d = $_c; $_c = $_b; $_b = $_a; $_a = $this->addmod2n($_T1, $_T2);
|
||||
}
|
||||
|
||||
for (; $t < 64; $t++)
|
||||
{
|
||||
// Continue building the message schedule as we loop
|
||||
$_s0 = $W[($t+1)&0x0F];
|
||||
$_s0 = $this->sigma_0($_s0);
|
||||
$_s1 = $W[($t+14)&0x0F];
|
||||
$_s1 = $this->sigma_1($_s1);
|
||||
|
||||
$W[$t&0xF] = $this->addmod2n($this->addmod2n($this->addmod2n($W[$t&0xF], $_s0), $_s1), $W[($t+9)&0x0F]);
|
||||
|
||||
// Compute hash
|
||||
$_T1 = $this->addmod2n($this->addmod2n($this->addmod2n($this->addmod2n($_h, $this->Sigma1($_e)), $this->Ch($_e, $_f, $_g)), $K[$t]), $W[$t&0xF]);
|
||||
$_T2 = $this->addmod2n($this->Sigma0($_a), $this->Maj($_a, $_b, $_c));
|
||||
|
||||
// Update working variables
|
||||
$_h = $_g; $_g = $_f; $_f = $_e; $_e = $this->addmod2n($_d, $_T1);
|
||||
$_d = $_c; $_c = $_b; $_b = $_a; $_a = $this->addmod2n($_T1, $_T2);
|
||||
}
|
||||
|
||||
$h[0] = $this->addmod2n($h[0], $_a);
|
||||
$h[1] = $this->addmod2n($h[1], $_b);
|
||||
$h[2] = $this->addmod2n($h[2], $_c);
|
||||
$h[3] = $this->addmod2n($h[3], $_d);
|
||||
$h[4] = $this->addmod2n($h[4], $_e);
|
||||
$h[5] = $this->addmod2n($h[5], $_f);
|
||||
$h[6] = $this->addmod2n($h[6], $_g);
|
||||
$h[7] = $this->addmod2n($h[7], $_h);
|
||||
}
|
||||
|
||||
// Convert the 32-bit words into human readable hexadecimal format.
|
||||
$hexStr = sprintf("%08x%08x%08x%08x%08x%08x%08x%08x", $h[0], $h[1], $h[2], $h[3], $h[4], $h[5], $h[6], $h[7]);
|
||||
|
||||
return ($this->toUpper) ? strtoupper($hexStr) : $hexStr;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('str_split'))
|
||||
{
|
||||
/**
|
||||
* Splits a string into an array of strings with specified length.
|
||||
* Compatability with older verions of PHP
|
||||
*/
|
||||
function str_split($string, $split_length = 1)
|
||||
{
|
||||
$sign = ($split_length < 0) ? -1 : 1;
|
||||
$strlen = strlen($string);
|
||||
$split_length = abs($split_length);
|
||||
|
||||
if (($split_length == 0) || ($strlen == 0)) {
|
||||
$result = false;
|
||||
} elseif ($split_length >= $strlen) {
|
||||
$result[] = $string;
|
||||
} else {
|
||||
$length = $split_length;
|
||||
|
||||
for ($i = 0; $i < $strlen; $i++)
|
||||
{
|
||||
$i = (($sign < 0) ? $i + $length : $i);
|
||||
$result[] = substr($string, $sign*$i, $length);
|
||||
$i--;
|
||||
$i = (($sign < 0) ? $i : $i + $length);
|
||||
|
||||
$length = (($i + $split_length) > $strlen)
|
||||
? ($strlen - ($i + 1))
|
||||
: $split_length;
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Main routine called from an application using this include.
|
||||
*
|
||||
* General usage:
|
||||
* require_once('sha256.inc.php');
|
||||
* $hashstr = sha256('abc');
|
||||
*
|
||||
* Note:
|
||||
* PHP Strings are limitd to (2^31)-1, so it is not worth it to
|
||||
* check for input strings > 2^64 as the FIPS180-2 defines.
|
||||
*/
|
||||
// 2009-07-23: Added check for function as the Suhosin plugin adds this routine.
|
||||
if (!function_exists('sha256')) {
|
||||
function sha256($str, $ig_func = false) {
|
||||
$obj = new nanoSha2((defined('_NANO_SHA2_UPPER')) ? true : false);
|
||||
return $obj->hash($str, $ig_func);
|
||||
}
|
||||
} else {
|
||||
function _nano_sha256($str, $ig_func = false) {
|
||||
$obj = new nanoSha2((defined('_NANO_SHA2_UPPER')) ? true : false);
|
||||
return $obj->hash($str, $ig_func);
|
||||
}
|
||||
}
|
||||
|
||||
// support to give php4 the hash() routine which abstracts this code.
|
||||
if (!function_exists('hash'))
|
||||
{
|
||||
function hash($algo, $data)
|
||||
{
|
||||
if (empty($algo) || !is_string($algo) || !is_string($data)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (function_exists($algo)) {
|
||||
return $algo($data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
30
shop/inicis/makesignature.php
Normal file
30
shop/inicis/makesignature.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_LIB_PATH.'/json.lib.php');
|
||||
include_once(G5_SHOP_PATH.'/settle_inicis.inc.php');
|
||||
|
||||
$orderNumber = get_session('ss_order_id');
|
||||
$price = preg_replace('#[^0-9]#', '', $_POST['price']);
|
||||
|
||||
if(strlen($price) < 1)
|
||||
die(json_encode(array('error'=>'가격이 올바르지 않습니다.')));
|
||||
|
||||
//
|
||||
//###################################
|
||||
// 2. 가맹점 확인을 위한 signKey를 해시값으로 변경 (SHA-256방식 사용)
|
||||
//###################################
|
||||
$mKey = hash("sha256", $signKey);
|
||||
|
||||
/*
|
||||
//*** 위변조 방지체크를 signature 생성 ***
|
||||
oid, price, timestamp 3개의 키와 값을
|
||||
key=value 형식으로 하여 '&'로 연결한 하여 SHA-256 Hash로 생성 된값
|
||||
ex) oid=INIpayTest_1432813606995&price=819000×tamp=2012-02-01 09:19:04.004
|
||||
* key기준 알파벳 정렬
|
||||
* timestamp는 반드시 signature생성에 사용한 timestamp 값을 timestamp input에 그대로 사용하여야함
|
||||
*/
|
||||
$params = "oid=" . $orderNumber . "&price=" . $price . "×tamp=" . $timestamp;
|
||||
$sign = hash("sha256", $params);
|
||||
|
||||
die(json_encode(array('error'=>'', 'mKey'=>$mKey, 'timestamp'=>$timestamp, 'sign'=>$sign)));
|
||||
?>
|
||||
@ -5,20 +5,15 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
if($default['de_iche_use'] || $default['de_vbank_use'] || $default['de_hp_use'] || $default['de_card_use'] || $default['de_easy_pay_use']) {
|
||||
?>
|
||||
|
||||
<script language=javascript src="<?php echo $ini_js_url; ?>"></script>
|
||||
<script language=javascript>
|
||||
StartSmartUpdate();
|
||||
</script>
|
||||
<script language=javascript src="<?php echo $stdpay_js_url; ?>"></script>
|
||||
|
||||
<script language=javascript>
|
||||
var openwin;
|
||||
|
||||
function set_encrypt_data(frm)
|
||||
function make_signature(frm)
|
||||
{
|
||||
// 데이터 암호화 처리
|
||||
var result = true;
|
||||
$.ajax({
|
||||
url: g5_url+"/shop/inicis/encryptdata.php",
|
||||
url: g5_url+"/shop/inicis/makesignature.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
price : frm.good_mny.value
|
||||
@ -28,8 +23,9 @@ function set_encrypt_data(frm)
|
||||
cache: false,
|
||||
success: function(data) {
|
||||
if(data.error == "") {
|
||||
frm.ini_encfield.value = data.ini_encfield;
|
||||
frm.ini_certid.value = data.ini_certid;
|
||||
frm.timestamp.value = data.timestamp;
|
||||
frm.signature.value = data.sign;
|
||||
frm.mKey.value = data.mKey;
|
||||
} else {
|
||||
alert(data.error);
|
||||
result = false;
|
||||
@ -40,88 +36,8 @@ function set_encrypt_data(frm)
|
||||
return result;
|
||||
}
|
||||
|
||||
function pay(frm)
|
||||
{
|
||||
// MakePayMessage()를 호출함으로써 플러그인이 화면에 나타나며, Hidden Field
|
||||
// 에 값들이 채워지게 됩니다. 일반적인 경우, 플러그인은 결제처리를 직접하는 것이
|
||||
// 아니라, 중요한 정보를 암호화 하여 Hidden Field의 값들을 채우고 종료하며,
|
||||
// 다음 페이지인 INIsecureresult.php로 데이터가 포스트 되어 결제 처리됨을 유의하시기 바랍니다.
|
||||
|
||||
if(document.forderform.clickcontrol.value == "enable")
|
||||
{
|
||||
|
||||
if(document.forderform.goodname.value == "") // 필수항목 체크 (상품명, 상품가격, 구매자명, 구매자 이메일주소, 구매자 전화번호)
|
||||
{
|
||||
alert("상품명이 빠졌습니다. 필수항목입니다.");
|
||||
return false;
|
||||
}
|
||||
else if(document.forderform.buyername.value == "")
|
||||
{
|
||||
alert("구매자명이 빠졌습니다. 필수항목입니다.");
|
||||
return false;
|
||||
}
|
||||
else if(document.forderform.buyeremail.value == "")
|
||||
{
|
||||
alert("구매자 이메일주소가 빠졌습니다. 필수항목입니다.");
|
||||
return false;
|
||||
}
|
||||
else if(document.forderform.buyertel.value == "")
|
||||
{
|
||||
alert("구매자 전화번호가 빠졌습니다. 필수항목입니다.");
|
||||
return false;
|
||||
}
|
||||
else if( ( navigator.userAgent.indexOf("MSIE") >= 0 || navigator.appName == 'Microsoft Internet Explorer' ) && (document.INIpay == null || document.INIpay.object == null) ) // 플러그인 설치유무 체크
|
||||
{
|
||||
alert("\n이니페이 플러그인 128이 설치되지 않았습니다. \n\n안전한 결제를 위하여 이니페이 플러그인 128의 설치가 필요합니다. \n\n다시 설치하시려면 Ctrl + F5키를 누르시거나 메뉴의 [보기/새로고침]을 선택하여 주십시오.");
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
/******
|
||||
* 플러그인이 참조하는 각종 결제옵션을 이곳에서 수행할 수 있습니다.
|
||||
* (자바스크립트를 이용한 동적 옵션처리)
|
||||
*/
|
||||
|
||||
|
||||
if (MakePayMessage(frm))
|
||||
{
|
||||
disable_click();
|
||||
document.getElementById("display_pay_button").style.display = "none";
|
||||
document.getElementById('display_pay_process').style.display = '';
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( IsPluginModule() ) //plugin타입 체크
|
||||
{
|
||||
alert("결제를 취소하셨습니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function enable_click()
|
||||
{
|
||||
document.forderform.clickcontrol.value = "enable"
|
||||
}
|
||||
|
||||
function disable_click()
|
||||
{
|
||||
document.forderform.clickcontrol.value = "disable"
|
||||
}
|
||||
|
||||
function focus_control()
|
||||
{
|
||||
if(document.forderform.clickcontrol.value == "disable")
|
||||
openwin.focus();
|
||||
function paybtn(f) {
|
||||
INIStdPay.pay(f.id);
|
||||
}
|
||||
</script>
|
||||
|
||||
<?php } ?>
|
||||
@ -7,14 +7,18 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
<?php
|
||||
if($default['de_tax_flag_use']) {
|
||||
?>
|
||||
<input type="hidden" name="comm_tax_mny" value="<?php echo $comm_tax_mny; ?>"> <!-- 과세금액 -->
|
||||
<input type="hidden" name="comm_vat_mny" value="<?php echo $comm_vat_mny; ?>"> <!-- 부가세 -->
|
||||
<input type="hidden" name="comm_free_mny" value="<?php echo $comm_free_mny; ?>"> <!-- 비과세 금액 -->
|
||||
<input type="hidden" name="comm_tax_mny" value="<?php echo $comm_tax_mny; ?>"> <!-- 과세금액 -->
|
||||
<input type="hidden" name="comm_vat_mny" value="<?php echo $comm_vat_mny; ?>"> <!-- 부가세 -->
|
||||
<input type="hidden" name="comm_free_mny" value="<?php echo $comm_free_mny; ?>"> <!-- 비과세 금액 -->
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
<input type="hidden" name="version" value="1.0" >
|
||||
<input type="hidden" name="mid" value="<?php echo $mid; ?>">
|
||||
<input type="hidden" name="oid" value="<?php echo $od_id; ?>">
|
||||
<input type="hidden" name="goodname" value="<?php echo $goods; ?>">
|
||||
<input type="hidden" name="price" value="<?php echo $tot_price; ?>">
|
||||
<input type="hidden" name="buyername" value="">
|
||||
<input type="hidden" name="buyeremail" value="">
|
||||
<input type="hidden" name="parentemail" value="">
|
||||
@ -37,17 +41,7 @@ Card(0): 신용카드 지불시에 이니시스 대표 가맹점인 경우에
|
||||
OCB : OK CASH BAG 가맹점으로 신용카드 결제시에 OK CASH BAG 적립을 적용하시기 원하시면 "OCB" 세팅 필요 그 외에 경우에는 삭제해야 정상적인 결제 이루어짐.
|
||||
no_receipt : 은행계좌이체시 현금영수증 발행여부 체크박스 비활성화 (현금영수증 발급 계약이 되어 있어야 사용가능)
|
||||
-->
|
||||
<input type="hidden" name="acceptmethod" value="HPP(2):Card(0):no_receipt:cardpoint<?php echo $useescrow; ?>">
|
||||
|
||||
|
||||
<!--
|
||||
상점 주문번호 : 무통장입금 예약(가상계좌 이체),전화결재 관련 필수필드로 반드시 상점의 주문번호를 페이지에 추가해야 합니다.
|
||||
결제수단 중에 은행 계좌이체 이용 시에는 주문 번호가 결제결과를 조회하는 기준 필드가 됩니다.
|
||||
상점 주문번호는 최대 40 BYTE 길이입니다.
|
||||
주의:절대 한글값을 입력하시면 안됩니다.
|
||||
-->
|
||||
<input type="hidden" name="oid" value="<?php echo $od_id; ?>">
|
||||
|
||||
<input type="hidden" name="acceptmethod" value="<?php echo $acceptmethod; ?>">
|
||||
|
||||
<!--
|
||||
플러그인 좌측 상단 상점 로고 이미지 사용
|
||||
@ -68,19 +62,18 @@ no_receipt : 은행계좌이체시 현금영수증 발행여부 체크박스 비
|
||||
<!--
|
||||
플러그인에 의해서 값이 채워지거나, 플러그인이 참조하는 필드들
|
||||
삭제/수정 불가
|
||||
uid 필드에 절대로 임의의 값을 넣지 않도록 하시기 바랍니다.
|
||||
-->
|
||||
<input type="hidden" name="ini_encfield" value="">
|
||||
<input type="hidden" name="ini_certid" value="">
|
||||
<input type="hidden" name="quotainterest" value="">
|
||||
<input type="hidden" name="paymethod" value="">
|
||||
<input type="hidden" name="cardcode" value="">
|
||||
<input type="hidden" name="cardquota" value="">
|
||||
<input type="hidden" name="rbankcode" value="">
|
||||
<input type="hidden" name="reqsign" value="DONE">
|
||||
<input type="hidden" name="encrypted" value="">
|
||||
<input type="hidden" name="sessionkey" value="">
|
||||
<input type="hidden" name="uid" value="">
|
||||
<input type="hidden" name="sid" value="">
|
||||
<input type="hidden" name="version" value="4000">
|
||||
<input type="hidden" name="clickcontrol" value="">
|
||||
<input type="hidden" name="timestamp" value="">
|
||||
<input type="hidden" name="signature" value="">
|
||||
<input type="hidden" name="returnUrl" value="<?php echo $returnUrl; ?>">
|
||||
<input type="hidden" name="mKey" value="">
|
||||
<input type="hidden" name="charset" value="UTF-8">
|
||||
<input type="hidden" name="payViewType" value="overlay">
|
||||
<input type="hidden" name="closeUrl" value="<?php echo $closeUrl; ?>">
|
||||
<input type="hidden" name="popupUrl" value="<?php echo $popupUrl; ?>">
|
||||
<input type="hidden" name="nointerest" value="<?php echo $cardNoInterestQuota; ?>">
|
||||
<input type="hidden" name="quotabase" value="<?php echo $cardQuotaBase; ?>">
|
||||
<?php if($default['de_tax_flag_use']) { ?>
|
||||
<input type="hidden" name="tax" value="<?php echo $comm_vat_mny; ?>">
|
||||
<input type="hidden" name="taxfree" value="<?php echo $comm_free_mny; ?>">
|
||||
<?php } ?>
|
||||
@ -1,20 +1,12 @@
|
||||
<?php
|
||||
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 전자결제를 사용할 때만 실행
|
||||
if($default['de_iche_use'] || $default['de_vbank_use'] || $default['de_hp_use'] || $default['de_card_use'] || $default['de_easy_pay_use']) {
|
||||
?>
|
||||
|
||||
<div id="display_pay_button" class="btn_confirm" style="display:none">
|
||||
<input type="submit" value="주문하기" onclick="return forderform_check(this.form);" class="btn_submit">
|
||||
<div id="display_pay_button" class="btn_confirm">
|
||||
<input type="button" value="주문하기" onclick="forderform_check(this.form);" class="btn_submit">
|
||||
<a href="javascript:history.go(-1);" class="btn01">취소</a>
|
||||
</div>
|
||||
<div id="display_pay_process" style="display:none">
|
||||
<img src="<?php echo G5_URL; ?>/shop/img/loading.gif" alt="">
|
||||
<span>주문완료 중입니다. 잠시만 기다려 주십시오.</span>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<script>
|
||||
document.getElementById("display_pay_button").style.display = "" ;
|
||||
</script>
|
||||
</div>
|
||||
1
shop/inicis/popup.php
Normal file
1
shop/inicis/popup.php
Normal file
@ -0,0 +1 @@
|
||||
<script language="javascript" type="text/javascript" src="https://stdpay.inicis.com/stdjs/INIStdPay_popup.js" charset="UTF-8"></script>
|
||||
@ -29,23 +29,6 @@ $s_cart_id = $tmp_cart_id;
|
||||
|
||||
$g5['title'] = '주문서 작성';
|
||||
|
||||
// 전자결제를 사용할 때만 실행
|
||||
if(!$is_mobile_order) {
|
||||
if($default['de_iche_use'] || $default['de_vbank_use'] || $default['de_hp_use'] || $default['de_card_use'] || $default['de_easy_pay_use']) {
|
||||
switch($default['de_pg_service']) {
|
||||
case 'lg':
|
||||
$g5['body_script'] = '';
|
||||
break;
|
||||
case 'inicis':
|
||||
$g5['body_script'] = ' onload="javascript:enable_click()"';
|
||||
break;
|
||||
default:
|
||||
$g5['body_script'] = '';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(G5_IS_MOBILE)
|
||||
include_once(G5_MSHOP_PATH.'/_head.php');
|
||||
else
|
||||
|
||||
@ -1374,20 +1374,20 @@ function forderform_check(f)
|
||||
switch(settle_method)
|
||||
{
|
||||
case "계좌이체":
|
||||
f.gopaymethod.value = "onlydbank";
|
||||
f.gopaymethod.value = "DirectBank";
|
||||
break;
|
||||
case "가상계좌":
|
||||
f.gopaymethod.value = "onlyvbank";
|
||||
f.gopaymethod.value = "VBank";
|
||||
break;
|
||||
case "휴대폰":
|
||||
f.gopaymethod.value = "onlyhpp";
|
||||
f.gopaymethod.value = "HPP";
|
||||
break;
|
||||
case "신용카드":
|
||||
f.gopaymethod.value = "onlycard";
|
||||
f.gopaymethod.value = "Card";
|
||||
f.acceptmethod.value = f.acceptmethod.value.replace(":useescrow", "");
|
||||
break;
|
||||
case "간편결제":
|
||||
f.gopaymethod.value = "onlykpay";
|
||||
f.gopaymethod.value = "Kpay";
|
||||
break;
|
||||
default:
|
||||
f.gopaymethod.value = "무통장";
|
||||
@ -1439,6 +1439,11 @@ function forderform_check(f)
|
||||
}
|
||||
<?php } ?>
|
||||
<?php if($default['de_pg_service'] == 'inicis') { ?>
|
||||
f.price.value = f.good_mny.value;
|
||||
<?php if($default['de_tax_flag_use']) { ?>
|
||||
f.tax.value = f.comm_vat_mny.value;
|
||||
f.taxfree.value = f.comm_free_mny.value;
|
||||
<?php } ?>
|
||||
f.buyername.value = f.od_name.value;
|
||||
f.buyeremail.value = f.od_email.value;
|
||||
f.buyertel.value = f.od_hp.value ? f.od_hp.value : f.od_tel.value;
|
||||
@ -1448,12 +1453,31 @@ function forderform_check(f)
|
||||
f.recvaddr.value = f.od_b_addr1.value + " " +f.od_b_addr2.value;
|
||||
|
||||
if(f.gopaymethod.value != "무통장") {
|
||||
if(!set_encrypt_data(f))
|
||||
// 주문정보 임시저장
|
||||
var order_data = $(f).serialize();
|
||||
var save_result = "";
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
data: order_data,
|
||||
url: g5_url+"/shop/ajax.orderdatasave.php",
|
||||
cache: false,
|
||||
async: false,
|
||||
success: function(data) {
|
||||
save_result = data;
|
||||
}
|
||||
});
|
||||
|
||||
if(save_result) {
|
||||
alert(save_result);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!make_signature(f))
|
||||
return false;
|
||||
|
||||
return pay(f);
|
||||
paybtn(f);
|
||||
} else {
|
||||
return true;
|
||||
f.submit();
|
||||
}
|
||||
<?php } ?>
|
||||
}
|
||||
|
||||
@ -814,6 +814,10 @@ if($config['cf_sms_use'] && ($default['de_sms_use2'] || $default['de_sms_use3'])
|
||||
$uid = md5($od_id.G5_TIME_YMDHIS.$REMOTE_ADDR);
|
||||
set_session('ss_orderview_uid', $uid);
|
||||
|
||||
// 주문 정보 임시 데이터 삭제
|
||||
$sql = " delete from {$g5['g5_shop_order_data_table']} where od_id = '$od_id' and dt_pg = '$od_pg' ";
|
||||
sql_query($sql);
|
||||
|
||||
// 주문번호제거
|
||||
set_session('ss_order_id', '');
|
||||
|
||||
|
||||
@ -1,17 +1,21 @@
|
||||
<?php
|
||||
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
if ($default['de_card_test']) {
|
||||
if ($default['de_escrow_use'] == 1) {
|
||||
// 에스크로결제 테스트
|
||||
$default['de_inicis_mid'] = 'iniescrow0';
|
||||
$default['de_inicis_admin_key'] = '1111';
|
||||
$default['de_inicis_sign_key'] = 'SU5JTElURV9UUklQTEVERVNfS0VZU1RS';
|
||||
}
|
||||
else {
|
||||
// 일반결제 테스트
|
||||
$default['de_inicis_mid'] = 'INIpayTest';
|
||||
$default['de_inicis_admin_key'] = '1111';
|
||||
$default['de_inicis_sign_key'] = 'SU5JTElURV9UUklQTEVERVNfS0VZU1RS';
|
||||
}
|
||||
|
||||
$stdpay_js_url = 'https:/stgstdpay.inicis.com/stdjs/INIStdPay.js';
|
||||
}
|
||||
else {
|
||||
$default['de_inicis_mid'] = "SIR".$default['de_inicis_mid'];
|
||||
@ -24,12 +28,19 @@ else {
|
||||
// 일반결제 테스트
|
||||
$useescrow = '';
|
||||
}
|
||||
|
||||
$stdpay_js_url = 'https://stdpay.inicis.com/stdjs/INIStdPay.js';
|
||||
}
|
||||
|
||||
/**************************
|
||||
* 1. 라이브러리 인클루드 *
|
||||
**************************/
|
||||
require(G5_SHOP_PATH.'/inicis/libs/INILib.php');
|
||||
require_once(G5_SHOP_PATH.'/inicis/libs/INIStdPayUtil.php');
|
||||
require_once(G5_SHOP_PATH.'/inicis/libs/sha256.inc.php');
|
||||
|
||||
$mid = $default['de_inicis_mid'];
|
||||
$signKey = $default['de_inicis_sign_key'];
|
||||
|
||||
/***************************************
|
||||
* 2. INIpay50 클래스의 인스턴스 생성 *
|
||||
@ -37,10 +48,26 @@ require(G5_SHOP_PATH.'/inicis/libs/INILib.php');
|
||||
$inipay = new INIpay50;
|
||||
|
||||
$inipay->SetField("inipayhome", G5_SHOP_PATH.'/inicis'); // 이니페이 홈디렉터리(상점수정 필요)
|
||||
$inipay->SetField("debug", "false"); // 로그모드("true"로 설정하면 상세로그가 생성됨.)
|
||||
$inipay->SetField("debug", "false");
|
||||
|
||||
$inipay_nointerest = 'no'; //무이자여부(no:일반, yes:무이자)
|
||||
$inipay_quotabase = '선택:일시불:2개월:3개월:4개월:5개월:6개월:7개월:8개월:9개월:10개월:11개월:12개월'; // 할부기간
|
||||
$util = new INIStdPayUtil();
|
||||
|
||||
$timestamp = $util->getTimestamp(); // util에 의해서 자동생성
|
||||
|
||||
$cardNoInterestQuota = ''; // 카드 무이자 여부 설정(가맹점에서 직접 설정)
|
||||
$cardQuotaBase = '2:3:4:5:6:7:8:9:10:11:12'; // 가맹점에서 사용할 할부 개월수 설정
|
||||
|
||||
$acceptmethod = 'HPP(2):no_receipt:vbank('.date('Ymd', strtotime("+3 days", G5_SERVER_TIME)).'):below1000'.$useescrow;
|
||||
|
||||
/* 기타 */
|
||||
$siteDomain = G5_SHOP_URL.'/inicis'; //가맹점 도메인 입력
|
||||
// 페이지 URL에서 고정된 부분을 적는다.
|
||||
// Ex) returnURL이 http://localhost:8082/demo/INIpayStdSample/INIStdPayReturn.php 라면
|
||||
// http://localhost:8082/demo/INIpayStdSample 까지만 기입한다.
|
||||
|
||||
$returnUrl = $siteDomain.'/INIStdPayReturn.php';
|
||||
$closeUrl = $siteDomain.'/close.php';
|
||||
$popupUrl = $siteDomain.'/popup.php';
|
||||
|
||||
$BANK_CODE = array(
|
||||
'03' => '기업은행',
|
||||
@ -101,11 +128,4 @@ $PAY_METHOD = array(
|
||||
'HPP' => '휴대폰',
|
||||
'VBank' => '가상계좌'
|
||||
);
|
||||
|
||||
// 플러그인 호출 URL
|
||||
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') {
|
||||
$ini_js_url = 'https://plugin.inicis.com/pay61_secunissl_cross.js';
|
||||
} else {
|
||||
$ini_js_url = 'http://plugin.inicis.com/pay61_secuni_cross.js';
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user