Files
2026-06-11 18:47:38 +09:00

97 lines
2.8 KiB
PHP

<?php
include_once('./_common.php');
if (!$is_admin) {
alert('관리자만 접근 가능합니다.');
}
check_admin_token();
$od_id = $_POST['od_id'] ?? '';
$cancel_memo = $_POST['cancel_memo'] ?? '관리자 취소';
$cancel_amount = isset($_POST['cancel_amount']) ? (int)$_POST['cancel_amount'] : 0;
if (!$od_id) {
alert('주문번호가 없습니다.');
}
$sql = " SELECT * FROM {$g5['g5_shop_order_table']} WHERE od_id = '{$od_id}' ";
$order = sql_fetch($sql);
if (!$order['od_id']) {
alert('존재하지 않는 주문입니다.');
}
if (!$order['od_pg'] || !$order['od_tno']) {
alert('PG 결제 정보가 없어 취소할 수 없습니다.');
}
// PG사에 따라 필요한 변수 설정
$tno = $order['od_tno'];
$od_pg = $order['od_pg'];
// 부분취소 여부 및 금액 설정
$is_partial = false;
if ($cancel_amount > 0) {
if ($cancel_amount > $order['od_receipt_price']) {
alert('취소 금액은 결제 금액보다 클 수 없습니다.');
}
$is_partial = true;
$amount = $cancel_amount;
} else {
$amount = $order['od_receipt_price'];
}
// PG사별 취소 로직 분기
switch ($od_pg) {
case 'kcp':
$_POST['req_tx'] = 'mod';
$_POST['mod_type'] = $is_partial ? 'STPC' : 'STSC'; // 부분취소: STPC, 전체취소: STSC
$_POST['mod_id'] = $od_id;
$_POST['mod_mny'] = $amount;
$_POST['rem_mny'] = $is_partial ? ($order['od_receipt_price'] - $amount) : 0;
include_once(G5_SHOP_PATH.'/kcp/pp_ax_hub_cancel.php');
break;
case 'lg':
$_POST['LGD_TID'] = $tno;
if ($is_partial) {
$_POST['LGD_TXNAME'] = 'PartialCancel';
$_POST['LGD_CANCELAMOUNT'] = $amount;
} else {
$_POST['LGD_TXNAME'] = 'Cancel';
}
include_once(G5_SHOP_PATH.'/lg/xpay_cancel.php');
break;
case 'inicis':
$_POST['type'] = 'cancel';
$_POST['mid'] = $default['de_inicis_mid'];
$_POST['tid'] = $tno;
$_POST['msg'] = $cancel_memo;
if ($is_partial) {
$_POST['price'] = $amount; // 부분취소 금액
$_POST['confirm_price'] = $order['od_receipt_price'] - $amount; // 남은 금액
$_POST['partial_cancel'] = '1';
}
include_once(G5_SHOP_PATH.'/inicis/inipay_cancel.php');
break;
case 'nicepay':
$cancelAmt = $amount;
$partialCancelCode = $is_partial ? '1' : '0'; // 부분취소: 1, 전체취소: 0
include_once(G5_SHOP_PATH.'/nicepay/cancel_process.php');
break;
default:
alert('지원하지 않는 PG사입니다.');
break;
}
alert('PG사에 취소 요청을 전송했습니다. 최종 결과는 PG사 관리자 페이지에서 확인해주세요.', './payment_list.php');
?>