From cbd70fbe18829c5d61b0b0dabbd593a1085170b0 Mon Sep 17 00:00:00 2001 From: thisgun Date: Fri, 24 Jul 2026 06:25:17 +0000 Subject: [PATCH] =?UTF-8?q?KG=EC=9D=B4=EB=8B=88=EC=8B=9C=EC=8A=A4=20?= =?UTF-8?q?=EC=83=81=EC=A0=90=EA=B4=80=EB=A6=AC=EC=9E=90=EC=97=90=EC=84=9C?= =?UTF-8?q?=20=EB=A8=BC=EC=A0=80=20=EC=B7=A8=EC=86=8C=ED=95=9C=20INIpay=20?= =?UTF-8?q?PRO=20=EC=A3=BC=EB=AC=B8=EC=9D=98=20=EC=A0=84=EC=B2=B4=EC=B7=A8?= =?UTF-8?q?=EC=86=8C=20=ED=97=88=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 전체취소 전에 KG 거래상태를 조회해 이미 취소된 거래이면 주문 취소만 진행 - 조회 결과와 처리 사유를 결제 현황 이력에 기록 Co-Authored-By: Claude Fable 5 --- adm/shop_admin/orderformcartupdate.php | 65 +++++++++++++++++--------- 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/adm/shop_admin/orderformcartupdate.php b/adm/shop_admin/orderformcartupdate.php index 3b1f3a6ff..ffbbfdc81 100644 --- a/adm/shop_admin/orderformcartupdate.php +++ b/adm/shop_admin/orderformcartupdate.php @@ -50,35 +50,54 @@ if (in_array($_POST['ct_status'], $status_cancel)) { where ip_oid = '".sql_escape_string($pre_od['od_id'])."' and ip_tid = '".sql_escape_string($pre_od['od_tno'])."' ", false); if (!empty($pro_summary['ip_id'])) { - if (!isset($_POST['pg_cancel']) || (int) $_POST['pg_cancel'] !== 1) - alert('INIpay PRO 주문은 PG 승인취소를 함께 처리해야 전체취소할 수 있습니다. PG 승인취소를 선택한 후 다시 처리해 주십시오.'); - $inicis_pro_order_lock = inicis_pro_lock($pre_od['od_id']); if ($inicis_pro_order_lock === '') alert('동일 주문의 결제 또는 통보 처리가 진행 중입니다. 잠시 후 다시 취소해 주십시오.'); - $pro_environment = !empty($pro_summary['ip_environment']) ? $pro_summary['ip_environment'] : inicis_pro_environment(); - if ($pro_summary['ip_mid'] !== inicis_pro_get_mid(!empty($pro_summary['ip_pay_type']) ? $pro_summary['ip_pay_type'] : null) || $pro_environment !== inicis_pro_environment()) - alert('거래 당시 MID 또는 결제환경과 현재 설정이 달라 PG 취소를 실행할 수 없습니다. KG이니시스 상점관리자에서 원거래를 확인해 주십시오.'); + // KG이니시스 상점관리자에서 이미 취소한 거래이면 PG 취소 없이 주문 취소만 진행한다. + $pre_inquiry = inicis_pro_inquiry($pre_od['od_tno'], $pre_od['od_id'], $pro_summary); + $pre_inquiry_data = isset($pre_inquiry['data']) && is_array($pre_inquiry['data']) ? $pre_inquiry['data'] : array(); + $pre_pg_status = isset($pre_inquiry_data['status']) ? strtoupper(preg_replace('/[^A-Za-z0-9_]/', '', (string) $pre_inquiry_data['status'])) : ''; - include_once(G5_SHOP_PATH.'/settle_inicis.inc.php'); - $pre_cancel_args = array( - 'paymethod' => get_type_inicis_paymethod($pre_od['od_settle_case']), - 'tid' => $pre_od['od_tno'], - 'mid' => $pro_summary['ip_mid'], - 'audit_oid' => $pre_od['od_id'], - 'audit_source' => 'admin', - 'msg' => '쇼핑몰 운영자 승인 취소', - 'url' => $pro_environment === 'test' ? 'https://stginiapi.inicis.com/api/v1/refund' : 'https://iniapi.inicis.com/api/v1/refund' - ); - $pre_cancel_response = inicis_tid_cancel($pre_cancel_args); - $pre_cancel_result = json_decode($pre_cancel_response, true); - if (!isset($pre_cancel_result['resultCode']) || $pre_cancel_result['resultCode'] !== '00') { - $pre_cancel_code = !empty($pre_cancel_result['resultCode']) ? $pre_cancel_result['resultCode'] : 'COMMUNICATION_FAILED'; - $pre_cancel_message = !empty($pre_cancel_result['resultMsg']) ? $pre_cancel_result['resultMsg'] : 'KG이니시스 취소 응답을 확인하지 못했습니다.'; - alert($pre_cancel_message.' 코드 : '.$pre_cancel_code); + if (!empty($pre_inquiry['success']) && in_array($pre_pg_status, array('1', 'C', 'CANCEL', 'DEPOSIT_CANCELED', 'REFUND_COMPLETED'))) { + inicis_pro_save_inquiry($pre_od['od_id'], $pre_inquiry, 'admin'); + inicis_pro_audit_write($pre_od['od_id'], 'cancel', 'canceled', array( + 'tid' => $pre_od['od_tno'], + 'mid' => $pro_summary['ip_mid'], + 'amount' => isset($pro_summary['ip_amount']) ? (int) $pro_summary['ip_amount'] : 0, + 'pay_type' => isset($pro_summary['ip_pay_type']) ? $pro_summary['ip_pay_type'] : '', + 'source' => 'admin', + 'code' => $pre_pg_status, + 'message' => 'KG이니시스에서 이미 취소된 거래로 확인되어 주문 취소만 진행합니다.' + )); + $inicis_pro_cancel_preprocessed = true; + } else { + if (!isset($_POST['pg_cancel']) || (int) $_POST['pg_cancel'] !== 1) + alert('INIpay PRO 주문은 PG 승인취소를 함께 처리해야 전체취소할 수 있습니다. PG 승인취소를 선택한 후 다시 처리해 주십시오.'); + + $pro_environment = !empty($pro_summary['ip_environment']) ? $pro_summary['ip_environment'] : inicis_pro_environment(); + if ($pro_summary['ip_mid'] !== inicis_pro_get_mid(!empty($pro_summary['ip_pay_type']) ? $pro_summary['ip_pay_type'] : null) || $pro_environment !== inicis_pro_environment()) + alert('거래 당시 MID 또는 결제환경과 현재 설정이 달라 PG 취소를 실행할 수 없습니다. KG이니시스 상점관리자에서 원거래를 확인해 주십시오.'); + + include_once(G5_SHOP_PATH.'/settle_inicis.inc.php'); + $pre_cancel_args = array( + 'paymethod' => get_type_inicis_paymethod($pre_od['od_settle_case']), + 'tid' => $pre_od['od_tno'], + 'mid' => $pro_summary['ip_mid'], + 'audit_oid' => $pre_od['od_id'], + 'audit_source' => 'admin', + 'msg' => '쇼핑몰 운영자 승인 취소', + 'url' => $pro_environment === 'test' ? 'https://stginiapi.inicis.com/api/v1/refund' : 'https://iniapi.inicis.com/api/v1/refund' + ); + $pre_cancel_response = inicis_tid_cancel($pre_cancel_args); + $pre_cancel_result = json_decode($pre_cancel_response, true); + if (!isset($pre_cancel_result['resultCode']) || $pre_cancel_result['resultCode'] !== '00') { + $pre_cancel_code = !empty($pre_cancel_result['resultCode']) ? $pre_cancel_result['resultCode'] : 'COMMUNICATION_FAILED'; + $pre_cancel_message = !empty($pre_cancel_result['resultMsg']) ? $pre_cancel_result['resultMsg'] : 'KG이니시스 취소 응답을 확인하지 못했습니다.'; + alert($pre_cancel_message.' 코드 : '.$pre_cancel_code); + } + $inicis_pro_cancel_preprocessed = true; } - $inicis_pro_cancel_preprocessed = true; } } }