'.$ct_qty."\n"; } // 재고를 이미 사용했다면 (재고에서 이미 뺐다면) $stock_use = $ct['ct_stock_use']; if ($ct['ct_stock_use']) { if ($ct_status == '주문' || $ct_status == '취소' || $ct_status == '반품' || $ct_status == '품절') { $stock_use = 0; // 재고에 다시 더한다. if($ct['io_id']) { $sql = " update {$g5['g5_shop_item_option_table']} set io_stock_qty = io_stock_qty + '{$ct['ct_qty']}' where it_id = '{$ct['it_id']}' and io_id = '{$ct['io_id']}' and io_type = '{$ct['io_type']}' "; } else { $sql = " update {$g5['g5_shop_item_table']} set it_stock_qty = it_stock_qty + '{$ct['ct_qty']}' where it_id = '{$ct['it_id']}' "; } sql_query($sql); } } else { // 재고 오류로 인한 수정 if ($ct_status == '배송' || $ct_status == '완료') { $stock_use = 1; // 재고에서 뺀다. if($ct['io_id']) { $sql = " update {$g5['g5_shop_item_option_table']} set io_stock_qty = io_stock_qty - '{$ct['ct_qty']}' where it_id = '{$ct['it_id']}' and io_id = '{$ct['io_id']}' and io_type = '{$ct['io_type']}' "; } else { $sql = " update {$g5['g5_shop_item_table']} set it_stock_qty = it_stock_qty - '{$ct['ct_qty']}' where it_id = '{$ct['it_id']}' "; } sql_query($sql); } /* 주문 수정에서 "품절" 선택시 해당 상품 자동 품절 처리하기 else if ($ct_status == '품절') { $stock_use = 1; // 재고에서 뺀다. $sql =" update {$g5['g5_shop_item_table']} set it_stock_qty = 0 where it_id = '{$ct['it_id']}' "; sql_query($sql); } */ } $point_use = $ct['ct_point_use']; // 회원이면서 포인트가 0보다 크면 // 이미 포인트를 부여했다면 뺀다. if ($mb_id && $ct['ct_point'] && $ct['ct_point_use']) { $point_use = 0; //insert_point($mb_id, (-1) * ($ct[ct_point] * $ct[ct_qty]), "주문번호 $od_id ($ct_id) 취소"); delete_point($mb_id, "@delivery", $mb_id, "$od_id,$ct_id"); } // 히스토리에 남김 // 히스토리에 남길때는 작업|아이디|시간|IP|그리고 나머지 자료 $now = G5_TIME_YMDHIS; $ct_history="\n$ct_status|{$member['mb_id']}|$now|$REMOTE_ADDR"; $sql = " update {$g5['g5_shop_cart_table']} set ct_point_use = '$point_use', ct_stock_use = '$stock_use', ct_status = '$ct_status', ct_history = CONCAT(ct_history,'$ct_history') where od_id = '$od_id' and ct_id = '$ct_id' "; sql_query($sql); // it_id를 배열에 저장 if($ct_status == '주문' || $ct_status == '취소' || $ct_status == '반품' || $ct_status == '품절' || $ct_status == '완료') $arr_it_id[] = $ct['it_id']; $od_names[] = $ct['it_name']; // 상품명 배열 : 알림톡 사용 } // 상품 판매수량 반영 if(is_array($arr_it_id) && !empty($arr_it_id)) { $unq_it_id = array_unique($arr_it_id); foreach($unq_it_id as $it_id) { $sql2 = " select sum(ct_qty) as sum_qty from {$g5['g5_shop_cart_table']} where it_id = '$it_id' and ct_status = '완료' "; $row2 = sql_fetch($sql2); $sql3 = " update {$g5['g5_shop_item_table']} set it_sum_qty = '{$row2['sum_qty']}' where it_id = '$it_id' "; sql_query($sql3); } } // 장바구니 상품 모두 취소일 경우 주문상태 변경 $cancel_change = false; if (in_array($_POST['ct_status'], $status_cancel)) { $sql = " select count(*) as od_count1, SUM(IF(ct_status = '취소' OR ct_status = '반품' OR ct_status = '품절', 1, 0)) as od_count2 from {$g5['g5_shop_cart_table']} where od_id = '$od_id' "; $row = sql_fetch($sql); if($row['od_count1'] == $row['od_count2']) { $cancel_change = true; $pg_res_cd = ''; $pg_res_msg = ''; $pg_cancel_log = ''; // PG 신용카드 결제 취소일 때 if($pg_cancel == 1) { $sql = " select * from {$g5['g5_shop_order_table']} where od_id = '$od_id' "; $od = sql_fetch($sql); if ($od['od_tno'] && is_cancel_shop_pg_order($od)) { switch($od['od_pg']) { case 'lg': include_once(G5_SHOP_PATH.'/settle_lg.inc.php'); $LGD_TID = $od['od_tno']; $xpay = new XPay($configPath, $CST_PLATFORM); // Mert Key 설정 $xpay->set_config_value('t'.$LGD_MID, $config['cf_lg_mert_key']); $xpay->set_config_value($LGD_MID, $config['cf_lg_mert_key']); $xpay->Init_TX($LGD_MID); $xpay->Set('LGD_TXNAME', 'Cancel'); $xpay->Set('LGD_TID', $LGD_TID); if ($xpay->TX()) { $res_cd = $xpay->Response_Code(); if($res_cd != '0000' && $res_cd != 'AV11') { $pg_res_cd = $res_cd; $pg_res_msg = $xpay->Response_Msg(); } } else { $pg_res_cd = $xpay->Response_Code(); $pg_res_msg = $xpay->Response_Msg(); } break; case 'inicis': include_once(G5_SHOP_PATH.'/settle_inicis.inc.php'); $cancel_msg = '쇼핑몰 운영자 승인 취소'; $args = array( 'paymethod' => get_type_inicis_paymethod($od['od_settle_case']), 'tid' => $od['od_tno'], 'msg' => $cancel_msg ); $response = inicis_tid_cancel($args); $result = json_decode($response, true); if (isset($result['resultCode'])) { if ($result['resultCode'] != '00') { $pg_res_cd = $result['resultCode']; $pg_res_msg = $result['resultMsg']; } } else { $pg_res_cd = ''; $pg_res_msg = 'curl 로 데이터를 받지 못했습니다.'; } break; case 'nicepay': include_once(G5_SHOP_PATH.'/settle_nicepay.inc.php'); $cancel_msg = '쇼핑몰 운영자 승인 취소'; $tno = $od['od_tno']; $cancelAmt = $od['od_receipt_price']; // 0:전체 취소, 1:부분 취소(별도 계약 필요) $partialCancelCode = 0; include G5_SHOP_PATH.'/nicepay/cancel_process.php'; if (isset($result['ResultCode'])) { // 실패했다면 if ($result['ResultCode'] !== '2001') { $pg_res_cd = $result['ResultCode']; $pg_res_msg = $result['ResultMsg']; } } else { $pg_res_cd = ''; $pg_res_msg = 'curl 로 데이터를 받지 못하거나 통신에 실패했습니다.'; } break; case 'KAKAOPAY': include_once(G5_SHOP_PATH.'/settle_kakaopay.inc.php'); $_REQUEST['TID'] = $od['od_tno']; $_REQUEST['Amt'] = $od['od_receipt_price']; $_REQUEST['CancelMsg'] = '쇼핑몰 운영자 승인 취소'; $_REQUEST['PartialCancelCode'] = 0; include G5_SHOP_PATH.'/kakaopay/kakaopay_cancel.php'; break; default: include_once(G5_SHOP_PATH.'/settle_kcp.inc.php'); require_once(G5_SHOP_PATH.'/kcp/pp_ax_hub_lib.php'); // locale ko_KR.euc-kr 로 설정 setlocale(LC_CTYPE, 'ko_KR.euc-kr'); $c_PayPlus = new C_PP_CLI_T; $c_PayPlus->mf_clear(); $ordr_idxx = $od['od_id']; $tno = $od['od_tno']; $tran_cd = '00200000'; $cancel_msg = iconv_euckr('쇼핑몰 운영자 승인 취소'); $cust_ip = $_SERVER['REMOTE_ADDR']; $bSucc_mod_type = "STSC"; $c_PayPlus->mf_set_modx_data( "tno", $tno ); // KCP 원거래 거래번호 $c_PayPlus->mf_set_modx_data( "mod_type", $bSucc_mod_type ); // 원거래 변경 요청 종류 $c_PayPlus->mf_set_modx_data( "mod_ip", $cust_ip ); // 변경 요청자 IP $c_PayPlus->mf_set_modx_data( "mod_desc", $cancel_msg ); // 변경 사유 $c_PayPlus->mf_do_tx( $tno, $g_conf_home_dir, $g_conf_site_cd, $g_conf_site_key, $tran_cd, "", $g_conf_gw_url, $g_conf_gw_port, "payplus_cli_slib", $ordr_idxx, $cust_ip, "3" , 0, 0, $g_conf_key_dir, $g_conf_log_dir); $res_cd = $c_PayPlus->m_res_cd; $res_msg = $c_PayPlus->m_res_msg; if($res_cd != '0000') { $pg_res_cd = $res_cd; $pg_res_msg = iconv_utf8($res_msg); } // locale 설정 초기화 setlocale(LC_CTYPE, ''); break; } // PG 취소요청 성공했으면 if($pg_res_cd == '') { $pg_cancel_log = ' PG '.$od['od_settle_case'].' 승인취소 처리'; $sql = " update {$g5['g5_shop_order_table']} set od_refund_price = '{$od['od_receipt_price']}' where od_id = '$od_id' "; sql_query($sql); } } } // 관리자 주문취소 로그 $mod_history .= G5_TIME_YMDHIS.' '.$member['mb_id'].' 주문'.$_POST['ct_status'].' 처리'.$pg_cancel_log."\n"; } } // 미수금 등의 정보 $info = get_order_info($od_id); if(!$info) alert('주문자료가 존재하지 않습니다.'); $sql = " update {$g5['g5_shop_order_table']} set od_cart_price = '{$info['od_cart_price']}', od_cart_coupon = '{$info['od_cart_coupon']}', od_coupon = '{$info['od_coupon']}', od_send_coupon = '{$info['od_send_coupon']}', od_cancel_price = '{$info['od_cancel_price']}', od_send_cost = '{$info['od_send_cost']}', od_misu = '{$info['od_misu']}', od_tax_mny = '{$info['od_tax_mny']}', od_vat_mny = '{$info['od_vat_mny']}', od_free_mny = '{$info['od_free_mny']}' "; if ($mod_history) { // 주문변경 히스토리 기록 $sql .= " , od_mod_history = CONCAT(od_mod_history,'$mod_history') "; } if($cancel_change) { $sql .= " , od_status = '취소' "; // 주문상품 모두 취소, 반품, 품절이면 주문 취소 } else { if (isset($_POST['ct_status']) && in_array($_POST['ct_status'], $status_normal)) { // 정상인 주문상태만 기록 $sql .= " , od_status = '{$_POST['ct_status']}' "; } } $sql .= " where od_id = '$od_id' "; sql_query($sql); $qstr = "sort1=$sort1&sort2=$sort2&sel_field=$sel_field&search=$search&page=$page"; $url = "./orderform.php?od_id=$od_id&$qstr"; // 신용카드 취소 때 오류가 있으면 알림 if($pg_cancel == 1 && $pg_res_cd && $pg_res_msg) { alert('오류코드 : '.$pg_res_cd.' 오류내용 : '.$pg_res_msg, $url); } else { // 알림톡 발송 BEGIN: 배송준비(DE01) | 배송완료(DE03) | 관리자 주문취소(OR05) | 반품처리(OR06) | 품절안내(OR07) ------------------------------ $alimtalk_map = [ '준비' => 'DE01', '완료' => 'DE03', '취소' => 'OR05', '반품' => 'OR06', '품절' => 'OR07' ]; // 알림톡 코드 매핑 // 처리상품명 및 치환 변수 값 세팅 $order = sql_fetch("select * from {$g5['g5_shop_order_table']} where od_id = '$od_id'"); // 주문 정보 조회 $it_name = !empty($od_names) ? $od_names[0] . (count($od_names) > 1 ? ' 외 ' . (count($od_names) - 1) . '건' : '') : ''; // 상품명 $conditions = [ 'od_id' => $od_id, 'it_name' => $it_name ]; // 변수 치환 정보 if (isset($alimtalk_map[$_POST['ct_status']])) { $status_code = $alimtalk_map[$_POST['ct_status']]; // 고객 발송 (준비, 완료, 취소, 반품, 품절 공통) $cu_atk = send_alimtalk_preset('CU-' . $status_code, ['rcv' => $order['od_hp'] ?: $order['od_tel'], 'rcvnm' => $order['od_name']], $conditions); // 회원 // 관리자 발송 (취소만) if ($_POST['ct_status'] === '취소') { $ad_atk = send_admin_alimtalk('AD-' . $status_code, 'super', $conditions); // 관리자 } } // 알림톡 발송 END ------------------------------------------------------------------------------------------------------------------- // 1.06.06 $od = sql_fetch(" select od_receipt_point from {$g5['g5_shop_order_table']} where od_id = '$od_id' "); if ($od['od_receipt_point']) alert("포인트로 결제한 주문은,\\n\\n주문상태 변경으로 인해 포인트의 가감이 발생하는 경우\\n\\n회원관리 > 포인트관리에서 수작업으로 포인트를 맞추어 주셔야 합니다.", $url); else goto_url($url); }