0) $items[] = $it_id; } $is_cart = true; $_POST['it_id'] = $items; } //착불인 상품과 선불인 상품을 주문할수 없게 하려면 /* if( $is_cart && $is_prepay && $is_collect ){ return_error2json("배송비 착불인 상품과 선불인 상품을 동시에 주문할수 없습니다.\n\n장바구니에서 착불 또는 선불 중 한가지를 선택하여 상품들을 주문해 주세요."); } */ $count = (isset($_POST['it_id']) && is_array($_POST['it_id'])) ? count($_POST['it_id']) : 0; if ($count < 1) return_error2json('구매하실 상품을 선택하여 주십시오.'); $itm_ids = array(); $sel_options = array(); $sup_options = array(); if($post_naverpay_form == 'item.php') $back_uri = isset($_POST['it_id'][0]) ? shop_item_url($_POST['it_id'][0]) : ''; else if($post_naverpay_form == 'cart.php') $back_uri = G5_SHOP_URL.'/cart.php'; else $back_uri = ''; define('NAVERPAY_BACK_URL', $back_uri); for($i=0; $i<$count; $i++) { $it_id = isset($_POST['it_id'][$i]) ? preg_replace($pattern, '', $_POST['it_id'][$i]) : ''; $opt_count = (isset($_POST['io_id'][$it_id]) && is_array($_POST['io_id'][$it_id])) ? count($_POST['io_id'][$it_id]) : 0; if( ! $it_id) continue; if (!preg_match('/^[a-zA-Z0-9_-]+$/', $it_id)) continue; if($opt_count && $_POST['io_type'][$it_id][0] != 0) return_error2json('상품의 선택옵션을 선택해 주십시오.'); for($k=0; $k<$opt_count; $k++) { if ($_POST['ct_qty'][$it_id][$k] < 1) return_error2json('수량은 1 이상 입력해 주십시오.'); } // 상품정보 $it = get_shop_item($it_id, true); if(! (isset($it['it_id']) && $it['it_id'])) return_error2json('상품정보가 존재하지 않습니다.'); if(!$it['it_use'] || $it['it_soldout'] || $it['it_tel_inq']) return_error2json($it['it_name'].' 는(은) 구매할 수 없는 상품입니다.'); // 최소, 최대 수량 체크 if($it['it_buy_min_qty'] || $it['it_buy_max_qty']) { $sum_qty = 0; for($k=0; $k<$opt_count; $k++) { if($_POST['io_type'][$it_id][$k] == 0) $sum_qty += $_POST['ct_qty'][$it_id][$k]; } if($it['it_buy_min_qty'] > 0 && $sum_qty < $it['it_buy_min_qty']) return_error2json($it['it_name'].'의 선택옵션 개수 총합 '.number_format($it['it_buy_min_qty']).'개 이상 주문해 주십시오.'); if($it['it_buy_max_qty'] > 0 && $sum_qty > $it['it_buy_max_qty']) return_error2json($it['it_name'].'의 선택옵션 개수 총합 '.number_format($it['it_buy_max_qty']).'개 이하로 주문해 주십시오.'); } // 옵션정보를 얻어서 배열에 저장 $opt_list = array(); $sql = " select * from {$g5['g5_shop_item_option_table']} where it_id = '$it_id' order by io_no asc "; $result = sql_query($sql); $lst_count = 0; for($k=0; $row=sql_fetch_array($result); $k++) { $opt_list[$row['io_type']][$row['io_id']]['id'] = $row['io_id']; $opt_list[$row['io_type']][$row['io_id']]['use'] = $row['io_use']; $opt_list[$row['io_type']][$row['io_id']]['price'] = $row['io_price']; $opt_list[$row['io_type']][$row['io_id']]['stock'] = $row['io_stock_qty']; // 선택옵션 개수 if(!$row['io_type']) $lst_count++; } //-------------------------------------------------------- // 재고 검사 //-------------------------------------------------------- for($k=0; $k<$opt_count; $k++) { $io_id = isset($_POST['io_id'][$it_id][$k]) ? preg_replace(G5_OPTION_ID_FILTER, '', trim(stripslashes($_POST['io_id'][$it_id][$k]))) : ''; $io_type = isset($_POST['io_type'][$it_id][$k]) ? (int) $_POST['io_type'][$it_id][$k] : 0; $io_value = isset($_POST['io_value'][$it_id][$k]) ? (int) $_POST['io_value'][$it_id][$k] : 0; // 재고 구함 $ct_qty = isset($_POST['ct_qty'][$it_id][$k]) ? (int) $_POST['ct_qty'][$it_id][$k] : 0; if(!$io_id) $it_stock_qty = get_it_stock_qty($it_id); else $it_stock_qty = get_option_stock_qty($it_id, $io_id, $io_type); if ($ct_qty > $it_stock_qty) { return_error2json($io_value." 의 재고수량이 부족합니다.\\n\\n현재 재고수량 : " . number_format($it_stock_qty) . " 개"); } } //-------------------------------------------------------- $itm_ids[] = $it_id; for($k=0; $k<$opt_count; $k++) { $io_id = isset($_POST['io_id'][$it_id][$k]) ? preg_replace(G5_OPTION_ID_FILTER, '', trim(stripslashes($_POST['io_id'][$it_id][$k]))) : ''; $io_type = isset($_POST['io_type'][$it_id][$k]) ? (int) $_POST['io_type'][$it_id][$k] : 0; $io_value = isset($_POST['io_value'][$it_id][$k]) ? $_POST['io_value'][$it_id][$k] : ''; // 선택옵션정보가 존재하는데 선택된 옵션이 없으면 건너뜀 if($lst_count && $io_id == '') continue; // 구매할 수 없는 옵션은 건너뜀 if($io_id && !$opt_list[$io_type][$io_id]['use']) continue; $io_price = isset($opt_list[$io_type][$io_id]['price']) ? $opt_list[$io_type][$io_id]['price'] : 0; $ct_qty = isset($_POST['ct_qty'][$it_id][$k]) ? (int) $_POST['ct_qty'][$it_id][$k] : 0; $it_price = get_price($it); // 구매가격이 음수인지 체크 if($io_type) { /* // 구매금액이 0원 이하일 경우 if((int)$io_price <= 0) { return_error2json('구매금액이 음수 또는 0원인 상품은 구매할 수 없습니다.'); } */ if((int)$io_price < 0) { return_error2json('구매금액이 0원 미만인 상품은 구매할 수 없습니다.'); } } else { if((int)$it_price + (int)$io_price <= 0) return_error2json('구매금액이 음수 또는 0원인 상품은 구매할 수 없습니다.'); } $ct_send_cost = 0; if($ct_send_cost != 1) { // if( $is_cart && !empty($_POST['ct_send_cost'][$it_id][$k]) ){ $ct_send_cost = $_POST['ct_send_cost'][$it_id][$k]; } else { // 배송비결제 if($it['it_sc_type'] == 1) $ct_send_cost = 2; // 무료 else if($it['it_sc_type'] > 1 && $it['it_sc_method'] == 1) $ct_send_cost = 1; // 착불 } // 조건부 무료배송시 착불일 경우 ( 야수님이 알려주심 ) if ($it['it_sc_type'] === 2 && $ct_send_cost === 1 && ((int)$io_price + (int)$it_price) * $ct_qty >= $it['it_sc_minimum'] ){ $ct_send_cost = 2; // 무료 } } // 옵션정보배열에 저장 $options[$it_id][] = array( 'option' => get_text(stripslashes($io_value)), 'price' => $io_price, 'qty' => $ct_qty, 'send_cost' => $ct_send_cost, 'type' => $io_type, 'io_id' => $io_id ); } } $order = new naverpay_register($options, $ct_send_cost); $query = $order->query(); $totalPrice = $order->total_price; //echo $query.'
'.PHP_EOL; $nc_sock = @fsockopen($req_addr, $req_port, $errno, $errstr); if ($nc_sock) { fwrite($nc_sock, $buy_req_url."\r\n" ); fwrite($nc_sock, "Host: ".$req_host.":".$req_port."\r\n" ); fwrite($nc_sock, "Content-type: application/x-www-form-urlencoded; charset=utf-8\r\n"); fwrite($nc_sock, "Content-length: ".strlen($query)."\r\n"); fwrite($nc_sock, "Accept: */*\r\n"); fwrite($nc_sock, "\r\n"); fwrite($nc_sock, $query."\r\n"); fwrite($nc_sock, "\r\n"); $headers = $bodys = ''; // get header while(!feof($nc_sock)) { $header=fgets($nc_sock,4096); if($header=="\r\n") { break; } else { $headers .= $header; } } // get body while(!feof($nc_sock)) { $bodys.=fgets($nc_sock,4096); } fclose($nc_sock); $resultCode = substr($headers,9,3); if ($resultCode == 200) { // success $orderId = $bodys; } else { // fail return_error2json($bodys); } } else { //echo "$errstr ($errno)
\n"; return_error2json($errstr ($errno)); exit(-1); //에러처리 } if($resultCode == 200) die(json_encode(array('error'=>'', 'ORDER_ID'=>$orderId, 'SHOP_ID'=>$default['de_naverpay_mid'], 'TOTAL_PRICE'=>$totalPrice)));