KG이니시스 상점관리자에서 먼저 취소한 INIpay PRO 주문의 전체취소 허용

- 전체취소 전에 KG 거래상태를 조회해 이미 취소된 거래이면 주문 취소만 진행
- 조회 결과와 처리 사유를 결제 현황 이력에 기록

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
thisgun
2026-07-24 06:25:17 +00:00
co-authored by Claude Fable 5
parent bc07b8383e
commit cbd70fbe18
+42 -23
View File
@@ -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;
}
}
}