Skip to content
On this page

네이버페이 관련 소스코드

냑에 올린 자료인데 언제 없어질지 몰라서 따로 배포 하였다.

영카트 네이버페이 주문 방식이 5.4.18 버전에서 PG사에 통합되면서

상품페이지에서 직접 네이버페이로 주문할 수 있는 기능이 사라졌습니다


/shop.config.php

97 ~ 104 줄의 내용을 복사해서 붙여넣기로 변경함


/ shop / settle_naverpay.inc.php

3 ~ 10 줄의 내용을 복사해서 붙여넣기로 변경함

shop.config.php

php
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
 
if (!defined('G5_USE_SHOP') || !G5_USE_SHOP) return;
 
//------------------------------------------------------------------------------
// 쇼핑몰 상수 모음 시작
//------------------------------------------------------------------------------
 
define('G5_SHOP_DIR', 'shop');
 
define('G5_SHOP_PATH',  G5_PATH.'/'.G5_SHOP_DIR);
define('G5_SHOP_URL',   G5_URL.'/'.G5_SHOP_DIR);
define('G5_MSHOP_PATH', G5_MOBILE_PATH.'/'.G5_SHOP_DIR);
define('G5_MSHOP_URL',  G5_MOBILE_URL.'/'.G5_SHOP_DIR);
 
define('G5_SHOP_IMG_URL',  G5_SHOP_URL.'/'.G5_IMG_DIR);
define('G5_MSHOP_IMG_URL', G5_MSHOP_URL.'/'.G5_IMG_DIR);
 
// 보안서버주소 설정
if (G5_HTTPS_DOMAIN) {
    define('G5_HTTPS_SHOP_URL', G5_HTTPS_DOMAIN.'/'.G5_SHOP_DIR);
    define('G5_HTTPS_MSHOP_URL', G5_HTTPS_DOMAIN.'/'.G5_MOBILE_DIR.'/'.G5_SHOP_DIR);
} else {
    define('G5_HTTPS_SHOP_URL', G5_SHOP_URL);
    define('G5_HTTPS_MSHOP_URL', G5_MSHOP_URL);
}
 
//------------------------------------------------------------------------------
// 쇼핑몰 상수 모음 끝
//------------------------------------------------------------------------------
 
 
//==============================================================================
// 쇼핑몰 필수 실행코드 모음 시작
//==============================================================================
 
// 쇼핑몰 설정값 배열변수
$default = sql_fetch(" select * from {$g5['g5_shop_default_table']} ");
 
if(!defined('_THEME_PREVIEW_')) {
    // 테마 경로 설정
    if(defined('G5_THEME_PATH')) {
        define('G5_THEME_SHOP_PATH',   G5_THEME_PATH.'/'.G5_SHOP_DIR);
        define('G5_THEME_SHOP_URL',    G5_THEME_URL.'/'.G5_SHOP_DIR);
        define('G5_THEME_MSHOP_PATH',  G5_THEME_PATH.'/'.G5_MOBILE_DIR.'/'.G5_SHOP_DIR);
        define('G5_THEME_MSHOP_URL',   G5_THEME_URL.'/'.G5_MOBILE_DIR.'/'.G5_SHOP_DIR);
    }
 
    // 스킨 경로 설정
    if(preg_match('#^theme/(.+)$#', $default['de_shop_skin'], $match)) {
        if(defined('G5_THEME_PATH')) {
            define('G5_SHOP_SKIN_PATH',  G5_THEME_PATH.'/'.G5_SKIN_DIR.'/shop/'.$match[1]);
            define('G5_SHOP_SKIN_URL',   G5_THEME_URL .'/'.G5_SKIN_DIR.'/shop/'.$match[1]);
        } else {
            define('G5_SHOP_SKIN_PATH',  G5_PATH.'/'.G5_SKIN_DIR.'/shop/'.$match[1]);
            define('G5_SHOP_SKIN_URL',   G5_URL .'/'.G5_SKIN_DIR.'/shop/'.$match[1]);
        }
    } else {
        define('G5_SHOP_SKIN_PATH',  G5_PATH.'/'.G5_SKIN_DIR.'/shop/'.$default['de_shop_skin']);
        define('G5_SHOP_SKIN_URL',   G5_URL .'/'.G5_SKIN_DIR.'/shop/'.$default['de_shop_skin']);
    }
 
    if(preg_match('#^theme/(.+)$#', $default['de_shop_mobile_skin'], $match)) {
        if(defined('G5_THEME_PATH')) {
            define('G5_MSHOP_SKIN_PATH', G5_THEME_MOBILE_PATH.'/'.G5_SKIN_DIR.'/shop/'.$match[1]);
            define('G5_MSHOP_SKIN_URL',  G5_THEME_URL .'/'.G5_MOBILE_DIR.'/'.G5_SKIN_DIR.'/shop/'.$match[1]);
        } else {
            define('G5_MSHOP_SKIN_PATH', G5_MOBILE_PATH.'/'.G5_SKIN_DIR.'/shop/'.$match[1]);
            define('G5_MSHOP_SKIN_URL',  G5_MOBILE_URL .'/'.G5_SKIN_DIR.'/shop/'.$match[1]);
        }
    } else {
        define('G5_MSHOP_SKIN_PATH', G5_MOBILE_PATH.'/'.G5_SKIN_DIR.'/shop/'.$default['de_shop_mobile_skin']);
        define('G5_MSHOP_SKIN_URL',  G5_MOBILE_URL .'/'.G5_SKIN_DIR.'/shop/'.$default['de_shop_mobile_skin']);
    }
}
 
