네이버페이 질문입니다.
본문
말씀 드리기는 좀 그렇지만 보드 기반으로 네이버페이를 사용하는것이 아닌 독립몰 기반으로 네이버페이를 작업하고 있습니다
그런데 작업중에 오류 하나 때문에 계속 진행이 안되는것이 답답해서 질문을 드립니다
"error":"FAIL:[OTHER_ERR] Required String parameter 'SHOP_ID' is not present10614346"
네이버페이 주문서 쪽에 데이터를 전송해주는 단계에서 오류가 나는것 같은데 네이버쪽에도 물어보니 메뉴얼을 참조 하라는 말 밖에는 안와서 ㅠㅠㅠ 부탁드립니다
<?
//print_a($_POST);
$pre_link = empty($_POST["pre_link"])?die("잘못된 접근입니다."):$_POST["pre_link"];
$idx = empty($_POST["idx"])?die("잘못된 접근입니다."):$_POST["idx"];
$option_one_price = empty($_POST["option_one_price"])?"":explode("|||",substr($_POST["option_one_price"],0,-3));
$option_idx_arr = empty($_POST["option_idx_arr"])?"":explode("|||",substr($_POST["option_idx_arr"],0,-3));
$option_quantity = empty($_POST["option_quantity"])?"":explode("|||",substr($_POST["option_quantity"],0,-3));
require CFG_MODEL_PATH_ABS."/class.product.php";
$cls_product = new product();
//네이버페이
require CFG_MODEL_PATH_ABS."/class.naverpay.php";
$shippingType = 'FREE';
if ($shippingType == 'PAYED') {
$shippingPrice = 2500;
}else{
$shippingPrice = 0;
}
$sp = '&';
$encode = "&page=product_view&idx=".$idx;
$encode = urlencode($encode);
if($pre_link == "shop")
$backUrl = "http://".$_SERVER["HTTP_HOST"]."/?folder=shop".$encode;
else
$backUrl = "http://".$_SERVER["HTTP_HOST"]."/?folder=mypage&page=order_cart";
$queryString = 'SHOP_ID='.urlencode(NPAY_SHOP_ID);
$queryString .= '&CERTI_KEY='.urlencode(NPAY_CERT_KEY);
$queryString .= '&SHIPPING_TYPE='.$shippingType;
$queryString .= '&SHIPPING_PRICE='.$shippingPrice;
$queryString .= '&RESERVE1=&RESERVE2=&RESERVE3=&RESERVE4=&RESERVE5=';
$queryString .= '&BACK_URL='.$backUrl;
$queryString .= '&SA_CLICK_ID='.$_COOKIE["NVADID"]; //CTS
// CPA 스크립트 가이드 설치 업체는 해당 값 전달
//$queryString .= '&CPA_INFLOW_CODE='.urlencode($_COOKIE["CPAValidator"]);
//$queryString .= '&NAVER_INFLOW_CODE='.urlencode($_COOKIE["NA_CO"]);
$totalMoney = 0;
echo $queryString;
$row = $cls_product->get_view($idx);
$id = $row["idx"];
$name = $row["name"];
$naver_id = $row["navershop_id"];
$uprice = $row["price"];
$count = count($row["idx"]);
$tprice = $uprice * $count;
$option = "";
//echo $id;
$item = new ItemStack($id, $name, $tprice, $uprice, $option, $count);
$totalMoney += $tprice;
$queryString .= '&'.$item->makeQueryString();
//}
$totalPrice = (int)$totalMoney + (int)$shippingPrice;
$queryString .= '&TOTAL_PRICE='.$totalPrice;
echo ($queryString."<br>\n")."<br>";
$req_addr = 'ssl://test-pay.naver.com';
$req_url = 'POST /customer/api/order.nhn HTTP/1.1'; // utf-8
// $req_url = 'POST /customer/api/CP949/order.nhn HTTP/1.1'; // euc-kr
$req_host = 'test-pay.naver.com';
$req_port = 443;
$nc_sock = @fsockopen($req_addr, $req_port, $errno, $errstr);
if($nc_sock)
{
fwrite($nc_sock, $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=utf8\r\n");
fwrite($nc_sock, "Content-length: ".strlen($queryString)."\r\n");
fwrite($nc_sock, "Accept: */*\r\n");
fwrite($nc_sock, "\r\n");
fwrite($nc_sock, $queryString."\r\n");
fwrite($nc_sock, "\r\n");
while(!feof($nc_sock))
{
$header=fgets($nc_sock,4096);
echo $header;
$headers .= $header;
echo $headers;
if($header=="\r\n")
{
break;
}
else
{
$headers .= $header;
}
}
while(!feof($nc_sock))
{
$bodys.=fgets($nc_sock,4096);
}
fclose($nc_sock);
$resultCode = substr($header,9,3);
if ($resultCode == 200)
{
// success
$orderId = $bodys;
}
else
{
// fail
return_error2json($bodys);
}
}
else
{
echo "$errstr ($errno)<br>\n";
exit(-1);
//에러처리
}
echo ($orderId."<br>\n");
//$orderUrl = "https://test-pay.naver.com/customer/order.nhn?ORDER_ID=".$orderId."&SHOP_ID=".urlencode(NPAY_SHOP_ID)."&TOTAL_PRICE=".$totalPrice;
if($resultCode == 200){
die(json_encode(array('error'=>'', 'ORDER_ID'=>$orderId, 'SHOP_ID'=>urlencode(NPAY_SHOP_ID), 'TOTAL_PRICE'=>$totalPrice)));
}else{
die(json_encode(array('error'=>'error')));
}
//echo $orderUrl;
?>
!-->
답변 1
SHOP_ID 값이 넘어오지 않았다는 얘기인 것 같습니다.
$queryString = 'SHOP_ID='.urlencode(NPAY_SHOP_ID);
과 같은 코드가 있는데.. NPAY_SHOP_ID 상수에 값이 정상적으로 들어있는지 확인해 보는 것이 좋을 듯 싶습니다.
echo NPAY_SHOP_ID;
exit;
답변을 작성하시기 전에 로그인 해주세요.