diff --git a/adm/shop_admin/configform.php b/adm/shop_admin/configform.php index d135b0b0f..3c9d34505 100644 --- a/adm/shop_admin/configform.php +++ b/adm/shop_admin/configform.php @@ -690,7 +690,10 @@ if(!isset($default['de_kakaopay_mid'])) { - + + + 카카오페이 서비스신청하기 + KHSIR m diff --git a/mobile/shop/orderform.php b/mobile/shop/orderform.php index 4940635ec..9e75fa6d5 100644 --- a/mobile/shop/orderform.php +++ b/mobile/shop/orderform.php @@ -28,6 +28,7 @@ $s_cart_id = $tmp_cart_id; $order_action_url = G5_HTTPS_MSHOP_URL.'/orderformupdate.php'; require_once(G5_MSHOP_PATH.'/settle_'.$default['de_pg_service'].'.inc.php'); +require_once(G5_SHOP_PATH.'/settle_kakaopay.inc.php'); // 결제등록 요청시 사용할 입금마감일 $ipgm_date = date("Ymd", (G5_SERVER_TIME + 86400 * 5)); @@ -268,6 +269,12 @@ require_once(G5_MSHOP_PATH.'/'.$default['de_pg_service'].'/orderform.1.php'); ?> + +
@@ -554,10 +561,17 @@ require_once(G5_MSHOP_PATH.'/'.$default['de_pg_service'].'/orderform.1.php'); $escrow_title = "에스크로 "; } - if ($default['de_bank_use'] || $default['de_vbank_use'] || $default['de_iche_use'] || $default['de_card_use'] || $default['de_hp_use'] || $default['de_easy_pay_use']) { + if ($is_kakaopay_use || $default['de_bank_use'] || $default['de_vbank_use'] || $default['de_iche_use'] || $default['de_card_use'] || $default['de_hp_use'] || $default['de_easy_pay_use']) { echo '
    '; } + // 카카오페이 + if($is_kakaopay_use) { + $multi_settle++; + echo '
  • '.PHP_EOL; + $checked = ''; + } + // 무통장입금 사용 if ($default['de_bank_use']) { $multi_settle++; @@ -677,12 +691,22 @@ require_once(G5_MSHOP_PATH.'/'.$default['de_pg_service'].'/orderform.1.php'); + + f.buyr_name.value = pf.od_name.value; f.buyr_mail.value = pf.od_email.value; diff --git a/mobile/shop/orderformupdate.php b/mobile/shop/orderformupdate.php index 9c337949f..663538f22 100644 --- a/mobile/shop/orderformupdate.php +++ b/mobile/shop/orderformupdate.php @@ -9,7 +9,7 @@ if(get_session('ss_direct')) $page_return_url .= '?sw_direct=1'; // 결제등록 완료 체크 -if($od_settle_case != '무통장') { +if($od_settle_case != '무통장' && $od_settle_case != 'KAKAOPAY') { if($default['de_pg_service'] == 'kcp' && ($_POST['tran_cd'] == '' || $_POST['enc_info'] == '' || $_POST['enc_data'] == '')) alert('결제등록 요청 후 주문해 주십시오.', $page_return_url); @@ -418,22 +418,48 @@ else if ($od_settle_case == "간편결제") if($od_misu == 0) $od_status = '입금'; } +else if ($od_settle_case == "KAKAOPAY") +{ + include G5_SHOP_PATH.'/kakaopay/kakaopay_result.php'; + + $od_tno = $tno; + $od_app_no = $app_no; + $od_receipt_price = $amount; + $od_receipt_point = $i_temp_point; + $od_receipt_time = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/", "\\1-\\2-\\3 \\4:\\5:\\6", $app_time); + $od_bank_account = $card_name; + $pg_price = $amount; + $od_misu = $i_price - $od_receipt_price; + if($od_misu == 0) + $od_status = '입금'; +} else { die("od_settle_case Error!!!"); } +$od_pg = $default['de_pg_service']; +if($od_settle_case == 'KAKAOPAY') + $od_pg = 'KAKAOPAY'; + // 주문금액과 결제금액이 일치하는지 체크 if($tno) { if((int)$order_price !== (int)$pg_price) { $cancel_msg = '결제금액 불일치'; - switch($default['de_pg_service']) { + switch($od_pg) { case 'lg': include G5_SHOP_PATH.'/lg/xpay_cancel.php'; break; case 'inicis': include G5_SHOP_PATH.'/inicis/inipay_cancel.php'; break; + case 'KAKAOPAY': + $_REQUEST['TID'] = $tno; + $_REQUEST['Amt'] = $amount; + $_REQUEST['CancelMsg'] = $cancel_msg; + $_REQUEST['PartialCancelCode'] = 0; + include G5_SHOP_PATH.'/kakaopay/kakaopay_cancel.php'; + break; default: include G5_SHOP_PATH.'/kcp/pp_ax_hub_cancel.php'; break; @@ -465,7 +491,6 @@ if($default['de_tax_flag_use']) { $od_free_mny = (int)$_POST['comm_free_mny']; } -$od_pg = $default['de_pg_service']; $od_email = get_email_address($od_email); $od_name = clean_xss_tags($od_name); $od_tel = clean_xss_tags($od_tel); @@ -547,13 +572,20 @@ $result = sql_query($sql, false); if(!$result) { if($tno) { $cancel_msg = '주문정보 입력 오류'; - switch($default['de_pg_service']) { + switch($od_pg) { case 'lg': include G5_SHOP_PATH.'/lg/xpay_cancel.php'; break; case 'inicis': include G5_SHOP_PATH.'/inicis/inipay_cancel.php'; break; + case 'KAKAOPAY': + $_REQUEST['TID'] = $tno; + $_REQUEST['Amt'] = $amount; + $_REQUEST['CancelMsg'] = $cancel_msg; + $_REQUEST['PartialCancelCode'] = 0; + include G5_SHOP_PATH.'/kakaopay/kakaopay_cancel.php'; + break; default: include G5_SHOP_PATH.'/kcp/pp_ax_hub_cancel.php'; break; @@ -564,7 +596,7 @@ if(!$result) { $error = 'order'; include G5_SHOP_PATH.'/ordererrormail.php'; - die('

    고객님의 주문 정보를 처리하는 중 오류가 발생해서 주문이 완료되지 않았습니다.

    '.strtoupper($default['de_pg_service']).'를 이용한 전자결제(신용카드, 계좌이체, 가상계좌 등)은 자동 취소되었습니다.'); + die('

    고객님의 주문 정보를 처리하는 중 오류가 발생해서 주문이 완료되지 않았습니다.

    '.strtoupper($od_pg).'를 이용한 전자결제(신용카드, 계좌이체, 가상계좌 등)은 자동 취소되었습니다.'); } // 장바구니 상태변경 @@ -586,13 +618,20 @@ $result = sql_query($sql, false); if(!$result) { if($tno) { $cancel_msg = '주문상태 변경 오류'; - switch($default['de_pg_service']) { + switch($od_pg) { case 'lg': include G5_SHOP_PATH.'/lg/xpay_cancel.php'; break; case 'inicis': include G5_SHOP_PATH.'/inicis/inipay_cancel.php'; break; + case 'KAKAOPAY': + $_REQUEST['TID'] = $tno; + $_REQUEST['Amt'] = $amount; + $_REQUEST['CancelMsg'] = $cancel_msg; + $_REQUEST['PartialCancelCode'] = 0; + include G5_SHOP_PATH.'/kakaopay/kakaopay_cancel.php'; + break; default: include G5_SHOP_PATH.'/kcp/pp_ax_hub_cancel.php'; break; @@ -606,7 +645,7 @@ if(!$result) { // 주문삭제 sql_query(" delete from {$g5['g5_shop_order_table']} where od_id = '$od_id' "); - die('

    고객님의 주문 정보를 처리하는 중 오류가 발생해서 주문이 완료되지 않았습니다.

    '.strtoupper($default['de_pg_service']).'를 이용한 전자결제(신용카드, 계좌이체, 가상계좌 등)은 자동 취소되었습니다.'); + die('

    고객님의 주문 정보를 처리하는 중 오류가 발생해서 주문이 완료되지 않았습니다.

    '.strtoupper($od_pg).'를 이용한 전자결제(신용카드, 계좌이체, 가상계좌 등)은 자동 취소되었습니다.'); } // 회원이면서 포인트를 사용했다면 포인트 테이블에 사용을 추가 diff --git a/mobile/shop/orderinquiryview.php b/mobile/shop/orderinquiryview.php index 26c885469..262c5fdd4 100644 --- a/mobile/shop/orderinquiryview.php +++ b/mobile/shop/orderinquiryview.php @@ -240,7 +240,7 @@ if($od['od_pg'] == 'lg') { $disp_bank = true; $disp_receipt = false; $easy_pay_name = ''; - if($od['od_settle_case'] == '신용카드') { + if($od['od_settle_case'] == '신용카드' || $od['od_settle_case'] == 'KAKAOPAY') { $app_no_subj = '승인번호'; $app_no = $od['od_app_no']; $disp_bank = false; @@ -379,6 +379,14 @@ if($od['od_pg'] == 'lg') { 영수증 출력 + 영수증 출력 + diff --git a/shop/kakaopay/kakaopay_cancel.php b/shop/kakaopay/kakaopay_cancel.php new file mode 100644 index 000000000..be19daf7f --- /dev/null +++ b/shop/kakaopay/kakaopay_cancel.php @@ -0,0 +1,39 @@ +CnsActionUrl($CnsPayDealRequestUrl); +$connector->CnsPayVersion($phpVersion); +$connector->setRequestData($_REQUEST); +$connector->addRequestData("actionType", "CL0"); +$connector->addRequestData("CancelPwd", $cancelPwd); +$connector->addRequestData("CancelIP", $_SERVER['REMOTE_ADDR']); + +//가맹점키 셋팅 (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); +?> \ No newline at end of file diff --git a/shop/kakaopay/kakaopay_result.php b/shop/kakaopay/kakaopay_result.php index 490fb1835..3ed788bcb 100644 --- a/shop/kakaopay/kakaopay_result.php +++ b/shop/kakaopay/kakaopay_result.php @@ -1,8 +1,8 @@ requestData[$key] = iconv("UTF-8", "EUC-KR", $request[$key]); } return "_TRUE_"; @@ -62,7 +65,7 @@ return "_FAIL_"; } } - + // 2014.12.02 추가 (check key in array) private function getRequestData($key) { if (array_key_exists($key, $this->requestData)) { @@ -71,7 +74,7 @@ return ""; } } - + public function requestAction() { $encodeKey = $this->requestData["EncodeKey"]; unset($this->requestData["EncodeKey"]); @@ -92,7 +95,7 @@ $requestMessage = $this->makeRequestText($this->requestData); $resultMessage = $this->connectToServer($serviceUrl, $requestMessage); $this->writeLog("Result"); - // 2014.12.02 수신 전문 로깅 처리 제외 + // 2014.12.02 수신 전문 로깅 처리 제외 //$this->writeLog($resultMessage); if ($resultMessage == "_FAIL_" || substr($resultMessage, 0, 4) == "FAIL") { $resultCode = ""; @@ -124,7 +127,7 @@ return "_FAIL_"; } } - + // 2014.12.02 결과 배열 마스킹 private function resultDataMask($strLogText) { $arrMask = array(); @@ -138,14 +141,14 @@ 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" + + 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") { @@ -164,20 +167,20 @@ 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; @@ -205,10 +208,10 @@ } else { $res = $str; } - + return iconv('utf-8','euc-kr',$res); } - + private function requestNetCancel() { try { // 예기치 못한 오류인경우 망상취소 시도. @@ -441,10 +444,10 @@ return "_FAIL_"; } } - - + + public function makeHashInputString($salt) { - + $result = ""; for($count = 0;$count < strlen($salt)/2;$count++) { @@ -452,14 +455,14 @@ $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/orderform.2.php b/shop/kakaopay/orderform.2.php index 090c4f607..608316229 100644 --- a/shop/kakaopay/orderform.2.php +++ b/shop/kakaopay/orderform.2.php @@ -13,13 +13,13 @@ if($is_kakaopay_use) { - + - + diff --git a/shop/orderformupdate.php b/shop/orderformupdate.php index b8d7896ac..e1037db21 100644 --- a/shop/orderformupdate.php +++ b/shop/orderformupdate.php @@ -439,6 +439,11 @@ if($tno) { include G5_SHOP_PATH.'/inicis/inipay_cancel.php'; break; case 'KAKAOPAY': + $_REQUEST['TID'] = $tno; + $_REQUEST['Amt'] = $amount; + $_REQUEST['CancelMsg'] = $cancel_msg; + $_REQUEST['PartialCancelCode'] = 0; + include G5_SHOP_PATH.'/kakaopay/kakaopay_cancel.php'; break; default: include G5_SHOP_PATH.'/kcp/pp_ax_hub_cancel.php'; @@ -559,6 +564,11 @@ if(!$result) { include G5_SHOP_PATH.'/inicis/inipay_cancel.php'; break; case 'KAKAOPAY': + $_REQUEST['TID'] = $tno; + $_REQUEST['Amt'] = $amount; + $_REQUEST['CancelMsg'] = $cancel_msg; + $_REQUEST['PartialCancelCode'] = 0; + include G5_SHOP_PATH.'/kakaopay/kakaopay_cancel.php'; break; default: include G5_SHOP_PATH.'/kcp/pp_ax_hub_cancel.php'; @@ -600,6 +610,11 @@ if(!$result) { include G5_SHOP_PATH.'/inicis/inipay_cancel.php'; break; case 'KAKAOPAY': + $_REQUEST['TID'] = $tno; + $_REQUEST['Amt'] = $amount; + $_REQUEST['CancelMsg'] = $cancel_msg; + $_REQUEST['PartialCancelCode'] = 0; + include G5_SHOP_PATH.'/kakaopay/kakaopay_cancel.php'; break; default: include G5_SHOP_PATH.'/kcp/pp_ax_hub_cancel.php'; diff --git a/shop/orderinquiryview.php b/shop/orderinquiryview.php index 0bbd8e1fd..930686dde 100644 --- a/shop/orderinquiryview.php +++ b/shop/orderinquiryview.php @@ -257,7 +257,7 @@ if($od['od_pg'] == 'lg') { $app_no_subj = ''; $disp_bank = true; $disp_receipt = false; - if($od['od_settle_case'] == '신용카드') { + if($od['od_settle_case'] == '신용카드' || $od['od_settle_case'] == 'KAKAOPAY') { $app_no_subj = '승인번호'; $app_no = $od['od_app_no']; $disp_bank = false; @@ -396,6 +396,14 @@ if($od['od_pg'] == 'lg') { 영수증 출력 + 영수증 출력 +