if( !isset($g5['g5_shop_post_log_table']) || !$g5['g5_shop_post_log_table'] ){
    $g5['g5_shop_post_log_table'] = G5_SHOP_TABLE_PREFIX.'order_post_log'; // 주문요청 로그 테이블
}
 
// 옵션 ID 특수문자 필터링 패턴
define('G5_OPTION_ID_FILTER', '/['\"\\'\\\"]/');
 
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') {
    // 토스페이먼츠 현금영수증 실결제 URL 상수
    define('SHOP_TOSSPAYMENTS_CASHRECEIPT_REAL_JS', 'https://pgweb.tosspayments.com/WEB_SERVER/js/receipt_link.js');
    // 토스페이먼츠 현금영수증 테스트 URL 상수
    define('SHOP_TOSSPAYMENTS_CASHRECEIPT_TEST_JS', 'https://pgweb.tosspayments.com:7085/WEB_SERVER/js/receipt_link.js');
} else {
    // 토스페이먼츠 현금영수증 실결제 URL 상수
    define('SHOP_TOSSPAYMENTS_CASHRECEIPT_REAL_JS', 'http://pgweb.tosspayments.com/WEB_SERVER/js/receipt_link.js');
    // 토스페이먼츠 현금영수증 테스트 URL 상수
    define('SHOP_TOSSPAYMENTS_CASHRECEIPT_TEST_JS', 'http://pgweb.tosspayments.com:7085/WEB_SERVER/js/receipt_link.js');
}
 
// [영카트원본] 네이버페이를 신용카드 결제창에서 지원하고 있으므로 네이버에 직접신청하는 결제 기능을 미사용(false:기본설정) 합니다. (kagla,211019)
// [영카트원본] 네이버에서 직접신청 결제를 사용(true)하시는 경우 모든 문제를 직접 해결해 주셔야 합니다.
//========================================================================================
// [우주정복 수정본] 우주정복S23.0.0 에서는 네이버페이를 사용하도록 다시 되돌림
// https;//series8.kr    @우주정복 @시리즈8 @매일프랜즈
//----------------------------------------------------------------------------------------
define('G5_SHOP_DIRECT_NAVERPAY', true); // true 사용, 상품페이지에 보이게 다시 살림. false 미사용(PG사에서 지원하여 미사용하게 되었음)
//========================================================================================
 
/*
// 주문상태 상수
define('G5_OD_STATUS_ORDER'     , '입금확인중');
define('G5_OD_STATUS_SETTLE'    , '결제완료');
define('G5_OD_STATUS_READY'     , '배송준비중');
define('G5_OD_STATUS_DELIVERY'  , '배송중');
define('G5_OD_STATUS_FINISH'    , '배송완료');
*/
 
/*
# 주문상태는 상수로 처리하지 않고 실제 문자열 값을 처리한다.
 
'쇼핑'          : 고객이 장바구니에 상품을 담고 있는 경우 입니다.
'입금확인중'    : 무통장, 가상계좌의 경우 결제하기 전을 말합니다.
'결제완료'      : 결제가 완료된 상태를 말합니다.
'배송준비중'    : 배송준비중이 되면 취소가 불가합니다.
'배송중'        : 배송중이면 반품이 불가합니다.
'배송완료'      : 배송이 완료된 상태에서만 포인트적립이 가능합니다.
'취소'          : 입금확인중이나 결제완료후 취소가 가능합니다.
'반품'          : 배송완료 후에만 반품처리가 가능합니다.
'품절'          :
 
 
# 13.10.04
 
'쇼핑'  : 고객이 장바구니에 상품을 담고 있는 경우 입니다.
'주문'  : 무통장, 가상계좌의 경우 결제하기 전을 말합니다.
'입금'  : 신용카드, 계좌이체, 휴대폰결제가 된 상태, 무통장, 가상계좌는 주문후 입금한 상태를 말합니다.
'배송'  : 배송이 되면 취소가 불가합니다.
'완료'  : 배송이 완료된 상태에서만 포인트적립이 가능합니다.
'취소'  : 입금이후로는 고객의 취소가 불가합니다.
'반품'  : 배송완료 후에만 반품처리가 가능합니다.
'품절'  : 주문이나 입금후 상품의 품절된 상태를 나타냅니다.
*/
 
