미완료주문을 주문으로 확정할 때 임시 데이터에서 복원한 결제수단, 접속 IP, 테스트 결제 여부를 정제 없이 사용하던 것을 이웃 필드와 동일한 방식으로 처리한다. 접속 IP는 표기 형식에 맞지 않으면 저장하지 않고, 테스트 결제 여부는 정수로만 저장하며, 세 값 모두 배열로 전달된 경우를 함께 걸러낸다. 임시주문 저장 시 접속 IP와 테스트 결제 여부를 서버에서 결정하는 처리가 일반 주문 분기 안에만 있어 개인결제 경로에서는 요청값이 그대로 저장되던 것을 분기 밖으로 옮겨 항상 서버 값을 사용하도록 한다. 결제수단 값이 그대로 출력되던 관리자 주문상세, 주문목록, 부분취소 화면과 구매자 주문조회 화면(웹/모바일/테마)에 get_text() 인코딩을 적용한다. 주문상세는 표시 문자열을 여러 곳에서 재사용하므로 생성 지점에서 처리한다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> (cherry picked from commit 77069575096881a31b29fdf130c83226610bf8df)
77 lines
2.5 KiB
PHP
77 lines
2.5 KiB
PHP
<?php
|
|
include_once('./_common.php');
|
|
|
|
// 요청 출처 검증
|
|
if (function_exists('check_request_origin')) check_request_origin(G5_SHOP_URL);
|
|
|
|
if(empty($_POST))
|
|
die('정보가 넘어오지 않았습니다.');
|
|
|
|
// 일정 기간이 경과된 임시 데이터 삭제
|
|
/*
|
|
$limit_time = date("Y-m-d H:i:s", (G5_SERVER_TIME - 86400 * 1));
|
|
$sql = " delete from {$g5['g5_shop_order_data_table']} where dt_type = '1' and dt_time < '$limit_time' ";
|
|
sql_query($sql);
|
|
*/
|
|
|
|
$od_settle_case = isset($_POST['od_settle_case']) ? clean_xss_tags($_POST['od_settle_case'], 1, 1) : '';
|
|
// 저장되는 원본에도 정제한 값을 반영한다.
|
|
$_POST['od_settle_case'] = $od_settle_case;
|
|
|
|
// 결제환경 정보는 요청값을 사용하지 않고 서버에서 결정한다.
|
|
$_POST['od_test'] = $default['de_card_test'];
|
|
$_POST['od_ip'] = function_exists('get_real_client_ip') ? get_real_client_ip() : $_SERVER['REMOTE_ADDR'];
|
|
|
|
if(isset($_POST['pp_id']) && $_POST['pp_id']) {
|
|
$od_id = get_session('ss_personalpay_id');
|
|
$cart_id = 0;
|
|
|
|
$sql = "select pp_use, pp_tno from {$g5['g5_shop_personalpay_table']} where pp_id = '$od_id' ";
|
|
$pp_row = sql_fetch($sql);
|
|
|
|
if( $pp_row['pp_tno'] ){
|
|
die('해당 개인결제는 이미 결제되었습니다.');
|
|
} else if( ! $pp_row['pp_use'] ){
|
|
die('해당 개인결제는 사용이 금지되어 있습니다.');
|
|
}
|
|
|
|
} else {
|
|
$od_id = get_session('ss_order_id');
|
|
$_POST['sw_direct'] = get_session('ss_direct');
|
|
|
|
if ($_POST['sw_direct']) {
|
|
$cart_id = get_session('ss_cart_direct');
|
|
}
|
|
else {
|
|
$cart_id = get_session('ss_cart_id');
|
|
}
|
|
|
|
if( G5_IS_MOBILE && $default['de_pg_service'] == 'inicis' ){
|
|
$_POST['post_cart_id'] = $cart_id;
|
|
}
|
|
}
|
|
|
|
$dt_data = base64_encode(serialize($_POST));
|
|
|
|
// 동일한 주문번호가 있는지 체크
|
|
$sql = " select count(*) as cnt from {$g5['g5_shop_order_data_table']} where od_id = '$od_id' ";
|
|
$row = sql_fetch($sql);
|
|
if($row['cnt'])
|
|
sql_query(" delete from {$g5['g5_shop_order_data_table']} where od_id = '$od_id' ");
|
|
|
|
$default_pg = $default['de_pg_service'];
|
|
|
|
if( $od_settle_case == '삼성페이' ){ //현재 삼성페이인 경우에는 pg를 inicis로 처리
|
|
$default_pg = 'inicis';
|
|
}
|
|
|
|
$sql = " insert into {$g5['g5_shop_order_data_table']}
|
|
set od_id = '$od_id',
|
|
cart_id = '$cart_id',
|
|
mb_id = '{$member['mb_id']}',
|
|
dt_pg = '$default_pg',
|
|
dt_data = '$dt_data',
|
|
dt_time = '".G5_TIME_YMDHIS."' ";
|
|
sql_query($sql);
|
|
|
|
die(''); |