97 lines
2.8 KiB
PHP
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');
|
|
?>
|