//==============================================================================
// 쇼핑몰 필수 실행코드 모음 끝
//==============================================================================;


shop 폴더 내부에 추가하기

php
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// [영카트원본] 네이버페이를 신용카드 결제창에서 지원하고 있으므로 네이버에 직접신청하는 결제 기능을 미사용(return:기본설정) 합니다.
// [영카트원본] 네이버에서 직접신청 결제를 사용하시는 경우 모든 문제를 직접 해결해 주셔야 합니다.
//========================================================================================
// [우주정복 수정본] 우주정복S23.0.0 에서는 네이버페이를 사용하도록 다시 되돌림
// https;//series8.kr    @우주정복 @시리즈8 @매일프랜즈
//----------------------------------------------------------------------------------------
// if (!defined('G5_SHOP_DIRECT_NAVERPAY') || !G5_SHOP_DIRECT_NAVERPAY) return;
//========================================================================================
 
if(!$is_admin && !$default['de_card_test'] && $default['de_naverpay_test']) {
    if($default['de_naverpay_mb_id'] && ($is_guest || $member['mb_id'] != $default['de_naverpay_mb_id']))
        return;
}
 
if(!$default['de_naverpay_cert_key'] || !$default['de_naverpay_button_key'])
    return;
 
if(basename($_SERVER['SCRIPT_NAME']) == 'item.php') {
    if(!$is_orderable)
        return;
}
 
$naverpay_button_js = '';
 
$is_mobile_order = is_mobile();
//$is_mobile_order = G5_IS_MOBILE;
$naverpay_button_enable = 'Y';
 
$naverpay_button_count = 2;
if(basename($_SERVER['SCRIPT_NAME']) == 'cart.php')
    $naverpay_button_count = 1;
 
if($is_mobile_order) {
    if($default['de_naverpay_test'])
        $naverpay_button_js_url = 'https://test-pay.naver.com/customer/js/mobile/naverPayButton.js';
    else
        $naverpay_button_js_url = 'https://pay.naver.com/customer/js/mobile/naverPayButton.js';
 
    $naverpay_button_js = '<script type="text/javascript" src="'.$naverpay_button_js_url.'" charset="UTF-8"></script>
    <script type="text/javascript" >//<![CDATA[
    naver.NaverPayButton.apply({
    BUTTON_KEY: "'.$default['de_naverpay_button_key'].'", // 네이버페이에서 제공받은 버튼 인증 키 입력
    TYPE: "MA", // 버튼 모음 종류 설정
    COLOR: 1, // 버튼 모음의 색 설정
    COUNT: '.$naverpay_button_count.', // 버튼 개수 설정. 구매하기 버튼만 있으면 1, 찜하기 버튼도 있으면 2를 입력.
    ENABLE: "'.$naverpay_button_enable.'", // 품절 등의 이유로 버튼 모음을 비활성화할 때에는 "N" 입력
    BUY_BUTTON_HANDLER : buy_nc, // 구매하기 버튼 이벤트 Handler 함수 등록, 품절인 경우 not_buy_nc 함수 사용
    WISHLIST_BUTTON_HANDLER : wishlist_nc, // 찜하기 버튼 이벤트 Handler 함수 등록
    "":""
    });
    //]]></script>'.PHP_EOL;
} else {
    $naverpay_button_js = '<script type="text/javascript" src="https://pay.naver.com/customer/js/naverPayButton.js" charset="UTF-8"></script>
    <script type="text/javascript" >//<![CDATA[
    naver.NaverPayButton.apply({
    BUTTON_KEY: "'.$default['de_naverpay_button_key'].'", // 페이에서 제공받은 버튼 인증 키 입력
    TYPE: "A", // 버튼 모음 종류 설정
    COLOR: 1, // 버튼 모음의 색 설정
    COUNT: '.$naverpay_button_count.', // 버튼 개수 설정. 구매하기 버튼만 있으면 1, 찜하기 버튼도 있으면 2를 입력.
    ENABLE: "'.$naverpay_button_enable.'", // 품절 등의 이유로 버튼 모음을 비활성화할 때에는 "N" 입력
    BUY_BUTTON_HANDLER : buy_nc, // 구매하기 버튼 이벤트 Handler 함수 등록, 품절인 경우 not_buy_nc 함수 사용
    WISHLIST_BUTTON_HANDLER : wishlist_nc, // 찜하기 버튼 이벤트 Handler 함수 등록
    "":""
    });
    //]]></script>'.PHP_EOL;
}
 
