diff --git a/adm/shop_admin/configform.php b/adm/shop_admin/configform.php index 5d173a422..f652025d9 100644 --- a/adm/shop_admin/configform.php +++ b/adm/shop_admin/configform.php @@ -196,6 +196,10 @@ if( ! isset($config['cf_icode_token_key']) ){ if( function_exists('pg_setting_check') ){ pg_setting_check(true); } + +if(!$default['de_kakaopay_cancelpwd']){ + $default['de_kakaopay_cancelpwd'] = '1111'; +} ?>
@@ -845,42 +849,44 @@ if( function_exists('pg_setting_check') ){ - - 카카오페이 서비스신청하기 + + 카카오페이 서비스신청하기 - - KHSIR m + + SIRK - + - + 상점정보 > 계약정보 > 부가정보의 웹결제 signkey생성 조회 버튼 클릭, 팝업창에서 생성 버튼 클릭 후 해당 값을 입력합니다."); ?> - + - - + + + + + + + KG 이니시스의 SIRK****** 아이디를 받은 상점만 해당됩니다.", 50); ?> + > + + + - - - - 입력하신 비밀번호와 상점관리자에서 설정하신 비밀번호가 일치하지 않으면 취소가 되지 않습니다."); ?> - - - diff --git a/adm/shop_admin/configformupdate.php b/adm/shop_admin/configformupdate.php index 138558f33..86cc93a42 100644 --- a/adm/shop_admin/configformupdate.php +++ b/adm/shop_admin/configformupdate.php @@ -237,6 +237,14 @@ foreach( $check_sanitize_keys as $key ){ $$key = isset($_POST[$key]) ? strip_tags(clean_xss_attributes($_POST[$key])) : ''; } +$warning_msg = ''; + +if( $de_kakaopay_enckey && ($de_pg_service === 'inicis' || $de_inicis_lpay_use || $de_inicis_kakaopay_use) ){ + + $warning_msg = 'KG 이니시스 결제 또는 L.pay 또는 KG이니시스 카카오페이를 사용시 결제모듈 중복문제로 카카오페이를 활성화 할수 없습니다. \\n\\n카카오페이 사용을 비활성화 합니다.'; + $de_kakaopay_enckey = ''; +} + // // 영카트 default // @@ -436,5 +444,9 @@ $sql = " update {$g5['config_table']} cf_lg_mert_key = '{$cf_lg_mert_key}' "; sql_query($sql); -goto_url("./configform.php"); -?> +if( $warning_msg ){ + alert($warning_msg, "./configform.php"); +} else { + goto_url("./configform.php"); +} +?> \ No newline at end of file diff --git a/mobile/shop/orderinquiryview.php b/mobile/shop/orderinquiryview.php index 904abf1de..83773bc37 100644 --- a/mobile/shop/orderinquiryview.php +++ b/mobile/shop/orderinquiryview.php @@ -380,7 +380,8 @@ if($od['od_pg'] == 'lg') { if($od['od_settle_case'] == 'KAKAOPAY') { - $card_receipt_script = 'window.open(\'https://mms.cnspay.co.kr/trans/retrieveIssueLoader.do?TID='.$od['od_tno'].'&type=0\', \'popupIssue\', \'toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=420,height=540\');'; + //$card_receipt_script = 'window.open(\'https://mms.cnspay.co.kr/trans/retrieveIssueLoader.do?TID='.$od['od_tno'].'&type=0\', \'popupIssue\', \'toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=420,height=540\');'; + $card_receipt_script = 'window.open(\'https://iniweb.inicis.com/DefaultWebApp/mall/cr/cm/mCmReceipt_head.jsp?noTid='.$od['od_tno'].'&noMethod=1\',\'receipt\',\'width=430,height=700\');'; ?> 영수증 출력 setPhpVersion($phpVersion); - -// TXN_ID를 요청하기 위한 PARAMETERR -$REQUESTDEALAPPROVEURL = KMPayRequest("requestDealApproveUrl"); //인증 요청 경로 -$PR_TYPE = KMPayRequest("prType"); //결제 요청 타입 -$MERCHANT_ID = KMPayRequest("MID"); //가맹점 ID -$MERCHANT_TXN_NUM = KMPayRequest("merchantTxnNum"); //가맹점 거래번호 -$channelType = KMPayRequest("channelType"); -$PRODUCT_NAME = KMPayRequest("GoodsName"); //상품명 -$AMOUNT = KMPayRequest("Amt"); //상품금액(총거래금액) (총거래금액 = 공급가액 + 부가세 + 봉사료) - -$CURRENCY = KMPayRequest("currency"); //거래통화(KRW/USD/JPY 등) -$RETURN_URL = KMPayRequest("returnUrl"); //결제승인결과전송URL -$CERTIFIED_FLAG = KMPayRequest("CERTIFIED_FLAG"); //가맹점 인증 구분값 ("N","NC") - -$OFFER_PERIOD_FLAG = KMPayRequest("OFFER_PERIOD_FLAG"); //상품제공기간 플래그 -$OFFER_PERIOD = KMPayRequest("OFFER_PERIOD"); //상품제공기간 - - -//무이자옵션 -$NOINTYN = KMPayRequest("noIntYN"); //무이자 설정 -$NOINTOPT = KMPayRequest("noIntOpt"); //무이자 옵션 -$MAX_INT =KMPayRequest("maxInt"); //최대할부개월 -$FIXEDINT = KMPayRequest("fixedInt"); //고정할부개월 -$POINT_USE_YN = KMPayRequest("pointUseYn"); //카드사포인트사용여부 -$POSSICARD = KMPayRequest("possiCard"); //결제가능카드설정 -$BLOCK_CARD = KMPayRequest("blockCard"); //금지카드설정 - -// 복합과세 -if($default['de_tax_flag_use']) { - $SUPPLY_AMT = KMPayRequest("SupplyAmt"); // 공급가액 - $GOODS_VAT = KMPayRequest("GoodsVat"); // 부가가치세 - $SERVICE_AMT = KMPayRequest("ServiceAmt"); // 봉사료 -} - -// ENC KEY와 HASH KEY는 가맹점에서 생성한 KEY 로 SETTING 한다. -$merchantEncKey = KMPayRequest("merchantEncKey"); -$merchantHashKey = KMPayRequest("merchantHashKey"); - $hashTarget = $MERCHANT_ID.$MERCHANT_TXN_NUM.str_pad($AMOUNT,7,"0",STR_PAD_LEFT); - -// payHash 생성 -$payHash = strtoupper(hash("sha256", $hashTarget.$merchantHashKey, false)); - -//json string 생성 -$strJsonString = new JsonString($LogDir); - -$strJsonString->setValue("PR_TYPE", $PR_TYPE); -$strJsonString->setValue("channelType", $channelType); -$strJsonString->setValue("MERCHANT_ID", $MERCHANT_ID); -$strJsonString->setValue("MERCHANT_TXN_NUM", $MERCHANT_TXN_NUM); -$strJsonString->setValue("PRODUCT_NAME", $PRODUCT_NAME); - -$strJsonString->setValue("AMOUNT", $AMOUNT); - -$strJsonString->setValue("CURRENCY", $CURRENCY); -$strJsonString->setValue("CERTIFIED_FLAG", $CERTIFIED_FLAG); - -$strJsonString->setValue("OFFER_PERIOD_FLAG", $OFFER_PERIOD_FLAG); -$strJsonString->setValue("OFFER_PERIOD", $OFFER_PERIOD); - -$strJsonString->setValue("NO_INT_YN", $NOINTYN); -$strJsonString->setValue("NO_INT_OPT", $NOINTOPT); -$strJsonString->setValue("MAX_INT", $MAX_INT); -$strJsonString->setValue("FIXED_INT", $FIXEDINT); - -$strJsonString->setValue("POINT_USE_YN", $POINT_USE_YN); -$strJsonString->setValue("POSSI_CARD", $POSSICARD); -$strJsonString->setValue("BLOCK_CARD", $BLOCK_CARD); - -// 복합과세 -if($default['de_tax_flag_use']) { - $strJsonString->setValue("SUPPLY_AMT", $SUPPLY_AMT); - $strJsonString->setValue("GOODS_VAT", $GOODS_VAT); - $strJsonString->setValue("SERVICE_AMT", $SERVICE_AMT); -} - -$strJsonString->setValue("PAYMENT_HASH", $payHash); - -// 결과값을 담는 부분 -$resultCode = ""; -$resultMsg = ""; -$txnId = ""; -$merchantTxnNum = ""; -$prDt = ""; -$strValid = ""; - -// Data 검증 -$dataValidator = new KMPayDataValidator($strJsonString->getArrayValue()); -$strValid = $dataValidator->resultValid; -if (strlen($strValid) > 0) { - $arrVal = explode(",", $strValid); - if (count($arrVal) == 3) { - $resultCode = $arrVal[1]; - $resultMsg = $arrVal[2]; - } else { - $resultCode = $strValid; - $resultMsg = $strValid; - } -} - -// Data에 이상 없는 경우 -if (strlen($strValid) == 0) { - // CBC 암호화 - $paramStr = $strJsonString->getJsonString(); - $kmFunc->writeLog("Request"); - $kmFunc->writeLog($paramStr); - $kmFunc->writeLog($strJsonString->getArrayValue()); - $encryptStr = $kmFunc->parameterEncrypt($merchantEncKey, $paramStr); - $payReqResult = $kmFunc->connMPayDLP($REQUESTDEALAPPROVEURL, $MERCHANT_ID, $encryptStr); - $resultString = $kmFunc->parameterDecrypt($merchantEncKey, $payReqResult); - - $resultJSONObject = new JsonString($LogDir); - if (substr($resultString, 0, 1) == "{") { - $resultJSONObject->setJsonString($resultString); - $resultCode = $resultJSONObject->getValue("RESULT_CODE"); - $resultMsg = $resultJSONObject->getValue("RESULT_MSG"); - if ($resultCode == "00") { - $txnId = $resultJSONObject->getValue("TXN_ID"); - $merchantTxnNum = $resultJSONObject->getValue("MERCHANT_TXN_NUM"); - $prDt = $resultJSONObject->getValue("PR_DT"); - } - } - $kmFunc->writeLog("Result"); - $kmFunc->writeLog($resultString); - $kmFunc->writeLog($resultJSONObject->getArrayValue()); -} - -$result = array(); - -$result = array( - 'resultCode' => $resultCode, - 'resultMsg' => $resultMsg, - 'txnId' => $txnId, - 'prDt' => $prDt -); - -die(json_encode($result)); -?> \ No newline at end of file diff --git a/shop/kakaopay/incKakaopayCommon.php b/shop/kakaopay/incKakaopayCommon.php index 3774bd37d..52d3f14c8 100644 --- a/shop/kakaopay/incKakaopayCommon.php +++ b/shop/kakaopay/incKakaopayCommon.php @@ -1,43 +1,59 @@ \ No newline at end of file diff --git a/shop/kakaopay/inicis_kk_return.php b/shop/kakaopay/inicis_kk_return.php new file mode 100644 index 000000000..28d723957 --- /dev/null +++ b/shop/kakaopay/inicis_kk_return.php @@ -0,0 +1,85 @@ +()\[\]\{\}]/i", "", strip_tags($_POST['orderNumber'])) : 0; +$session_order_num = get_session('ss_order_id'); + +if( !$orderNumber ){ + alert("주문번호가 없습니다."); +} + +$sql = " select * from {$g5['g5_shop_order_data_table']} where od_id = '$orderNumber' "; +$row = sql_fetch($sql); + +if( empty($row) ){ + alert("임시 주문정보가 저장되지 않았습니다."); +} + +if ( base64_encode(base64_decode($row['dt_data'], true)) === $row['dt_data']){ + $data = unserialize(base64_decode($row['dt_data'])); +} else { + $data = unserialize($row['dt_data']); +} + +$params = array(); +$var_datas = array(); + +foreach($data as $key=>$value) { + if(is_array($value)) { + foreach($value as $k=>$v) { + $_POST[$key][$k] = $params[$key][$k] = clean_xss_tags(strip_tags($v)); + } + } else { + $_POST[$key] = $params[$key] = clean_xss_tags(strip_tags($value)); + } +} + +if(isset($data['pp_id']) && $data['pp_id']) { //개인결제 + + foreach($params as $key=>$value){ + + if( in_array($key, array('pp_name', 'pp_email', 'pp_hp', 'pp_settle_case')) ){ + + $var_datas[$key] = $value; + + $$key = $value; + } + + } + + include_once(G5_SHOP_PATH.'/personalpayformupdate.php'); + +} else { //상점주문 + + foreach($params as $key=>$value){ + + if( in_array($key, array('od_price', 'od_name', 'od_tel', 'od_hp', 'od_email', 'od_memo', 'od_settle_case', 'max_temp_point', 'od_temp_point', 'od_bank_account', 'od_deposit_name', 'od_test', 'od_ip', 'od_zip', 'od_addr1', 'od_addr2', 'od_addr3', 'od_addr_jibeon', 'od_b_name', 'od_b_tel', 'od_b_hp', 'od_b_addr1', 'od_b_addr2', 'od_b_addr3', 'od_b_addr_jibeon', 'od_b_zip', 'od_send_cost', 'od_send_cost2', 'od_hope_date')) ){ + + $var_datas[$key] = $value; + + $$key = $value; + } + + } + + $od_send_cost = (int) $_POST['od_send_cost']; + $od_send_cost2 = (int) $_POST['od_send_cost2']; + + include_once(G5_SHOP_PATH.'/orderformupdate.php'); +} +?> \ No newline at end of file diff --git a/shop/kakaopay/kakaopay_cancel.php b/shop/kakaopay/kakaopay_cancel.php index be19daf7f..3f9458e06 100644 --- a/shop/kakaopay/kakaopay_cancel.php +++ b/shop/kakaopay/kakaopay_cancel.php @@ -1,39 +1,87 @@ CnsActionUrl($CnsPayDealRequestUrl); -$connector->CnsPayVersion($phpVersion); -$connector->setRequestData($_REQUEST); -$connector->addRequestData("actionType", "CL0"); -$connector->addRequestData("CancelPwd", $cancelPwd); -$connector->addRequestData("CancelIP", $_SERVER['REMOTE_ADDR']); +$cancelFlag = "true"; -//가맹점키 셋팅 (MID 별로 틀림) -$connector->addRequestData("EncodeKey", $merchantKey); +// $cancelFlag를 "true"로 변경하는 condition 판단은 개별적으로 +// 수행하여 주십시오. -// 4. CNSPAY Lite 서버 접속하여 처리 -$connector->requestAction(); +if($cancelFlag == "true") +{ -// 5. 결과 처리 -$resultCode = $connector->getResultData("ResultCode"); // 결과코드 (정상 :2001(취소성공), 2002(취소진행중), 그 외 에러) -$resultMsg = $connector->getResultData("ResultMsg"); // 결과메시지 -$cancelAmt = $connector->getResultData("CancelAmt"); // 취소금액 -$cancelDate = $connector->getResultData("CancelDate"); // 취소일 -$cancelTime = $connector->getResultData("CancelTime"); // 취소시간 -$payMethod = $connector->getResultData("PayMethod"); // 취소 결제수단 -$mid = $connector->getResultData("MID"); // 가맹점 ID -$tid = $connector->getResultData("TID"); // TID -$errorCD = $connector->getResultData("ErrorCD"); // 상세 에러코드 -$errorMsg = $connector->getResultData("ErrorMsg"); // 상세 에러메시지 -$authDate = $cancelDate . $cancelTime; // 거래시간 -$ccPartCl = $connector->getResultData("CcPartCl"); // 부분취소 가능여부 (0:부분취소불가, 1:부분취소가능) -$stateCD = $connector->getResultData("StateCD"); // 거래상태코드 (0: 승인, 1:전취소, 2:후취소) -$authDate = $connector->makeDateString($authDate); -$errorMsg = iconv("euc-kr", "utf-8", $errorMsg); -$resultMsg = iconv("euc-kr", "utf-8", $resultMsg); + if( isset($is_noti_pay) && $is_noti_pay ){ + return; + } + + include_once(G5_SHOP_PATH.'/settle_kakaopay.inc.php'); + + if( get_session('ss_order_id') && $tno ){ + + $ini_oid = preg_replace('/[^a-z0-9_\-]/i', '', get_session('ss_order_id')); + $tno = preg_replace('/[^a-z0-9_\-]/i', '', $tno); + + $sql = "select oid from {$g5['g5_shop_inicis_log_table']} where oid = '$ini_oid' and P_TID = '$tno' "; + + $exists_log = sql_fetch($sql); + + if( $exists_log['oid'] ){ + $sql = " update {$g5['g5_shop_inicis_log_table']} + set P_STATUS = 'cancel', + P_AUTH_DT = '".preg_replace('/[^0-9]/', '', G5_TIME_YMDHIS)."' where oid = '$ini_oid' and P_TID = '$tno' "; + } else { + $sql = " insert into {$g5['g5_shop_inicis_log_table']} + set oid = '$ini_oid', + P_TID = '$tno', + P_STATUS = 'cancel', + P_AUTH_DT = '".preg_replace('/[^0-9]/', '', G5_TIME_YMDHIS)."' "; + } + + sql_query($sql, false); + } + + $db_check = 1; + $cancel_msg = "DB FAIL"; + + if( $is_admin ){ + $tmp = sql_fetch("select * from `{$g5['g5_shop_order_table']}` where od_tno = '".trim($_REQUEST['TID'])."' "); + + if( $tmp['od_pg'] === 'KAKAOPAY' ){ + $tno = trim($_REQUEST['TID']); + + $db_check = 0; + $cancel_msg = isset($_REQUEST['CancelMsg']) ? iconv_euckr($_REQUEST['CancelMsg']) : iconv_euckr('관리자 승인 취소'); + } + + } + + $TID = $tno; + $inipay->SetField("type", "cancel"); // 고정 + if( $default['de_kakaopay_cancelpwd'] ){ + $inipay->SetField("mid", $default['de_kakaopay_mid']); + $inipay->SetField("admin", $default['de_kakaopay_cancelpwd']); + } + $inipay->SetField("tid", $TID); // 고정 + $inipay->SetField("cancelmsg", $cancel_msg); // 취소사유 + $inipay->startAction(); + if($inipay->GetResult('ResultCode') == "00" && $db_check) + { + $inipay->MakeTXErrMsg(MERCHANT_DB_ERR,"Merchant DB FAIL"); + } + + $res_cd = $inipay->getResult('ResultCode'); + $res_msg = $inipay->getResult('ResultMsg'); + + if($res_cd != '00') { + $pg_res_cd = $res_cd; + $pg_res_msg = iconv_utf8($res_msg); + } +} ?> \ No newline at end of file diff --git a/shop/kakaopay/kakaopay_result.php b/shop/kakaopay/kakaopay_result.php index 3ed788bcb..673e80b8c 100644 --- a/shop/kakaopay/kakaopay_result.php +++ b/shop/kakaopay/kakaopay_result.php @@ -1,76 +1,29 @@ CnsActionUrl($CnsPayDealRequestUrl); -$connector->CnsPayVersion($phpVersion); + $sql = " select * from {$g5['g5_shop_order_data_table']} where od_id = '".preg_replace("/\s+/", "", $_POST['P_NOTI'])."' "; + $row = sql_fetch($sql); -// 요청 페이지 파라메터 셋팅 -$connector->setRequestData($_REQUEST); + if ( base64_encode(base64_decode($row['dt_data'], true)) === $row['dt_data']){ + $data = unserialize(base64_decode($row['dt_data'])); + } else { + $data = unserialize($row['dt_data']); + } -// 추가 파라메터 셋팅 -$connector->addRequestData("actionType", "PY0"); // actionType : CL0 취소, PY0 승인, CI0 조회 -$connector->addRequestData("MallIP", $_SERVER['REMOTE_ADDR']); // 가맹점 고유 ip -$connector->addRequestData("CancelPwd", $cancelPwd); - -//가맹점키 셋팅 (MID 별로 틀림) -$connector->addRequestData("EncodeKey", $merchantKey); - -// 4. CNSPAY Lite 서버 접속하여 처리 -$connector->requestAction(); - -// 5. 결과 처리 -$buyerName = $_REQUEST["BuyerName"]; // 구매자명 -$goodsName = $_REQUEST["GoodsName"]; // 상품명 -// $buyerName = iconv("euc-kr", "utf-8", $connector->getResultData("BuyerName")); // 구매자명 -// $goodsName = iconv("euc-kr", "utf-8", $connector->getResultData("GoodsName")); // 상품명 - -$resultCode = $connector->getResultData("ResultCode"); // 결과코드 (정상 :3001 , 그 외 에러) -$resultMsg = $connector->getResultData("ResultMsg"); // 결과메시지 -$authDate = $connector->getResultData("AuthDate"); // 승인일시 YYMMDDHH24mmss -$authCode = $connector->getResultData("AuthCode"); // 승인번호 -$payMethod = $connector->getResultData("PayMethod"); // 결제수단 -$mid = $connector->getResultData("MID"); // 가맹점ID -$tid = $connector->getResultData("TID"); // 거래ID -$moid = $connector->getResultData("Moid"); // 주문번호 -$amt = $connector->getResultData("Amt"); // 금액 -$cardCode = $connector->getResultData("CardCode"); // 카드사 코드 -$cardName = $connector->getResultData("CardName"); // 결제카드사명 -$cardQuota = $connector->getResultData("CardQuota"); // 00:일시불,02:2개월 -$cardInterest = $connector->getResultData("CardInterest"); // 무이자 여부 (0:일반, 1:무이자) -$cardCl = $connector->getResultData("CardCl"); // 체크카드여부 (0:일반, 1:체크카드) -$cardBin = $connector->getResultData("CardBin"); // 카드BIN번호 -$cardPoint = $connector->getResultData("CardPoint"); // 카드사포인트사용여부 (0:미사용, 1:포인트사용, 2:세이브포인트사용) -$paySuccess = false; // 결제 성공 여부 - -$nonRepToken =$_REQUEST["NON_REP_TOKEN"]; //부인방지토큰값 - - -$resultMsg = iconv("euc-kr", "utf-8", $resultMsg); -$cardName = iconv("euc-kr", "utf-8", $cardName); - -/** 위의 응답 데이터 외에도 전문 Header와 개별부 데이터 Get 가능 */ -if($payMethod == "CARD"){ //신용카드 - if($resultCode == "3001") $paySuccess = true; // 결과코드 (정상 :3001 , 그 외 에러) + if( isset($data['is_inicis_mobile_kakaopay']) && $data['is_inicis_mobile_kakaopay'] == 'mobile' ){ + + include G5_SHOP_PATH.'/kakaopay/mobile_pay_result.php'; + return; + } } -if($paySuccess) { - $tno = $tid; - $amount = $amt; - $app_time = '20'.$authDate; - $bank_name = $cardName; - $depositor = ''; - $account = ''; - $commid = $cardCode; - $mobile_no = ''; - $app_no = $authCode; - $card_name = $cardName; - $pay_type = 'CARD'; - $escw_yn = '0'; -} else { - alert('[RESULT_CODE] : ' . $resultCode . '\\n[RESULT_MSG] : ' . $resultMsg); + +if( isset($_REQUEST['P_STATUS']) && isset($_REQUEST['P_TID']) && isset($_REQUEST['P_REQ_URL']) && isset($_POST['P_NOTI']) && isset($_POST['P_AMT']) ){ + include G5_SHOP_PATH.'/kakaopay/mobile_pay_result.php'; + return; } -?> + +include G5_SHOP_PATH.'/kakaopay/pc_pay_result.php'; +return; +?> \ No newline at end of file diff --git a/shop/kakaopay/lgcns_CNSpay.php b/shop/kakaopay/lgcns_CNSpay.php deleted file mode 100644 index 2812e2ea5..000000000 --- a/shop/kakaopay/lgcns_CNSpay.php +++ /dev/null @@ -1,475 +0,0 @@ -ActionUrl = $url; - } - public function CnsPayVersion($ver) { - $this->phpVersion = $ver; - } - public function CnsPayWebConnector($LogDir) { - $this->cancelUrl = $this->ActionUrl."/lite/cancelProcess.jsp"; - if (substr($LogDir, strlen($LogDir) - 1) == "/") { - $LogDir = substr($LogDir, 0, strlen($LogDir) - 1); - } - @mkdir($LogDir); - $this->LogPath = $LogDir."/"; - } - public function setRequestData($request) { - try { - foreach (array_keys($request) as $key) { - if(is_array($request[$key])) - continue; - - $this->requestData[$key] = iconv("UTF-8", "EUC-KR", $request[$key]); - } - return "_TRUE_"; - } catch (Exception $ex) { - $this->writeLog("setRequestData() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function addRequestData($key, $value) { - try { - $this->requestData[$key] = $value; - return "_TRUE_"; - } catch (Exception $ex) { - $this->writeLog("addRequestData() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function getResultData($key) { - try { - if (!in_array($key, array_keys($this->resultData))) { - return ""; - } else if ($key == "Amt") { - if ($this->resultData[$key] != null && $this->resultData[$key] != "null" && $this->resultData[$key] != "") { - return $this->resultData[$key]; - } else { - return "0"; - } - } - return $this->resultData[$key]; - } catch (Exception $ex) { - $this->writeLog("getResultData() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - - // 2014.12.02 추가 (check key in array) - private function getRequestData($key) { - if (array_key_exists($key, $this->requestData)) { - return $this->requestData[$key]; - } else { - return ""; - } - } - - public function requestAction() { - $encodeKey = $this->requestData["EncodeKey"]; - unset($this->requestData["EncodeKey"]); - try { - if ($this->requestData["actionType"] != "CL0" && $this->requestData["actionType"] != "CI0") { - if ($this->getRequestData("PayMethod") != "ESCROW") { - $this->requestData["TID"] = $this->generateTID($this->requestData["MID"], $this->getRequestData("PayMethod")); - } - } - $serviceUrl = $this->setActionType($this->requestData["actionType"], $this->getRequestData("PayMethod")); - if ($serviceUrl == "_FAIL_" || $serviceUrl == "CNSPAY_10") { - $this->resultData["ResultCode"] = "JL10"; - $this->resultData["ResultMsg"] = "actionType 설정이 잘못되었습니다."; - return "_FAIL_"; - } - $this->writeLog("Request"); - $this->writeLog($this->requestData); - $requestMessage = $this->makeRequestText($this->requestData); - $resultMessage = $this->connectToServer($serviceUrl, $requestMessage); - $this->writeLog("Result"); - // 2014.12.02 수신 전문 로깅 처리 제외 - //$this->writeLog($resultMessage); - if ($resultMessage == "_FAIL_" || substr($resultMessage, 0, 4) == "FAIL") { - $resultCode = ""; - $resultMsg = ""; - $netCancelFlag = $this->requestNetCancel(); - if ($netCancelFlag == "_TRUE_") { - $resultCode = "JL32"; - $resultMsg = "PGWEB서버 통신중 오류가 발생하였습니다. (NET_CANCEL)"; - } else { // netCancel 실패이면, - $resultCode = "JL33"; - $resultMsg = "네트웍이 불안정으로 승인 실패하였습니다. 결제가 비 정상 처리 될 수 있으니 거래내역을 반드시 확인해주십시오."; - } - $this->resultData["ResultCode"] = $resultCode; - $this->resultData["ResultMsg"] = $resultMsg; - return "_FAIL_"; - } - $resultMessage = $this->parseResult($resultMessage); - //$this->writeLog($this->resultData); - // 2014.12.02 로깅 시 주요 데이터 마스킹 처리 - $this->writeLog($this->resultDataMask($this->resultData)); - if ($resultMessage == "_FAIL_" || $resultMessage == "CNSPAY_41") { - $this->resultData["ResultCode"] = "JL41"; - $this->resultData["ResultMsg"] = "응답전문이 없습니다."; - return "_FAIL_"; - } - return "_TRUE_"; - } catch (Exception $ex) { - $this->writeLog("requestAction() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - - // 2014.12.02 결과 배열 마스킹 - private function resultDataMask($strLogText) { - $arrMask = array(); - if (is_array($strLogText)) { - foreach (array_keys($strLogText) as $key) { - $k = str_replace("\n", "", trim($key)); - $arrMask[$k] = $this->requestMask($k, $strLogText[$key]); - } - return $arrMask; - } else { - return str_replace("\n", "", trim($strLogText)); - } - } - - // 2014.12.02 주요 정보 마스킹 - private function requestMask ($name, $text) { - $value = str_replace("\n", "", trim($text)); - - if ($value == null || strlen(trim($value)) == 0) return ""; - - if ($name == "X_CARDNO" || $name == "realPan" || $name == "cardNo" - || $name == "CardBin" || $name == "CardNo") { - return $this->masking($value, 6, true, false); - } else if ($name == "BuyerName" || $name == "buyerName") { - return $this->masking($value, 1, true, false); - } else if ($name == "BuyerEmail") { - return $this->masking($value, 6, false, true); - } else if ($name == "BuyerTel" || $name == "DstAddr") { - return $this->masking($value, 5, false, false); - } else if ($name == "BuyerAddr") { - return $this->masking($value, 6, true, false); - } else if ($name == "UserIP" || $name == "MallIP" || $name == "CancelPwd" - || $name == "mallUserID" || $name == "MallUserID" - || $name == "CancelIP") { - return $this->masking($value, mb_strlen(iconv('euc-kr','utf-8',$value), 'utf-8'), true, true); - } else { - return $value; - } - } - - // 2014.12.02 마스킹 처리 - private function masking($string, $num, $isLeftOrder, $beginMasking) { - - if ( $string == null ) - return ""; - - $res = ""; - $res2 = ""; - $sleng = 0; - - $str = iconv('euc-kr','utf-8',$string); - $n = mb_strlen($str, 'utf-8'); - - if ( $num >= 1 ) { - if ( $n < $num ) { - $res = $str; - } else { - if($beginMasking) { - if ($isLeftOrder) { - $res = str_repeat("*", $n); - } else { - $sleng = $num; - $res2 = mb_substr($str, $sleng, $n, 'utf-8'); - for ( $j = 0; $j < $sleng; $j++ ) { - $res .= "*"; - } - $res .= $res2; - } - } else { - $sleng = $num; - $res2 = mb_substr($str, 0, $sleng, 'utf-8'); - for ( $j = $sleng; $j < $n; $j++ ) { - $res .= "*"; - } - $res = $res2 . $res; - } - } - } else { - $res = $str; - } - - return iconv('utf-8','euc-kr',$res); - } - - private function requestNetCancel() { - try { - // 예기치 못한 오류인경우 망상취소 시도. - $serviceUrl = $this->cancelUrl; - $this->requestData["actionType"] = "CL0"; - $this->requestData["CancelIP"] = $this->requestData["MallIP"]; - if ($this->requestData["Amt"] == null) { - return "_FAIL_"; - } else { - if (is_numeric($this->requestData["Amt"])) { - $this->requestData["CancelAmt"] = $this->requestData["Amt"]; - } else { - $this->requestData["CancelAmt"] = parameterDecrypt($encodeKey, $this->requestData["Amt"]); - } - } - $this->requestData["CancelMsg"] = "NICE_NET_CANCEL"; - $this->requestData["PartialCancelCode"] = "0"; - $this->requestData["NetCancelCode"] = "1"; - if ($this->getRequestData("PayMethod") == "BILL" || $this->getRequestData("PayMethod") == "KAKAOPAY") $this->requestData["PayMethod"] = "CARD"; - $requestMessage = makeRequestText($this->requestData); - $resultMessage = connectToServer($serviceUrl, $this->requestData); - if ($resultMessage == "_FAIL_" || substr($resultMessage, 0, 4) == "FAIL") { - $resultMessage = connectToServer2($serviceUrl, $this->requestData, 20); - if ($resultMessage == "_FAIL_" || substr($resultMessage, 0, 4) == "FAIL") { - //$this->resultData["ResultCode"] = "JL41"; - //$this->resultData["ResultMsg"] = "망상취소 오류"; - return "_FAIL_"; - } - } - return "_TRUE_"; - } catch (Exception $ex) { - $this->writeLog("requestNetCancel() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - private function generateTID($mid, $svcCd) { - try { - $iRandom = str_pad(rand(0, 9999), 4, "0", STR_PAD_LEFT); - return $mid.$this->getSvcCd($svcCd)."01".date("ymdHis").$iRandom; - } catch (Exception $ex) { - $this->writeLog("generateTID() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - private function getSvcCd($svcCd) { - try { - if ($svcCd == "CARD" || $svcCd == "BILL" || $svcCd == "KAKAOPAY") { - return "01"; - } else if ($svcCd == "BANK") { - return "02"; - } else if ($svcCd == "VBANK") { - return "03"; - } else if ($svcCd == "CELLPHONE") { - return "05"; - } else if ($svcCd == "MOBILE_BILLING") { - return "05"; - } else if ($svcCd == "MOBILE_BILL") { - return "05"; - } - return "00"; - } catch (Exception $ex) { - $this->writeLog("getSvcCd() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - private function setActionType($type, $paymethod) { - try { - if ($type == null) return "CNSPAY_10"; - $builder = $this->ActionUrl; - if ($type == "CL0") { - $builder = $builder."/lite/cancelProcess.jsp"; - } else if ($type == "CI0") { - $builder = $builder."/lite/tidInfoProcess.jsp"; - } else if ($type == "PY0") { - if ($paymethod == "CASHRCPT") { // 현금영수증인경우 - $builder = $builder."/lite/cashReceiptProcess.jsp"; - } else if ($paymethod == "BILL") { - $builder = $builder."/lite/billingProcess.jsp"; - } else if ($paymethod == "BILLKEY") { - $builder = $builder."/lite/billkeyProcess.jsp"; - } else if ($paymethod == "ESCROW") { - $builder = $builder."/lite/escrowProcess.jsp"; - } else if ($paymethod == "MOBILE_AUTH") { - $builder = $builder."/lite/mobileAuth.jsp"; - } else if ($paymethod == "MOBILE_BILL") { - $builder = $builder."/lite/mobileBill.jsp"; - } else if ($paymethod == "MOBILE_BILLING") { - $builder = $builder."/lite/mobileBillingProcess.jsp"; - } else if ($paymethod == "MOBILE_AUTH_REQ") { - $builder = $builder."/lite/mobileConfirmRequest.jsp"; - } else if ($paymethod == "MOBILE_AUTH_RES") { - $builder = $builder."/lite/mobileConfirmResult.jsp"; - } else if ($paymethod == "CARD_ARS") { - $builder = $builder."/lite/cardArsProcess.jsp"; - } else if ($paymethod == "MOBILE_AUTH_NS") { - $builder = $builder."/lite/mobileAuth_NS.jsp"; - } else if ($paymethod == "OM_SUB_INS") { - $builder = $builder."/lite/payproxy/subMallSetProcess.jsp"; - } else if ($paymethod == "OM_SUB_PAY") { - $builder = $builder."/lite/payproxy/subMallIcheProcess.jsp"; - } else if ($paymethod == "LOTTE_POINT") { - $builder = $builder."/api/checkLottePoint.jsp"; - } else if ($paymethod == "HPBILLKEY") { - $builder = $builder."/lite/hpBillkeyProcess.jsp"; - } else if ($paymethod == "HPCARD_AUTH") { - $builder = $builder."/lite/hpCardAuthProcess.jsp"; - } else if ($paymethod == "HPCARD_BILLKEY") { - $builder = $builder."/lite/hpCardBillkeyProcess.jsp"; - } else { - $builder = $builder."/lite/payProcess.jsp"; - } - } - return $builder; - } catch (Exception $ex) { - $this->writeLog("setActionType() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - private function makeRequestText($reqData) { - try { - $strParameter = ""; - foreach (array_keys($reqData) as $key) { - $strParameter = $strParameter.$key."=".urlencode($reqData[$key])."&"; - } - $strParameter = substr($strParameter, 0, strlen($strParameter) - 1); - return $strParameter; - } catch (Exception $ex) { - $this->writeLog("makeRequestText() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - private function connectToServer($urlStr, $reqData) { - try { - return $this->connectToServer2($urlStr, $reqData, 15); - } catch (Exception $ex) { - $this->writeLog("connectToServer() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - private function connectToServer2($urlStr, $reqData, $timeout) { - try { - // php에 cURL 모듈 설치 필요(리눅스 - curl.so, 윈도우 - php_curl.dll 확장모듈 필요) - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $urlStr); //접속할 URL 주소 - //curl_setopt($ch, CURLOPT_PORT, 6464); //접속할 port, 주소에 있으므로 설정하지 않음 - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 인증서 체크같은데 true 시 안되는 경우가 많다. - //curl_setopt($ch, CURLOPT_SSLVERSION, 3); // SSL 버젼 (https 접속시에 필요, 기본값으로 해야하므로 설정하지 않음) - curl_setopt($ch, CURLOPT_HEADER, 0); // 헤더 출력 여부 - curl_setopt($ch, CURLOPT_POST, 1); // Post Get 접속 여부 - curl_setopt($ch, CURLOPT_POSTFIELDS, $reqData); // Post 값 Get 방식처럼적는다. - curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); // TimeOut 값 - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 결과값을 받을것인지 - curl_setopt($ch, CURLOPT_USERAGENT, $this->phpVersion); // 버전 - $result = curl_exec($ch); - $errcode = curl_error($ch); - if ($errcode != "") $result = $errcode; - //$errcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); - //if ($errcode != 200) $result = $errcode; - curl_close($ch); - return $result; - } catch (Exception $ex) { - $this->writeLog("connectToServer2() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - private function parseResult($resultMessage) { - try { - if ($resultMessage == null) return "CNSPAY_41"; - $parsedArr = explode("|", $resultMessage); - foreach ($parsedArr as $valueArr) { - $posit = strpos($valueArr, "="); - $key = substr($valueArr, 0, $posit); - $value = substr($valueArr, $posit + 1); - $this->resultData[$key] = $value; - } - return "_TRUE_"; - } catch (Exception $ex) { - $this->writeLog("parseResult() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function writeLog($strLogText) { - $log_string = ""; - $exclude = array('MID', 'merchantEncKey', 'merchantHashKey', 'CancelPwd', 'site_cd', 'def_site_cd', 'CST_MID', 'LGD_MID'); - if (is_array($strLogText)) { - $log_string = "[".date("Y/m/d H:i:s")."] \r\n"; - foreach (array_keys($strLogText) as $key) { - if(in_array($key, $exclude)) - continue; - - if(preg_match('#^od_.+$#', $key)) - continue; - - $log_string = $log_string." [".$key."] => ".$strLogText[$key]."\r\n"; - } - } else { - $log_string = "[".date("Y/m/d H:i:s")."] ".$strLogText."\r\n"; - } - $log_filenm = $this->LogPath.date("Ymd")."_CNSpay.log"; - $log_file = fopen($log_filenm, "a"); - if($log_file == false) return; - flock($log_file, LOCK_EX); - //fwrite($log_file, $log_string); - fputs($log_file, $log_string); - fflush($log_file); - flock($log_file, LOCK_UN); - fclose($log_file); - } - public function makeDateString($sDate) { - try { - if ($sDate == null) return ""; - $strValue = ""; - if (strlen($sDate) == 12) { - $strValue = $strValue."20".substr($sDate, 0, 2)."-"; - $strValue = $strValue.substr($sDate, 2, 2)."-"; - $strValue = $strValue.substr($sDate, 4, 2). " "; - $strValue = $strValue.substr($sDate, 6, 2).":"; - $strValue = $strValue.substr($sDate, 8, 2).":"; - $strValue = $strValue.substr($sDate, 10, 2); - } else if (strlen($sDate) == 14) { - $strValue = $strValue.substr($sDate, 0, 4)."-"; - $strValue = $strValue.substr($sDate, 4, 2)."-"; - $strValue = $strValue.substr($sDate, 6, 2)." "; - $strValue = $strValue.substr($sDate, 8, 2).":"; - $strValue = $strValue.substr($sDate, 10, 2).":"; - $strValue = $strValue.substr($sDate, 12, 2); - } else if (strlen($sDate) == 8) { - $strValue = $strValue.substr($sDate, 0, 4)."-"; - $strValue = $strValue.substr($sDate, 4, 2)."-"; - $strValue = $strValue.substr($sDate, 6, 2); - } else { - $strValue = $sDate; - } - return $strValue; - } catch (Exception $ex) { - writeLog("makeDateString() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - - - public function makeHashInputString($salt) { - - $result = ""; - - for($count = 0;$count < strlen($salt)/2;$count++) { - $temp0 = substr($salt, 2*$count, 2); - $temp1 = hexdec($temp0); - $temp3 = reset(unpack("l", pack("l", $temp1 +0xffffff00))); - $temp4 = pack('C*', $temp3); - - $result = $result.$temp4; - - } - - return $result; - - } - - } -?> diff --git a/shop/kakaopay/lgcns_KMpay.php b/shop/kakaopay/lgcns_KMpay.php deleted file mode 100644 index 534b77603..000000000 --- a/shop/kakaopay/lgcns_KMpay.php +++ /dev/null @@ -1,384 +0,0 @@ -LogPath = $LogDir."/"; - } - public function setPhpVersion($version) { - $this->phpVersion = $version; - } - public function parameterEncrypt($key, $plainText) { - try { - $encryptText = ""; - $iv = ""; - if ($key == null || $plainText == null || $key == "" || $plainText == "" || strlen($key) < 16) { - return ""; - } else { - $iv = substr($key, 0, 16); - $encryptText = $this->AESCBCPKCS5($plainText, $key, $iv, "enc", "yes"); - } - return $encryptText; - } catch (Exception $ex) { - $this->writeLog("parameterEncrypt() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function parameterDecrypt($key, $EncryptText) { - try { - $decryptText = ""; - $iv = ""; - if ($key == null || $EncryptText == null || $key == "" || $EncryptText == "" || strlen($key) < 16) { - return "1"; - } else { - $iv = substr($key, 0, 16); - $decryptText = $this->AESCBCPKCS5($EncryptText, $key, $iv, "dec", "yes"); - } - return $decryptText; - } catch (Exception $ex) { - $this->writeLog("parameterDecrypt() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function PKCS5Pad($text, $blocksize = 16) { - try { - $pad = $blocksize - (strlen($text) % $blocksize); - return $text.str_repeat(chr($pad), $pad); - } catch (Exception $ex) { - $this->writeLog("PKCS5Pad() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function PKCS5UnPad($text) { - try { - $pad = ord($text{strlen($text)-1}); - if ($pad > strlen($text)) return $text; - if (!strspn($text, chr($pad), strlen($text) - $pad)) return $text; - return substr($text, 0, -1 * $pad); - } catch (Exception $ex) { - $this->writeLog("PKCS5UnPad() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function encrypt($iv, $key, $str) { - try { - $td = mcrypt_module_open("rijndael-128", "", "cbc", ""); - @mcrypt_generic_init($td, $key, $iv); - $encrypted = @mcrypt_generic($td, $this->PKCS5Pad($str)); - mcrypt_generic_deinit($td); - mcrypt_module_close($td); - return $encrypted; - } catch (Exception $ex) { - $this->writeLog("encrypt() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function decrypt($iv, $key, $code) { - try { - $td = mcrypt_module_open("rijndael-128", "", "cbc", ""); - @mcrypt_generic_init($td, $key, $iv); - $decrypted = @mdecrypt_generic($td, $code); - mcrypt_generic_deinit($td); - mcrypt_module_close($td); - return $this->PKCS5UnPad($decrypted); - } catch (Exception $ex) { - $this->writeLog("decrypt() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function AESCBCPKCS5($source_data, $key, $iv, $mode="enc", $base64="yes") { - try { - if ($mode == "dec") { - if ($base64 == "yes") return $this->decrypt($iv, $key, base64_decode($source_data)); - else return $this->decrypt($iv, $key, $source_data); - } - else { - if ($base64 == "yes") return base64_encode($this->encrypt($iv, $key, $source_data)); - else return $this->encrypt($iv, $key, $source_data); - } - } catch (Exception $ex) { - $this->writeLog("AESCBCPKCS5() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function connMPayDLP($urlStr, $mid, $encryptStr) { - try { - // php에 cURL 모듈 설치 필요(리눅스 - curl.so, 윈도우 - php_curl.dll 확장모듈 필요) - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $urlStr); //접속할 URL 주소 - //curl_setopt($ch, CURLOPT_PORT, 12443); //접속할 port, 주소에 있으므로 설정하지 않음 - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 인증서 체크같은데 true 시 안되는 경우가 많다. - //curl_setopt($ch, CURLOPT_SSLVERSION, 3); // SSL 버젼 (https 접속시에 필요, 기본값으로 해야하므로 설정하지 않음) - curl_setopt($ch, CURLOPT_HEADER, 0); // 헤더 출력 여부 - curl_setopt($ch, CURLOPT_POST, 1); // Post Get 접속 여부 - curl_setopt($ch, CURLOPT_POSTFIELDS, array("k" => $mid, "v" => $encryptStr)); // Post 값 Get 방식처럼적는다. - curl_setopt($ch, CURLOPT_TIMEOUT, 30); // TimeOut 값 - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 결과값을 받을것인지 - curl_setopt($ch, CURLOPT_USERAGENT, $this->phpVersion); // 버전 - $result = curl_exec($ch); - $errcode = curl_error($ch); - if ($errcode != "") $result = $errcode; - //$errcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); - //if ($errcode != 200) $result = $errcode; - curl_close($ch); - return $result; - } catch (Exception $ex) { - $this->writeLog("connMPayDLP() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function writeLog($strLogText) { - $log_string = ""; - if (is_array($strLogText)) { - $log_string = "[".date("Y/m/d H:i:s")."] \r\n"; - foreach (array_keys($strLogText) as $key) { - if($key == 'MERCHANT_ID') - continue; - - $log_string = $log_string." [".$key."] => ".$strLogText[$key]."\r\n"; - } - } else { - $log_string = "[".date("Y/m/d H:i:s")."] ".$strLogText."\r\n"; - } - $log_filenm = $this->LogPath.date("Ymd")."_KMpay.log"; - $log_file = fopen($log_filenm, "a"); - if($log_file == false) return; - flock($log_file, LOCK_EX); - //fwrite($log_file, $log_string); - fputs($log_file, $log_string); - fflush($log_file); - flock($log_file, LOCK_UN); - fclose($log_file); - } - } - class JsonString { - private $LogPath = ""; - private $strValues = array(); - public function JsonString($LogDir) { - if (substr($LogDir, strlen($LogDir) - 1) == "/") { - $LogDir = substr($LogDir, 0, strlen($LogDir) - 1); - } - @mkdir($LogDir); - $this->LogPath = $LogDir."/"; - } - public function setValue($key, $value) { - try { - $this->strValues[$key] = $value; - return "_TRUE_"; - } catch (Exception $ex) { - $this->writeLog("setValue() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function getValue($key) { - try { - if (!in_array($key, array_keys($this->strValues))) return ""; - return $this->strValues[$key]; - } catch (Exception $ex) { - $this->writeLog("getValue() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function getArrayValue() { - try { - return $this->strValues; - } catch (Exception $ex) { - $this->writeLog("getArrayValue() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function setJsonString($strJsonString) { - try { - $strJsonString = substr($strJsonString, 2, strlen($strJsonString) - 4); - $strItems = explode("\",\"", $strJsonString); - foreach ($strItems as $strItem) { - $strValue = explode("\":\"", $strItem); - $this->setValue($strValue[0], $strValue[1]); - } - return "_TRUE_"; - } catch (Exception $ex) { - $this->writeLog("setJsonString() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function getJsonString() { - try { - $strJsonString = "{"; - foreach (array_keys($this->strValues) as $key) { - $strJsonString = $strJsonString."\"".$key."\":"; - // 2014.11.25 str_replace 추가 - $strJsonString = $strJsonString."\"". str_replace(array("\\", "\""), array("\\\\", "\\\""), $this->strValues[$key])."\","; - } - $strJsonString = substr($strJsonString, 0, strlen($strJsonString)-1)."}"; - return $strJsonString; - } catch (Exception $ex) { - $this->writeLog("getJsonString() Exception Code ".$ex->getCode()." : ".$ex->getMessage()." in ".$ex->getFile()." on line ".$ex->getLine()); - return "_FAIL_"; - } - } - public function writeLog($strLogText) { - $log_string = ""; - if (is_array($strLogText)) { - $log_string = "[".date("Y/m/d H:i:s")."] \r\n"; - foreach (array_keys($strLogText) as $key) { - $log_string = $log_string." [".$key."] => ".$strLogText[$key]."\r\n"; - } - } else { - $log_string = "[".date("Y/m/d H:i:s")."] ".$strLogText."\r\n"; - } - $log_filenm = $this->LogPath.date("Ymd")."_KMpayLog.log"; - $log_file = fopen($log_filenm, "a"); - if($log_file == false) return; - flock($log_file, LOCK_EX); - //fwrite($log_file, $log_string); - fputs($log_file, $log_string); - fflush($log_file); - flock($log_file, LOCK_UN); - fclose($log_file); - } - } - - class KMPayDataValidator { - public $resultValid = ""; - public function KMPayDataValidator($value) { - $this->resultValid = $this->validator($value); - } - // 2014.12.02 추가 (check key in array) - private function getValueFromArray($arr, $key) { - if(array_key_exists($key, $arr)) { - return $arr[$key]; - } else { - return ""; - } - } - // 2014.12.02 수정 (getValueFromArray 사용) - private function validator($value) { - //필수정보 - $prType = $this->getValueFromArray($value, "PR_TYPE"); - $merchantID = $this->getValueFromArray($value, "MERCHANT_ID"); - $channelType = $this->getValueFromArray($value, "channelType"); - $merchantTxnNum = $this->getValueFromArray($value, "MERCHANT_TXN_NUM"); - $productName = $this->getValueFromArray($value, "PRODUCT_NAME"); - $amount = $this->getValueFromArray($value, "AMOUNT"); - $currency = $this->getValueFromArray($value, "CURRENCY"); - $returnUrl = $this->getValueFromArray($value, "RETURN_URL"); - - //추가정보 - $cardMerchantNum = $this->getValueFromArray($value, "CARD_MERCHANT_NUM"); - $supplyAmt = $this->getValueFromArray($value, "SUPPLY_AMT"); - $goodsVat = $this->getValueFromArray($value, "GOODS_VAT"); - $serviceAmt = $this->getValueFromArray($value, "SERVICE_AMT"); - $cancelTime = $this->getValueFromArray($value, "CANCEL_TIME"); - $fixedInt = $this->getValueFromArray($value, "FIXED_INT"); - $certifiedFlag = $this->getValueFromArray($value, "CERTIFIED_FLAG"); - $offerPeriodFlag = $this->getValueFromArray($value, "OFFER_PERIOD_FLAG"); - $offerPeriod = $this->getValueFromArray($value, "OFFER_PERIOD"); - - - if (strlen($certifiedFlag) == 0) { - $certifiedFlag = "N"; - } - if (strlen($supplyAmt) == 0) { - $supplyAmt = "0"; - } - if (strlen($goodsVat) == 0) { - $goodsVat = "0"; - } - if (strlen($cancelTime) == 0) { - $cancelTime = "1440"; - } - - //필수 - if (strlen($prType) == 0) { - return "USER_ERROR_CODE,804,결제요청타입은 필수입력사항 입니다."; - } - else if ($prType != "MPM" && $prType != "WPM") { - return "USER_ERROR_CODE,805,잘못된 결제요청타입 입니다."; - } - - if (strlen($merchantID) == 0) { - return "USER_ERROR_CODE,806,가맹점 ID 필수입력사항 입니다."; - } - else if (strlen($merchantID) > 38) { - return "USER_ERROR_CODE,808,가맹점 ID의 제한 길이가 초과 되었습니다."; - } - - if (strlen($merchantTxnNum) == 0) { - return "USER_ERROR_CODE,823,가맹점 거래번호는 필수입력사항 입니다."; - } - else if (strlen($merchantTxnNum) > 40) { - return "USER_ERROR_CODE,824,가맹점 거래번호의 제한 길이가 초과 되었습니다."; - } - - if (strlen($productName) == 0) { - return "USER_ERROR_CODE,809,상품명은 필수입력사항 입니다."; - } - else if (strlen($productName) > 200) { - return "USER_ERROR_CODE,810,상품명은 영문 200자 이내입니다."; - } - - if (strlen($amount) == 0) { - return "USER_ERROR_CODE,811,상품금액은 필수입력사항 입니다."; - } - else if (!is_numeric($amount)){ - return "USER_ERROR_CODE,812,상품금액은 숫자형입니다."; - } - - if (strlen($currency) == 0) { - return "USER_ERROR_CODE,813,거래통화는 필수입력사항 입니다."; - } - - if ($certifiedFlag == "CN") { - //웹결제에서는 필수체크 안함 - } - else if (strlen($certifiedFlag) == 0) { - return "USER_ERROR_CODE,830,결제승인결과전송URL은 필수입력사항 입니다."; - } - - if (strlen($cardMerchantNum) > 0 && !is_numeric($cardMerchantNum)) { - return "USER_ERROR_CODE,814,카드 가맹점 번호는 숫자형입니다."; - } - - if (strlen($supplyAmt) > 0 && !is_numeric($supplyAmt)) { - return "USER_ERROR_CODE,815,공급가액은 숫자형입니다."; - } - - if (strlen($goodsVat) > 0 && !is_numeric($goodsVat)) { - return "USER_ERROR_CODE,816,부가세는 숫자형입니다."; - } - - if (strlen($serviceAmt) > 0 && !is_numeric($serviceAmt)) { - return "USER_ERROR_CODE,817,봉사료는 숫자형입니다."; - } - - if (strlen($cancelTime) > 0 && !is_numeric($cancelTime)) { - return "USER_ERROR_CODE,818,결제취소시간(분)은 숫자형입니다."; - } - - if (strlen($fixedInt) == 0) { - // 정상 - } - else if (!is_numeric($fixedInt)) { - return "USER_ERROR_CODE,820,고정할부개월이 잘못되었습니다."; - } - else if (!((0 <= intval($fixedInt) && intval($fixedInt) <= 24) || $fixedInt == "36")) { - return "USER_ERROR_CODE,820,고정할부개월이 잘못되었습니다."; - } - - if ($certifiedFlag != "N" && $certifiedFlag != "CN") { - return "USER_ERROR_CODE,831,가맹점 인증 구분값은 N 혹은 CN 입니다"; - } - - return ""; - } - } -?> \ No newline at end of file diff --git a/shop/kakaopay/makehashdata.php b/shop/kakaopay/makehashdata.php deleted file mode 100644 index e35eaed61..000000000 --- a/shop/kakaopay/makehashdata.php +++ /dev/null @@ -1,21 +0,0 @@ -makeHashInputString($salt); -$hash_calc = hash("sha256", $hash_input, false); -$hash_String = base64_encode($hash_calc); - -die(json_encode(array('hash_String' => $hash_String, 'error' => ''))); -?> \ No newline at end of file diff --git a/shop/kakaopay/makesignature.php b/shop/kakaopay/makesignature.php new file mode 100644 index 000000000..7b8bf7d77 --- /dev/null +++ b/shop/kakaopay/makesignature.php @@ -0,0 +1,37 @@ +'올바른 방법으로 이용해 주십시오.'))); +} + +$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", $default['de_kakaopay_key']); + +/* + //*** 위변조 방지체크를 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))); +?> \ No newline at end of file diff --git a/shop/kakaopay/mobile_orderform.1.php b/shop/kakaopay/mobile_orderform.1.php new file mode 100644 index 000000000..1b4c86ced --- /dev/null +++ b/shop/kakaopay/mobile_orderform.1.php @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/shop/kakaopay/mobile_pay_approval.php b/shop/kakaopay/mobile_pay_approval.php new file mode 100644 index 000000000..8a1a276ac --- /dev/null +++ b/shop/kakaopay/mobile_pay_approval.php @@ -0,0 +1,204 @@ + $it_stock_qty) + $error .= "{$row['ct_option']} 의 재고수량이 부족합니다. 현재고수량 : $it_stock_qty 개\\n\\n"; + } + + if($i == 0) + alert('장바구니가 비어 있습니다.', G5_SHOP_URL.'/cart.php'); + + if ($error != "") + { + $error .= "결제진행이 중단 되었습니다."; + alert($error, G5_SHOP_URL.'/cart.php'); + } +} + +if($_REQUEST['P_STATUS'] != '00') { + alert('오류 : '.iconv_utf8($_REQUEST['P_RMESG1']).' 코드 : '.$_REQUEST['P_STATUS'], $page_return_url); +} else { + $post_data = array( + 'P_MID' => $default['de_kakaopay_mid'], + 'P_TID' => $_REQUEST['P_TID'] + ); + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_PORT, 443); + curl_setopt($ch, CURLOPT_URL, $_REQUEST['P_REQ_URL']); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $return = curl_exec($ch); + + if(!$return) + alert('KG이니시스와 통신 오류로 결제등록 요청을 완료하지 못했습니다.\\n결제등록 요청을 다시 시도해 주십시오.', $page_return_url); + + // 결과를 배열로 변환 + parse_str($return, $ret); + $PAY = array_map('trim', $ret); + $PAY = array_map('strip_tags', $PAY); + $PAY = array_map('get_search_string', $PAY); + + if($PAY['P_STATUS'] != '00') + alert('오류 : '.iconv_utf8($PAY['P_RMESG1']).' 코드 : '.$PAY['P_STATUS'], $page_return_url); + + // TID, AMT 를 세션으로 주문완료 페이지 전달 + $hash = md5($PAY['P_TID'].$PAY['P_MID'].$PAY['P_AMT']); + set_session('P_TID', $PAY['P_TID']); + set_session('P_AMT', $PAY['P_AMT']); + set_session('P_HASH', $hash); +} + +$params = array(); + +//개인결제 +if(isset($data['pp_id']) && !empty($data['pp_id'])) { + // 개인결제 정보 + $pp_check = false; + $sql = " select * from {$g5['g5_shop_personalpay_table']} where pp_id = '{$PAY['P_OID']}' and pp_tno = '{$PAY['P_TID']}' and pp_use = '1' "; + $pp = sql_fetch($sql); + + if( !$pp['pp_tno'] && $data['pp_id'] == $oid ){ + $res_cd = $PAY['P_STATUS']; + $pp_id = $oid; + + $exclude = array('res_cd', 'P_HASH', 'P_TYPE', 'P_AUTH_DT', 'P_VACT_BANK', 'LGD_PAYKEY', 'pp_id', 'good_mny', 'pp_name', 'pp_email', 'pp_hp', 'pp_settle_case'); + + foreach($data as $key=>$v) { + if( !in_array($key, $exclude) ){ + $_POST[$key] = $params[$key] = clean_xss_tags(strip_tags($v)); + } + } + + $good_mny = $PAY['P_AMT']; + $pp_name = clean_xss_tags($data['pp_name']); + $pp_email = clean_xss_tags($data['pp_email']); + $pp_hp = clean_xss_tags($data['pp_hp']); + $pp_settle_case = clean_xss_tags($data['pp_settle_case']); + + $_POST['P_HASH'] = $hash; + $_POST['P_AUTH_NO'] = $PAY['P_AUTH_NO']; + $_POST['pp_id'] = $PAY['P_OID']; + $_POST['good_mny'] = $PAY['P_AMT']; + + $_POST['P_TYPE'] = $PAY['P_TYPE']; + $_POST['P_AUTH_DT'] = $PAY['P_AUTH_DT']; + $_POST['P_AUTH_NO'] = $PAY['P_AUTH_NO']; + $_POST['P_HPP_CORP'] = $PAY['P_HPP_CORP']; + $_POST['P_APPL_NUM'] = $PAY['P_APPL_NUM']; + $_POST['P_VACT_NUM'] = $PAY['P_VACT_NUM']; + $_POST['P_VACT_NAME'] = iconv_utf8($PAY['P_VACT_NAME']); + $_POST['P_VACT_BANK'] = $BANK_CODE[$PAY['P_VACT_BANK_CODE']]; + $_POST['P_CARD_ISSUER'] = $CARD_CODE[$PAY['P_CARD_ISSUER_CODE']]; + $_POST['P_UNAME'] = iconv_utf8($PAY['P_UNAME']); + + include_once( G5_MSHOP_PATH.'/personalpayformupdate.php' ); + } + +} else { + // 상점 결제 + $exclude = array('res_cd', 'P_HASH', 'P_TYPE', 'P_AUTH_DT', 'P_VACT_BANK', 'P_AUTH_NO'); + + foreach($data as $key=>$value) { + if(!empty($exclude) && in_array($key, $exclude)) + continue; + + if(is_array($value)) { + foreach($value as $k=>$v) { + $_POST[$key][$k] = $params[$key][$k] = clean_xss_tags(strip_tags($v)); + } + } else { + $_POST[$key] = $params[$key] = clean_xss_tags(strip_tags($value)); + } + } + + $res_cd = $_POST['res_cd'] = $PAY['P_STATUS']; + $P_HASH = $_POST['P_HASH'] = $hash; + $P_TYPE = $_POST['P_TYPE'] = $PAY['P_TYPE']; + $P_AUTH_DT = $_POST['P_AUTH_DT'] = $PAY['P_AUTH_DT']; + $P_AUTH_NO = $_POST['P_AUTH_NO'] = $PAY['P_AUTH_NO']; + $P_HPP_CORP = $_POST['P_HPP_CORP'] = $PAY['P_HPP_CORP']; + $P_APPL_NUM = $_POST['P_APPL_NUM'] = $PAY['P_APPL_NUM']; + $P_VACT_NUM = $_POST['P_VACT_NUM'] = $PAY['P_VACT_NUM']; + $P_VACT_NAME = $_POST['P_VACT_NAME'] = iconv_utf8($PAY['P_VACT_NAME']); + $P_VACT_BANK = $_POST['P_VACT_BANK'] = $BANK_CODE[$PAY['P_VACT_BANK_CODE']]; + $P_CARD_ISSUER = $_POST['P_CARD_ISSUER'] = $CARD_CODE[$PAY['P_CARD_ISSUER_CODE']]; + $P_UNAME = $_POST['P_UNAME'] = iconv_utf8($PAY['P_UNAME']); + + $check_keys = array('od_name', 'od_tel', 'od_pwd', 'od_hp', 'od_zip', 'od_addr1', 'od_addr2', 'od_addr3', 'od_addr_jibeon', 'od_email', 'ad_default', 'ad_subject', 'od_hope_date', 'od_b_name', 'od_b_tel', 'od_b_hp', 'od_b_zip', 'od_b_addr1', 'od_b_addr2', 'od_b_addr3', 'od_b_addr_jibeon', 'od_memo', 'od_settle_case', 'max_temp_point', 'od_temp_point', 'od_send_cost', 'od_send_cost2', 'od_bank_account', 'od_deposit_name', 'od_test', 'od_ip'); + + foreach($check_keys as $key){ + $$key = isset($params[$key]) ? $params[$key] : ''; + } + + include_once( G5_MSHOP_PATH.'/orderformupdate.php' ); +} +exit; +?> \ No newline at end of file diff --git a/shop/kakaopay/mobile_pay_result.php b/shop/kakaopay/mobile_pay_result.php new file mode 100644 index 000000000..bcfea6d5f --- /dev/null +++ b/shop/kakaopay/mobile_pay_result.php @@ -0,0 +1,41 @@ + \ No newline at end of file diff --git a/shop/kakaopay/mobile_pay_return.php b/shop/kakaopay/mobile_pay_return.php new file mode 100644 index 000000000..07017ccf5 --- /dev/null +++ b/shop/kakaopay/mobile_pay_return.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/shop/kakaopay/mobile_settle_common.php b/shop/kakaopay/mobile_settle_common.php new file mode 100644 index 000000000..07017ccf5 --- /dev/null +++ b/shop/kakaopay/mobile_settle_common.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/shop/kakaopay/orderform.1.php b/shop/kakaopay/orderform.1.php index 2ecf87f84..f7fcbcfaa 100644 --- a/shop/kakaopay/orderform.1.php +++ b/shop/kakaopay/orderform.1.php @@ -1,55 +1,108 @@ + +', 10); ?> - - +
- + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
- \ No newline at end of file + \ No newline at end of file diff --git a/shop/kakaopay/orderform.2.php b/shop/kakaopay/orderform.2.php index 240ce5097..ee9b277e4 100644 --- a/shop/kakaopay/orderform.2.php +++ b/shop/kakaopay/orderform.2.php @@ -2,35 +2,17 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 if($is_kakaopay_use) { - $remoteaddr = $_SERVER['REMOTE_ADDR']; - $serveraddr = $_SERVER['SERVER_ADDR']; ?>
- - - - - - - - - - - - - - - - - - - + + +
- - - \ No newline at end of file +?> \ No newline at end of file diff --git a/shop/kakaopay/orderpartcancel.inc.php b/shop/kakaopay/orderpartcancel.inc.php index 29924e1a3..b1d78548c 100644 --- a/shop/kakaopay/orderpartcancel.inc.php +++ b/shop/kakaopay/orderpartcancel.inc.php @@ -5,65 +5,62 @@ if($od['od_pg'] != 'KAKAOPAY') return; include_once(G5_SHOP_PATH.'/settle_kakaopay.inc.php'); -include_once(G5_SHOP_PATH.'/kakaopay/incKakaopayCommon.php'); -include_once(G5_SHOP_PATH.'/kakaopay/lgcns_CNSpay.php'); +$vat_mny = round((int)$tax_mny / 1.1); -$CancelNo = (int)$od['od_casseqno'] + 1; -$vat_mny = round((int)$tax_mny / 1.1); +$currency = 'WON'; +$oldtid = $od['od_tno']; +$price = (int)$tax_mny + (int)$free_mny; +$confirm_price = (int)$od['od_receipt_price'] - (int)$od['od_refund_price'] - $price; +$buyeremail = $od['od_email']; +$tax = (int)$tax_mny - $vat_mny; +$taxfree = (int)$free_mny; -$_REQUEST['TID'] = $od['od_tno']; -$_REQUEST['Amt'] = (int)$tax_mny + (int)$free_mny; -$_REQUEST['CancelMsg'] = $mod_memo; -$_REQUEST['PartialCancelCode'] = 1; -$_REQUEST['CheckRemainAmt'] = (int)$od['od_receipt_price'] - (int)$od['od_refund_price']; -$_REQUEST['CancelNo'] = $CancelNo; -$_REQUEST['SupplyAmt'] = ((int)$tax_mny + (int)$free_mny - $vat_mny); -$_REQUEST['GoodsVat'] = $vat_mny; -$_REQUEST['ServiceAmt'] = 0; +/*********************** + * 3. 재승인 정보 설정 * + ***********************/ +$inipay->SetField("type", "repay"); // 고정 (절대 수정 불가) +$inipay->SetField("pgid", "INIphpRPAY"); // 고정 (절대 수정 불가) +$inipay->SetField("subpgip", "203.238.3.10"); // 고정 +$inipay->SetField("mid", $default['de_kakaopay_mid']); // 상점아이디 +$inipay->SetField("admin", $default['de_kakaopay_cancelpwd']); //비대칭 사용키 키패스워드 +$inipay->SetField("oldtid", $oldtid); // 취소할 거래의 거래아이디 +$inipay->SetField("currency", $currency); // 화폐단위 +$inipay->SetField("price", $price); // 취소금액 +$inipay->SetField("confirm_price", $confirm_price); // 승인요청금액 +$inipay->SetField("buyeremail", $buyeremail); // 구매자 이메일 주소 +$inipay->SetField("tax", $tax); // 부가세금액 +$inipay->SetField("taxfree", $taxfree); // 비과세금액 + +/****************** + * 4. 재승인 요청 * + ******************/ +$inipay->startAction(); -// 로그 저장 위치 지정 -$connector = new CnsPayWebConnector($LogDir); -$connector->CnsActionUrl($CnsPayDealRequestUrl); -$connector->CnsPayVersion($phpVersion); -$connector->setRequestData($_REQUEST); -$connector->addRequestData("actionType", "CL0"); -$connector->addRequestData("CancelPwd", $cancelPwd); -$connector->addRequestData("CancelIP", $_SERVER['REMOTE_ADDR']); +/******************************************************************* + * 5. 재승인 결과 * + * * + * 신거래번호 : $inipay->getResult('TID') * + * 결과코드 : $inipay->getResult('ResultCode') ("00"이면 재승인 성공) * + * 결과내용 : $inipay->getResult('ResultMsg') (재승인결과에 대한 설명) * + * 원거래 번호 : $inipay->getResult('PRTC_TID') * + * 최종결제 금액 : $inipay->getResult('PRTC_Remains') * + * 부분취소 금액 : $inipay->getResult('PRTC_Price') * + * 부분취소,재승인 구분값 : $inipay->getResult('PRTC_Type') * + * ("0" : 재승인, "1" : 부분취소) * + * 부분취소(재승인) 요청횟수 : $inipay->getResult('PRTC_Cnt') * + *******************************************************************/ -//가맹점키 셋팅 (MID 별로 틀림) -$connector->addRequestData("EncodeKey", $merchantKey); - -// 4. CNSPAY Lite 서버 접속하여 처리 -$connector->requestAction(); - -// 5. 결과 처리 -$resultCode = $connector->getResultData("ResultCode"); // 결과코드 (정상 :2001(취소성공), 2002(취소진행중), 그 외 에러) -$resultMsg = $connector->getResultData("ResultMsg"); // 결과메시지 -$cancelAmt = $connector->getResultData("CancelAmt"); // 취소금액 -$cancelDate = $connector->getResultData("CancelDate"); // 취소일 -$cancelTime = $connector->getResultData("CancelTime"); // 취소시간 -$payMethod = $connector->getResultData("PayMethod"); // 취소 결제수단 -$mid = $connector->getResultData("MID"); // 가맹점 ID -$tid = $connector->getResultData("TID"); // TID -$errorCD = $connector->getResultData("ErrorCD"); // 상세 에러코드 -$errorMsg = $connector->getResultData("ErrorMsg"); // 상세 에러메시지 -$authDate = $cancelDate . $cancelTime; // 거래시간 -$ccPartCl = $connector->getResultData("CcPartCl"); // 부분취소 가능여부 (0:부분취소불가, 1:부분취소가능) -$stateCD = $connector->getResultData("StateCD"); // 거래상태코드 (0: 승인, 1:전취소, 2:후취소) -$authDate = $connector->makeDateString($authDate); -$errorMsg = iconv("euc-kr", "utf-8", $errorMsg); -$resultMsg = iconv("euc-kr", "utf-8", $resultMsg); - -if($resultCode == "2001" || $resultCode == "2002") { - $mod_mny = (int)$tax_mny + (int)$free_mny; + if($inipay->getResult('ResultCode') == '00') { + // 환불금액기록 + $tno = $inipay->getResult('PRTC_TID'); + $re_price = $inipay->getResult('PRTC_Price'); $sql = " update {$g5['g5_shop_order_table']} - set od_refund_price = od_refund_price + '$mod_mny', - od_shop_memo = concat(od_shop_memo, \"$mod_memo\"), - od_casseqno = '$CancelNo' + set od_refund_price = od_refund_price + '$re_price', + od_shop_memo = concat(od_shop_memo, \"$mod_memo\") where od_id = '{$od['od_id']}' - and od_tno = '{$od['od_tno']}' "; + and od_tno = '$tno' "; sql_query($sql); // 미수금 등의 정보 업데이트 @@ -76,7 +73,7 @@ if($resultCode == "2001" || $resultCode == "2002") { od_free_mny = '{$info['od_free_mny']}' where od_id = '$od_id' "; sql_query($sql); -} else { - alert($resultMsg . ' 코드 : ' . $resultCode); -} + } else { + alert(iconv_utf8($inipay->GetResult("ResultMsg")).' 코드 : '.$inipay->GetResult("ResultCode")); + } ?> \ No newline at end of file diff --git a/shop/kakaopay/pc_pay_result.php b/shop/kakaopay/pc_pay_result.php new file mode 100644 index 000000000..aafe762cb --- /dev/null +++ b/shop/kakaopay/pc_pay_result.php @@ -0,0 +1,215 @@ +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'] = $default['de_kakaopay_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 = preg_replace('/[^A-Za-z0-9\-_]/', '', $resultMap['MOID']); + + /************************* 결제보안 추가 2016-05-18 START ****************************/ + $secureMap['mid'] = $default['de_kakaopay_mid']; //mid + $secureMap['tstamp'] = $timestamp; //timestemp + $secureMap['MOID'] = $resultMap['MOID']; //MOID + $secureMap['TotPrice'] = $resultMap['TotPrice']; //TotPrice + + // signature 데이터 생성 + $secureSignature = $util->makeSignatureAuth($secureMap); + /************************* 결제보안 추가 2016-05-18 END ****************************/ + + $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']) { + $page_return_url = G5_SHOP_URL.'/personalpayform.php?pp_id='.$data['pp_id']; + } else { + $page_return_url = G5_SHOP_URL.'/orderform.php'; + if($_SESSION['ss_direct']) + $page_return_url .= '?sw_direct=1'; + } + + if ((strcmp('0000', $resultMap['resultCode']) == 0) && (strcmp($secureSignature, $resultMap['authSignature']) == 0) ) { //결제보안 추가 2016-05-18 + /* * *************************************************************************** + * 여기에 가맹점 내부 DB에 결제 결과를 반영하는 관련 프로그램 코드를 구현한다. + + [중요!] 승인내용에 이상이 없음을 확인한 뒤 가맹점 DB에 해당건이 정상처리 되었음을 반영함 + 처리중 에러 발생시 망취소를 한다. + * **************************************************************************** */ + + //최종결제요청 결과 성공 DB처리 + $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[$resultMap['ACCT_BankCode']]; + if ($default['de_escrow_use'] == 1) + $escw_yn = 'Y'; + break; + case '가상계좌': + $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; + } + + $inicis_pay_result = true; + + } 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 "
", $netcancelResultString . "
"; + // 취소 결과 확인 + } + } else { + + //############# + // 인증 실패시 + //############# + echo "
"; + echo "####인증실패####"; + + ob_start(); + var_dump($_REQUEST); + $debug_msg = ob_get_contents(); + ob_clean(); + + echo "
" . strip_tags($debug_msg) . "
"; + } +} catch (Exception $e) { + $s = $e->getMessage() . ' (오류코드:' . $e->getCode() . ')'; + echo $s; +} + +if( !$inicis_pay_result ){ + die("

결제 에러가 일어났습니다. 에러 이유는 위와 같습니다."); +} +?> \ No newline at end of file diff --git a/shop/orderinquiryview.php b/shop/orderinquiryview.php index 7779b7674..6fb244884 100644 --- a/shop/orderinquiryview.php +++ b/shop/orderinquiryview.php @@ -370,7 +370,9 @@ if($od['od_pg'] == 'lg') { if($od['od_settle_case'] == 'KAKAOPAY') { - $card_receipt_script = 'window.open(\'https://mms.cnspay.co.kr/trans/retrieveIssueLoader.do?TID='.$od['od_tno'].'&type=0\', \'popupIssue\', \'toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=420,height=540\');'; + //$card_receipt_script = 'window.open(\'https://mms.cnspay.co.kr/trans/retrieveIssueLoader.do?TID='.$od['od_tno'].'&type=0\', \'popupIssue\', \'toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=420,height=540\');'; + $card_receipt_script = 'window.open(\'https://iniweb.inicis.com/DefaultWebApp/mall/cr/cm/mCmReceipt_head.jsp?noTid='.$od['od_tno'].'&noMethod=1\',\'receipt\',\'width=430,height=700\');'; + ?> 영수증 출력 영수증 출력