From 5a36b2d85dbb64304e72ebe6d0c3f9dc407845af Mon Sep 17 00:00:00 2001 From: thisgun Date: Thu, 11 Jun 2026 09:11:31 +0000 Subject: [PATCH] =?UTF-8?q?=EB=82=98=EC=9D=B4=EC=8A=A4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=20=ED=86=B5=EC=A7=80=EC=99=80=20=EC=B7=A8=EC=86=8C=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=20=EC=B2=98=EB=A6=AC=20=EB=B3=B4=EA=B0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit e65d17d227028fc5eabe4d6a831485bf27685c01) --- shop/nicepay/cancel_process.php | 3 +- shop/settle_nicepay_common.php | 62 ++++++++++++++++++++++++--------- 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/shop/nicepay/cancel_process.php b/shop/nicepay/cancel_process.php index 398bc190f..7a5528716 100644 --- a/shop/nicepay/cancel_process.php +++ b/shop/nicepay/cancel_process.php @@ -50,8 +50,9 @@ try{ $responseCancelAmt = isset($result['CancelAmt']) ? $result['CancelAmt'] : $cancelAmt; $responseSignature = isset($result['Signature']) ? $result['Signature'] : ''; $responseSignData = bin2hex(hash('sha256', $responseTid . $mid . $responseCancelAmt . $merchantKey, true)); + $isCancelSuccess = ($result['ResultCode'] === '2001' || $result['ResultCode'] === '2211'); - if ($responseSignature != $responseSignData) { + if (($isCancelSuccess || $responseSignature) && $responseSignature != $responseSignData) { $result['ResultCode'] = '9998'; $result['ResultMsg'] = '취소 응답 유효성 검증 실패'; } diff --git a/shop/settle_nicepay_common.php b/shop/settle_nicepay_common.php index 517139303..39878ea64 100644 --- a/shop/settle_nicepay_common.php +++ b/shop/settle_nicepay_common.php @@ -38,10 +38,17 @@ if (in_array($_SERVER['REMOTE_ADDR'], $pg_allow_ips)) { $RcptType = isset($_POST['RcptType']) ? addslashes(clean_xss_tags(stripslashes($_POST['RcptType']))) : ''; //현금 영수증 구분(0:미발행, 1:소득공제용, 2:지출증빙용) $RcptAuthCode = isset($_POST['RcptAuthCode']) ? addslashes(clean_xss_tags(stripslashes($_POST['RcptAuthCode']))) : ''; //현금영수증 승인번호 + $nicepay_mid = $default['de_card_test'] ? 'nicepay00m' : 'SR'.$default['de_nicepay_mid']; + + if ($M_ID !== $nicepay_mid) { + echo "FAIL"; + exit; + } + // 입금통보 코드가 4110 성공이면 if ($ResultCode === '4110') { // 입금결과 처리 - $sql = " select pp_id, od_id, pp_price from {$g5['g5_shop_personalpay_table']} where pp_id = '$MOID' and pp_app_no = '$VbankNum' "; + $sql = " select pp_id, od_id, pp_price, pp_receipt_price from {$g5['g5_shop_personalpay_table']} where pp_id = '$MOID' and pp_app_no = '$VbankNum' "; $row = sql_fetch($sql); $result = false; @@ -50,22 +57,43 @@ if (in_array($_SERVER['REMOTE_ADDR'], $pg_allow_ips)) { if($is_personalpay_order) { if((int)$row['pp_price'] === $Amt) { - // 개인결제 UPDATE - $sql = " update {$g5['g5_shop_personalpay_table']} - set pp_receipt_price = '$Amt', - pp_receipt_time = '$receipt_time' - where pp_id = '$MOID' - and pp_app_no = '$VbankNum' "; - $result = sql_query($sql, false); + $personalpay_memo = "개인결제 ".$row['pp_id']." 로 결제완료"; - if($row['od_id']) { - // 주문서 UPDATE - $sql = " update {$g5['g5_shop_order_table']} - set od_receipt_price = od_receipt_price + '$Amt', - od_receipt_time = '$receipt_time', - od_shop_memo = concat(od_shop_memo, \"\\n개인결제 ".$row['pp_id']." 로 결제완료 - ".$receipt_time."\") - where od_id = '{$row['od_id']}' "; - $result = sql_query($sql, FALSE); + if((int)$row['pp_receipt_price'] === $Amt) { + if($row['od_id']) { + $od_row = sql_fetch(" select od_id, od_shop_memo from {$g5['g5_shop_order_table']} where od_id = '{$row['od_id']}' "); + + if(isset($od_row['od_id']) && $od_row['od_id'] && strpos($od_row['od_shop_memo'], $personalpay_memo) === false) { + $sql = " update {$g5['g5_shop_order_table']} + set od_receipt_price = od_receipt_price + '$Amt', + od_receipt_time = '$receipt_time', + od_shop_memo = concat(od_shop_memo, \"\\n".$personalpay_memo." - ".$receipt_time."\") + where od_id = '{$row['od_id']}' "; + $result = sql_query($sql, FALSE); + } else { + $result = true; + } + } else { + $result = true; + } + } else if((int)$row['pp_receipt_price'] === 0) { + // 개인결제 UPDATE + $sql = " update {$g5['g5_shop_personalpay_table']} + set pp_receipt_price = '$Amt', + pp_receipt_time = '$receipt_time' + where pp_id = '$MOID' + and pp_app_no = '$VbankNum' "; + $result = sql_query($sql, false); + + if($row['od_id']) { + // 주문서 UPDATE + $sql = " update {$g5['g5_shop_order_table']} + set od_receipt_price = od_receipt_price + '$Amt', + od_receipt_time = '$receipt_time', + od_shop_memo = concat(od_shop_memo, \"\\n".$personalpay_memo." - ".$receipt_time."\") + where od_id = '{$row['od_id']}' "; + $result = sql_query($sql, FALSE); + } } } } else { @@ -136,7 +164,7 @@ if (in_array($_SERVER['REMOTE_ADDR'], $pg_allow_ips)) { fwrite( $logfile,"************************************************\r\n"); fwrite( $logfile,"PayMethod : ".$PayMethod."\r\n"); - fwrite( $logfile,"MID : ".$MID."\r\n"); + fwrite( $logfile,"MID : ".$M_ID."\r\n"); fwrite( $logfile,"MallUserID : ".$MallUserID."\r\n"); fwrite( $logfile,"Amt : ".$Amt."\r\n"); fwrite( $logfile,"name : ".$name."\r\n");