$naverpay_button_js .= '<input type="hidden" name="naverpay_form" value="'.basename($_SERVER['SCRIPT_NAME']).'">'.PHP_EOL;
 
if($default['de_naverpay_test'] || $default['de_card_test']) {
    $req_addr     = 'ssl://test-pay.naver.com';
    $buy_req_url  = 'POST /customer/api/order.nhn HTTP/1.1';
    $wish_req_url = 'POST /customer/api/wishlist.nhn HTTP/1.1';
    $req_host     = 'test-pay.naver.com';
    $req_port     = 443;
    if($is_mobile_order) {
        $orderUrl = 'https://test-m.pay.naver.com/mobile/customer/order.nhn';
        $wishUrl  = 'https://test-m.pay.naver.com/mobile/customer/wishList.nhn';
    } else {
        $orderUrl = 'https://test-pay.naver.com/customer/order.nhn';
        $wishUrl  = 'https://test-pay.naver.com/customer/wishlistPopup.nhn';
    }
} else {
    $req_addr     = 'ssl://pay.naver.com';
    $buy_req_url  = 'POST /customer/api/order.nhn HTTP/1.1';
    $wish_req_url = 'POST /customer/api/wishlist.nhn HTTP/1.1';
    $req_host     = 'pay.naver.com';
    $req_port     = 443;
    if($is_mobile_order) {
        $orderUrl     = 'https://m.pay.naver.com/mobile/customer/order.nhn';
        $wishUrl      = 'https://m.pay.naver.com/mobile/customer/wishList.nhn';
    } else {
        $orderUrl     = 'https://pay.naver.com/customer/order.nhn';
        $wishUrl      = 'https://pay.naver.com/customer/wishlistPopup.nhn';
    }
}
 
define('SHIPPING_ADDITIONAL_PRICE', $default['de_naverpay_sendcost']);
 
$naverpay_request_js = '<script type="text/javascript" >//<![CDATA[
function buy_nc(url)
{
    var f = $(this).closest("form").get(0);
 
    var check = fsubmit_check(f);
    if ( check ) {
        //네이버페이로 주문 정보를 등록하는 가맹점 페이지로 이동.
        //해당 페이지에서 주문 정보 등록 후 네이버페이 주문서 페이지로 이동.
        //location.href=url;
 
        //var win_buy_nc = window.open("_blank", "win_buy_nc", "scrollbars=yes,width=900,height=700,top=10,left=10");
        //f.action = "'.G5_SHOP_URL.'/naverpay/naverpay_order.php";
        //f.target = "win_buy_nc";
        //f.submit();
        //return false;
 
        $.ajax({
            url : "'.G5_SHOP_URL.'/naverpay/naverpay_order.php",
            type : "POST",
            data : $(f).serialize(),
            async : false,
            cache : false,
            dataType : "json",
            success : function(data) {
                if(data.error) {
                    alert(data.error);
                    return false;
                }
 
                document.location.href = "'.$orderUrl.'?ORDER_ID="+data.ORDER_ID+"&SHOP_ID="+data.SHOP_ID+"&TOTAL_PRICE="+data.TOTAL_PRICE;
            }
        });
    }
 
    return false;
}
function wishlist_nc(url)
{
    var f = $(this).closest("form").get(0);
 
    // 네이버페이로 찜 정보를 등록하는 가맹점 페이지 팝업 창 생성.
    // 해당 페이지에서 찜 정보 등록 후 네이버페이 찜 페이지로 이동.
    '.($is_mobile_order ? '' : 'var win_wishlist_nc = window.open(url,"win_wishlist_nc","scrollbars=yes,width=400,height=267");'.PHP_EOL.'f.target = "win_wishlist_nc";').'
    f.action = "'.G5_SHOP_URL.'/naverpay/naverpay_wish.php";
    f.submit();
 
    return false;
}
function not_buy_nc()
{
    alert("죄송합니다. 네이버페이로 구매가 불가한 상품입니다.");
    return false;
}
//]]></script>'.PHP_EOL;

현재는 네이버 페이가 영카트 결제 시스템에 포함 되어 있다고 한다.

통합되다 보니 따로 연동할 필요 없다.

참고 자료 :

https://sir.kr/bbs/board.php?bo_table=g5_skin&wr_id=52310