INIpay PRO 주문 전체취소 흐름 개선
- 부분취소 이력이 있는 주문은 잔여 금액을 부분취소로 처리해 전체취소 지원 - 부분취소로 전액 환불된 주문과 KG에서 이미 취소된 주문은 주문 취소만 진행 - PG 승인취소 미선택 시 차단하지 않고 주문만 취소하며 처리 내용을 이력에 기록 - 남은 품목 취소로 주문 전체가 취소되는 경우에도 PG 취소 여부 확인창 표시 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
f8c06a26cb
commit
8fcbd2a9b1
@@ -1110,7 +1110,13 @@ function form_submit(f)
|
||||
var cancel_pg = "PG사의 <?php echo $od['od_settle_case']; ?>";
|
||||
<?php } ?>
|
||||
|
||||
if(chk_cnt == chked_cnt) {
|
||||
// 체크하지 않은 나머지 품목이 모두 취소류 상태이면 이번 처리로 주문 전체가 취소된다.
|
||||
var remain_active_cnt = $ct_chk.not(":checked").filter(function() {
|
||||
var row_status = $.trim($(this).closest("tr").find("td.td_mngsmall").first().text());
|
||||
return row_status != "취소" && row_status != "반품" && row_status != "품절";
|
||||
}).length;
|
||||
|
||||
if(chked_cnt > 0 && remain_active_cnt == 0) {
|
||||
if(confirm(cancel_pg+" 결제를 함께 취소하시겠습니까?\n\n한번 취소한 결제는 다시 복구할 수 없습니다.")) {
|
||||
f.pg_cancel.value = 1;
|
||||
msg = cancel_pg+" 결제 취소와 함께 ";
|
||||
|
||||
@@ -72,31 +72,73 @@ if (in_array($_POST['ct_status'], $status_cancel)) {
|
||||
));
|
||||
$inicis_pro_cancel_preprocessed = true;
|
||||
} else {
|
||||
if (!isset($_POST['pg_cancel']) || (int) $_POST['pg_cancel'] !== 1)
|
||||
alert('INIpay PRO 주문은 PG 승인취소를 함께 처리해야 전체취소할 수 있습니다. PG 승인취소를 선택한 후 다시 처리해 주십시오.');
|
||||
$pre_refunded = (int) $pre_od['od_refund_price'];
|
||||
$pre_remaining = (int) $pre_od['od_receipt_price'] - $pre_refunded;
|
||||
|
||||
$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이니시스 상점관리자에서 원거래를 확인해 주십시오.');
|
||||
if ($pre_refunded > 0 && $pre_remaining <= 0) {
|
||||
// 이전 부분취소로 결제금액이 모두 환불된 주문은 PG 취소 없이 주문 취소만 진행한다.
|
||||
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',
|
||||
'message' => '이전 부분취소로 결제금액이 모두 환불되어 주문 취소만 진행합니다.'
|
||||
));
|
||||
$inicis_pro_cancel_preprocessed = true;
|
||||
} elseif (!isset($_POST['pg_cancel']) || (int) $_POST['pg_cancel'] !== 1) {
|
||||
// PG 승인취소 없이 주문만 취소하는 선택을 이력에 남긴다. 결제는 KG이니시스에 승인 상태로 남는다.
|
||||
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',
|
||||
'message' => 'PG 승인취소 없이 주문만 취소했습니다. 결제는 KG이니시스에 남아 있습니다.',
|
||||
'event_only' => '1'
|
||||
));
|
||||
} else {
|
||||
$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);
|
||||
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_is_part = $pre_refunded > 0 && $pre_remaining > 0;
|
||||
if ($pre_cancel_is_part) {
|
||||
$pre_cancel_args['msg'] = '쇼핑몰 운영자 승인 취소(잔여금액)';
|
||||
$pre_cancel_args['price'] = $pre_remaining;
|
||||
$pre_cancel_args['confirmPrice'] = 0;
|
||||
}
|
||||
$pre_cancel_response = inicis_tid_cancel($pre_cancel_args, $pre_cancel_is_part);
|
||||
$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 ($pre_cancel_is_part) {
|
||||
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' => '00',
|
||||
'message' => '잔여 금액 부분취소로 전체취소를 완료했습니다.'
|
||||
));
|
||||
}
|
||||
$inicis_pro_cancel_preprocessed = true;
|
||||
}
|
||||
$inicis_pro_cancel_preprocessed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user