네이버 체크아웃을 연동하는 방법을 소개합니다.
실제 운영하는 사이트에 적용 해보지는 않았으므로 적용후 많은 테스트를 거치시기 바랍니다.
이 코드와 관련된 질문은 아래 코멘트로 남겨 주십시오.
extend/naver_checkout.extend.php 파일을 생성합니다.
<?
// 이 상수가 정의되지 않으면 각각의 개별 페이지는 별도로 실행될 수 없음
define("_GNUBOARD_", TRUE);// 체크아웃 사용 : true , 미사용 : false (미사용의 경우 아래 설정은 무용지물임)
$checkout['use'] = true;
// 체크아웃 테스트 : true , 실제운영 : false
$checkout['test'] = true;
// 체크아웃 도메인
if ($checkout['test'])
$checkout['domain'] = "test-checkout.naver.com"; // 테스트 도메인
else
$checkout['domain'] = "checkout.naver.com"; // 실제운영 도메인
// 체크아웃 쇼핑몰아이디
$checkout['shop_id'] = "네이버체크아웃아이디";
// 체크아웃 가맹점 인증키
$checkout['certi_key'] = "네이버에서 알려줍니다";
// 체크아웃 버튼 인증키
$checkout['button_key'] = "네이버에서 알려줍니다";
?>
shop/item.php 을 수정합니다.
<?
$arr_option = array();// 선택옵션 출력
for ($i=1; $i<=6; $i++)
{
// 옵션에 문자가 존재한다면
$str = get_item_options(trim($it["it_opt{$i}_subject"]), trim($it["it_opt{$i}"]), $i);
if ($str)
{
echo "<tr height=25>";
echo "<td> · ".$it["it_opt{$i}_subject"]."</td>";
echo "<td align=center>:</td>";
echo "<td style='word-break:break-all;'>$str</td></tr>\n";
echo "<tr><td colspan=3 height=1 background='$g4[shop_img_path]/dot_line.gif'></td></tr>\n";if (preg_match("#<select#", $str))
$arr_option[] = "checkOption(form.it_opt{$i}, '".$it["it_opt{$i}_subject"]."')";
}
}$check_option = implode(" && ", $arr_option);
?>
<? if ($checkout['use']) { ?>
<!-- 네이버 체크아웃 코드 -->
<script type="text/javascript" >
//<![CDATA[
function checkOption(selectBox, optionName)
{
if (selectBox.value == '' || selectBox.value == '선택') {
alert("상품 옵션을 선택해 주세요. (" + optionName + ")");
return false;
}
return true;
}function buy_nc(url)
{
var form = document.fitem;
var check = <?=isset($check_option)?($check_option?$check_option:1):-1; // 옵션이 있으면 옵션검사 코드, 없으면 무조건 true ?>;
if ( check ) {
// 네이버 체크아웃으로 주문 정보를 등록하는 가맹점 페이지로 이동.
// 해당 페이지에서 주문 정보 등록 후 네이버 체크아웃 주문서 페이지로 이동.
var option = "";
var delimiter = "";
for (var i=1; i<=6; i++) {
if (document.getElementById("it_opt"+i)) {
option += delimiter
+ document.getElementById("it_opt"+i+"_subject").value
+ ":"
+ document.getElementById("it_opt"+i).value;
delimiter = "/";
}
}var opt = document.createElement('input');
opt.type = 'text';
opt.name = 'option';
opt.value = option;
form.appendChild(opt);amount_change();
var amount = parseInt(document.getElementById("it_amount").value);
form.action = "./naver_checkout.php";
form.target = "checkout";
form.submit();
} else if (check == -1) {
alert("상품옵션의 변수가 제대로 선언되지 않아 오류가 발생하였습니다.");
}
return false;
}function wishlist_nc(url)
{
// 네이버 체크아웃으로 찜 정보를 등록하는 가맹점 페이지 팝업 창 생성.
// 해당 페이지에서 찜 정보 등록 후 네이버 체크아웃 찜 페이지로 이동.
window.open(url,"wishlist","scrollbars=yes,width=400,height=267");
var form = document.fitem;
form.action = url;
form.target = "wishlist";
form.submit();
return false;
}function not_buy_nc()
{
alert("죄송합니다. NAVER Checkout으로 구매가 불가한 상품입니다.");
return false;
}
//]]>
</script><?
// 재고수량 구함
$stock_qty = get_it_stock_qty($it_id);
$is_buy_button = $stock_qty ? "Y" : "N"; // 체크아웃에서 사용
if (get_amount($it) <= 0) $is_buy_button = "N";
?>
<br />
<iframe name="checkout" style="display:none;"></iframe>
<script type="text/javascript" src="http://checkout.naver.com/customer/js/checkoutButton2.js" charset="UTF-8"></script>
<script type="text/javascript" >
//<![CDATA[
nhn.CheckoutButton.apply({
BUTTON_KEY:"<?=$checkout['button_key']?>", // 체크아웃에서 제공받은 버튼 인증 키 입력
TYPE: "A", // 버튼 모음 종류 설정
COLOR: 1, // 버튼 모음의 색 설정
COUNT: 2, // 버튼 개수 설정. 구매하기 버튼만 있으면(장바구니 페이지) 1, 찜하기 버튼도 있으면(상품 상세 페이지) 2를 입력.
ENABLE: "<?=$is_buy_button?>", // 품절 등의 이유로 버튼 모음을 비활성화할 때에는 "N" 입력
BUY_BUTTON_HANDLER: <?=($is_buy_button=="Y")?"buy_nc":"not_buy_nc";?>, // 구매하기 버튼 이벤트 Handler 함수 등록. 품절인 경우 not_buy_nc 함수 사용
WISHLIST_BUTTON_HANDLER:wishlist_nc, // 찜하기 버튼 이벤트 Handler 함수 등록
WISHLIST_BUTTON_LINK_URL:"<?=$g4[shop_path]?>/naver_wishlist.php", // 찜하기 팝업 링크 주소
"":""
});
//]]>
</script>
<!-- /네이버 체크아웃 코드 -->
<? } ?>
shop/cartsub.inc.php 를 수정합니다.
$option = "";
$delimiter = "";
for ($k=1; $k<=6; $k++) {
if ($row["it_opt{$k}"]) {
$option .= $delimiter . $row["it_opt{$k}_subject"] . ":" . $row["it_opt{$k}"];
$delimiter = "/";
}
}
$option = get_text($option);$arr_it_id[] = "it_id=".$row[it_id];if ($i > 0)
echo "<tr><td colspan='$colspan' height=1 bgcolor=#E7E9E9></td></tr>";
echo "<tr>";
echo "<td align=left style='padding:5px;'>$image</td><td>";
echo "\n<input type=hidden name='ct_id[$i]' value='$row[ct_id]'>";
echo "\n<input type=hidden name='it_id[$i]' value='$row[it_id]'>";
echo "\n<input type=hidden name='option[$i]' value='$option'>";
echo "\n<input type=hidden name='it_amount[$i]' value='$row[ct_amount]'>";
//echo "\n<input type=hidden name='ap_id[$i]' value='$row[ap_id]'>";
//echo "\n<input type=hidden name='bi_id[$i]' value='$row[bi_id]'>";
echo "\n<input type=hidden name='it_name[$i]' value='".get_text($row[it_name])."'>";
echo $it_name;
echo "</td>\n";
<? if ($checkout['use']) { ?>
<!-- 네이버 체크아웃 코드 -->
<script type="text/javascript" >
//<![CDATA[
function checkOption(selectBox, nonSelectedIndex, optionName)
{
if (selectBox.selectedIndex == nonSelectedIndex) {
alert("상품 옵션을 선택해 주세요. (" + optionName + ")");
return false;
}
return true;
}function buy_nc(url)
{
var form = document.frmcartlist;
var check = 1;
if ( check ) {
form.action = "./naver_checkout.php";
form.target = "checkout";
form.submit();
}
return false;
}function wishlist_nc(url)
{
window.open(url,"wishlist","scrollbars=yes,width=400,height=267");
var form = document.frmcartlist;
form.action = url;
form.target = "wishlist";
form.submit();
return false;
}function not_buy_nc()
{
alert("죄송합니다. NAVER Checkout으로 구매가 불가한 상품입니다.");
return false;
}
//]]>
</script><?
if ($goods_count > -1) $is_buy_button = "Y";
?>
<br />
<iframe name="checkout" style="display:none;"></iframe>
<script type="text/javascript" src="http://checkout.naver.com/customer/js/checkoutButton2.js" charset="UTF-8"></script>
<script type="text/javascript" >//<![CDATA[
nhn.CheckoutButton.apply({
BUTTON_KEY:"<?=$checkout['button_key']?>", // 체크아웃에서 제공받은 버튼 인증 키 입력
TYPE: "A", // 버튼 모음 종류 설정
COLOR: 1, // 버튼 모음의 색 설정
COUNT: 2, // 버튼 개수 설정. 구매하기 버튼만 있으면(장바구니 페이지) 1, 찜하기 버튼도 있으면(상품 상세 페이지) 2를 입력.
ENABLE: "<?=$is_buy_button?>", // 품절 등의 이유로 버튼 모음을 비활성화할 때에는 "N" 입력
BUY_BUTTON_HANDLER: <?=($is_buy_button=="Y")?"buy_nc":"not_buy_nc";?>, // 구매하기 버튼 이벤트 Handler 함수 등록. 품절인 경우 not_buy_nc 함수 사용
WISHLIST_BUTTON_HANDLER:wishlist_nc, // 찜하기 버튼 이벤트 Handler 함수 등록
WISHLIST_BUTTON_LINK_URL:"<?=$g4[shop_path]?>/naver_wishlist.php", // 찜하기 팝업 링크 주소
"":""
});
//]]>
</script>
<!-- /네이버 체크아웃 코드 -->
<? } ?>
shop/naver_checkout.php 을 생성합니다.
shop/naver_wishlist.php 을 생성합니다.
추가합니다
lib/shop.lib.php 를 수정합니다.
추가합니다
lib/shop.lib.php 를 수정합니다.
// 상품 옵션
function get_item_options($subject, $option, $index)
{
$subject = trim($subject);
$option = trim($option);
if (!$subject || !$option) return "";
$str = "";
$arr = explode("\n", $option);
// 옵션이 하나일 경우
if (count($arr) == 1)
{
$str = $option;
}
else
{
$str = "<select id=\"it_opt{$index}\" name=\"it_opt{$index}\" onchange='amount_change()'>\n";
for ($k=0; $k<count($arr); $k++)
{
$arr[$k] = str_replace("\r", "", $arr[$k]);
$opt = explode(";", trim($arr[$k]));
$str .= "<option value='$arr[$k]'>{$opt[0]}";
// 옵션에 금액이 있다면
if ($opt[1] != 0)
{
$str .= " (";
// - 금액이 아니라면 모두 + 금액으로
//if (!ereg("[-]", $opt[1]))
if (!preg_match("/[-]/", $opt[1]))
$str .= "+";
$str .= display_amount($opt[1]) . ")";
}
$str .= "</option>\n";
}
$str .= "</select>\n<input type=hidden id=\"it_opt{$index}_subject\" name=\"it_opt{$index}_subject\" value='$subject'>\n";
}
return $str;
}
댓글 7개
네이버 체크아웃 오늘로 8일째 심사중이네여...에휴~~
1차 심사는 승인이 났는데...
2차에서 문제가 발생 되었는데...
네이어체크아웃 심사 상담원과 통화를 했습니다.
상담원 이야기는...
"네이버 체크아웃은 비주기적으로 상품 정보를 업데이트하기 위해, 가맹점 사이트에 HTTP로 상품 정보 요청을 보낸다. 가맹점은 요청받은 상품 정보를 XML로 전송하는 페이지를 생성해야 한다." 라고 합니다.
그러면서 독립몰 연동가이드 PDF파일 33, 34페이지를 보고 xml 파일을 만들어서 해당 url를 보내달라고 합니다.
바쁘시겠지만.. 등록하신 개발자연동 파일에 추가로 xml 파일 생성파일도 올려주시면 감사하겠습니다.
1차 심사는 승인이 났는데...
2차에서 문제가 발생 되었는데...
네이어체크아웃 심사 상담원과 통화를 했습니다.
상담원 이야기는...
"네이버 체크아웃은 비주기적으로 상품 정보를 업데이트하기 위해, 가맹점 사이트에 HTTP로 상품 정보 요청을 보낸다. 가맹점은 요청받은 상품 정보를 XML로 전송하는 페이지를 생성해야 한다." 라고 합니다.
그러면서 독립몰 연동가이드 PDF파일 33, 34페이지를 보고 xml 파일을 만들어서 해당 url를 보내달라고 합니다.
바쁘시겠지만.. 등록하신 개발자연동 파일에 추가로 xml 파일 생성파일도 올려주시면 감사하겠습니다.
shop/cartsub.inc.php 수정관련하여
다음 문장의 it_opt{$k}_subject가 정상적으로 처리되기 위해서는
$option .= $delimiter . $row["it_opt{$k}_subject"] . ":" . $row["it_opt{$k}"];
shop/cartsub.inc.php 상단의 쿼리에 b.it_opt1_subject 에서 b.it_opt6_subject 까지의 내용이 추가되어야 합니다.
다음 쿼리 참고하세요.
$sql = " select a.ct_id,
a.it_opt1,
a.it_opt2,
a.it_opt3,
a.it_opt4,
a.it_opt5,
a.it_opt6,
b.it_opt1_subject,
b.it_opt2_subject,
b.it_opt3_subject,
b.it_opt4_subject,
b.it_opt5_subject,
b.it_opt6_subject,
a.ct_amount,
a.ct_point,
a.ct_qty,
a.ct_status,
a.ic_id,
a.ic_name,
b.it_id,
b.it_name,
b.ca_id
from $g4[yc4_cart_table] a,
$g4[yc4_item_table] b
where a.on_uid = '$s_on_uid'
and a.it_id = b.it_id
order by a.ct_id ";
다음 문장의 it_opt{$k}_subject가 정상적으로 처리되기 위해서는
$option .= $delimiter . $row["it_opt{$k}_subject"] . ":" . $row["it_opt{$k}"];
shop/cartsub.inc.php 상단의 쿼리에 b.it_opt1_subject 에서 b.it_opt6_subject 까지의 내용이 추가되어야 합니다.
다음 쿼리 참고하세요.
$sql = " select a.ct_id,
a.it_opt1,
a.it_opt2,
a.it_opt3,
a.it_opt4,
a.it_opt5,
a.it_opt6,
b.it_opt1_subject,
b.it_opt2_subject,
b.it_opt3_subject,
b.it_opt4_subject,
b.it_opt5_subject,
b.it_opt6_subject,
a.ct_amount,
a.ct_point,
a.ct_qty,
a.ct_status,
a.ic_id,
a.ic_name,
b.it_id,
b.it_name,
b.ca_id
from $g4[yc4_cart_table] a,
$g4[yc4_item_table] b
where a.on_uid = '$s_on_uid'
and a.it_id = b.it_id
order by a.ct_id ";
게시글 목록
| 번호 | 제목 |
|---|---|
| 1440 | |
| 1434 | |
| 1433 | |
| 1428 | |
| 1421 | |
| 1397 | |
| 1396 | |
| 1388 | |
| 1379 | |
| 1378 | |
| 1377 | |
| 1367 | |
| 1365 | |
| 1362 | |
| 1348 | |
| 1343 | |
| 1335 | |
| 1318 | |
| 1311 | |
| 1310 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기