네이버페이 적용

2018. 8. 24. 14:09PHP

반응형

월10일 test_n.php의 수량부분 누락코드 발견되어서 추가하였습니다.


추가적으로 계속 문의오셔서 해결되는 부분들을 추가로 기재해놓겠습니다 ^^


avada테마 부분은 본아님께 도움을 드리면서 알게된 코드입니다.


avada테마 이용하시는분들은

저에게 문의하신분께서 avada테마를 사용하셔서 정보를 얻게되었습니다.


simple.php에서 상품 가격 가져오는 코드입니다.

 form_data.PRODUCT_PRICE = $('meta[itemprop="price"]').attr("content"); // 상품가격


cart.php에서 상품 가격 부분을 이렇게 기재하시면 될듯합니다.

$temp_product_price = $cart_itme['data']->price;


------------------------------------------------------------------------

​요즘 인터넷 쇼핑하시면 네이버 페이가 편해서

 

저희 쇼핑몰에도 네이버 페이를 연동해야겠다!! 마음 먹고 공유된 소스가 없나~

 

이리저리 검색을 해보았지만... 아무런 정보가 부족하여... 플러그인을 살려고 했더니...

 

가격이 쫌 있어서 개발을 하게 되었습니다...

 

우선 저같은 경우는 플러그인으로 개발을 하지 않았습니다...

 

간단한 플러그인은 개발 할수있지만.....

 

아직 역량이 부족한거 같아서 시간을 두고 만들면 할수있을듯 하지만...

 

다른일도 있기에...

 

부족한 부분이 많이 있을겁니다. 그런부분은 양해 해주시고...

 

조언이나 수정부분 알려주시면 감사하겠습니다^^

 

우선 전 4개의 php 파일을 수정하였고 3개의 php 파일을 만들었습니다.

 

수정한 파일명 - header.php / footer.php / simple.php / cart,php

 

만든 파일명 - test_n.php / test_n_w.php / test_n_p_info.php

 

위부분의 만든 파일명은 편하신대로 파일명 정하셔서 만드시면 됩니다.

 

단 잘 외우고 계세요 ㅎ 나중에 ajax 주소로 사용되는것도 있고,

 

네이버페이에 안내해줘야될 페이지도 있습니다.

 

본론으로 넘어가서 네이버 페이 연동소스입니다.

 

대부분의 소스에 주석 처리를 해놓았습니다.

 

Jquery를 사용하여서 Jquery 세팅이 안되어있으시면 header.php에 같이 추가해주세요 ^^

 

1
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.js"></script>
cs

 

 

header.php 페이지 수정 내용입니다.

 

모바일 네이버페이 까지 연동하기 위해서 모바일 체크를 하였습니다.

 

var naver_btn_chk = "MA"; <-- 모바일 버튼 모양 설정입니다. MA / MB 2가지중에 쓰심됩니다.

var naver_btn_chk = "A"; <-- A부터 E까지 있을 껍니다. 5가지 중에 쓰시면 됩니다.

 

var mobile_chk  이부분은 찜연동할때 모바일은 페이지 전환 방식이여야 하면,

PC경우는 팝업이여야 하므로 구분을 해서 팝업과 페이지 전환 구현을 위해서 사용됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
 
/* wp-content/themes/테마명 폴더에 있는 header.php */
/* header.php 페이지 <head></head> 사이에 붙여 넣기  */
$mobile_agent = array("iphone","ipod","android","blackberry","opera Mini""windows ce""nokia""sony" );
$check_mobile = false;
for($i=0$i<sizeof($mobile_agent); $i++){ 
    if(preg_match("/$mobile_agent[$i]/", strtolower($_SERVER['HTTP_USER_AGENT']))){ 
        $check_mobile = true;
        break
    } 
}
if($check_mobile){
?>
    <script type="text/javascript" src="http://pay.naver.com/customer/js/mobile/naverPayButton.js" charset="UTF-8"></script>
    <script type="text/javascript">
        var naver_btn_chk = "MA";
        var mobile_chk = "mobile";
    </script>
<?
}else
?>
    <script type="text/javascript" src="http://pay.naver.com/customer/js/naverPayButton.js" charset="UTF-8"></script>
    <script type="text/javascript">
        var naver_btn_chk = "A";
        var mobile_chk = "pc";
    </script>
<?
}
/* header.php 소스 끝 */
 
?>
cs

 

 

 

다음은 footer.php 페이지 수정내용입니다.

 

이부분은 header.php에 넣으셔도 무방합니다 ^^ 자유롭게 사용하시면됩니다.

 

여기는 유입경로 스크립트입니다

 

수정하실껀 딱2개 네이버공통인증키 / 도메인명만 바꾸셔서 사용하시면 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
/* wp-content/themes/테마명 폴더에 있는 footer.php */
/* footer.php 페이지 ?php wp_footer(); ? 다음에 붙여 넣기  */
 
/* 유입경로 스크립트 적용 입니다. */
?>
 
<script type="text/javascript" src="http://wcs.naver.net/wcslog.js"></script>
<script type="text/javascript">
                if (!wcs_add)
                    var wcs_add = {};
                    wcs_add["wa"= "네이버공통인증키"// 네이버페이 신청시 메일에 온 네이버공통인증키 입력하시면 됩니다.
                    wcs.inflow("도메인명"); // 여긴 도메인 주소 입력하시면 됩니다. 예 - www.test.co.kr 
</script>
<script type="text/javascript">
                jQuery( function( $ ) {
                    $(document).ready(function(){
                        wcs_do();
                    })
                });
</script>
cs

 

 

다음은 simple.php 페이지 수정 내용입니다.

 

이부분은 잘읽어보시길 바랍니다.

 

개발한 저의 경우는 Extra Products option (즉 E.P.O) 플러그인 사용으로 인하여서

 

개발을 E.P.O에 맞춰서 개발하였습니다.

 

안쓰시는분들은 주석으로 삭제하셔도 된다고 한부분은 지우고 사이트에 맞게 코딩하시면 됩니다.

 

simple.php는 단순상품에서 네이버페이가 출력되게하는 부분입니다.

 

혹시 옵션상품을 우커머스 기본으로 사용하신다면

 

variable.php를 아마 simple.php처럼 비슷하게 코딩하시면 될듯 합니다.

 

단 옵션값을 찾아서 저장하시는것을 만드셔야될것같습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php
 
/* wp-content/themes/테마명/woocommerce/single-product/add-to-cart 폴더에 있는 simple.php */
/* simple.php 페이지  */
 
    $temp_post_id = get_the_ID(); // 상품 번호 구하기
    $temp_produc_id = '"'.$temp_post_id.'"'// 상품 번호 - javascript 로 보내기 위해서 " " 처리 하였습니다.
 
    $post_name = get_the_title( $temp_post_id ); // 상품명 구하기
    $temp_product_name'"'.$post_name.'"'// 상품명 - javascript 로 보내기 위해서 " " 처리 하였습니다.
 
    $user_ID = get_current_user_id(); // 네이버 페이시 검수용을 위한 세팅
    if($user_ID == "관리자 유저값" || $user_ID == "네이버페이 심사용 아이디값"){ // 네이버 페이시 검수용을 위한 세팅 관리자값과 심사용 아이디값 각각 맞게 수정하시면됩니다. 
    // 검수 통과시 위에 2줄은 삭제하시거나 주석 처리 하시면 됩니다.
    
    
    /* 찜 정보제공시 이미지 주소 값 구하기 */
    $temp_product_thumb = wp_get_attachment_image_src( get_post_thumbnail_id($temp_post_id), 'thumbnail' );
    $product_thumb = '"'.$temp_product_thumb['0'].'"'// 상품 썸네일 이미지 - javascript 로 보내기 위해서 " " 처리 하였습니다.
 
    /* 찜 정보제공시 썸네일이미지 주소 값 구하기 */
    $temp_product_img = wp_get_attachment_image_src( get_post_thumbnail_id($temp_post_id), 'single-post-thumbnail' );
    $product_img = '"'.$temp_product_img['0'].'"'// 상품 이미지 - javascript 로 보내기 위해서 " " 처리 하였습니다.
 
 
 
?>
 
<!-- 아래부분은 네이버 페이에서 기본 제공하는 자바스크립트 입니다. 추가 적으로 수정하였습니다. -->
<script type="text/javascript" >
    
    /* 상품 구매 연동 function 입니다. */
    function buy_nc(){ 
        
        /* 아래 부분부터는 Extra products option 사용 시 적용 하시면 될듯합니다. */
        /* Extra products option 안쓰시는 분은 삭제하셔도 됩니다^^ */
        /* 일반 옵션 상품은 개발하지 않았습니다...ㅠ_ㅠ 저흰 옵션 플로그인을 사용 하여서요.. 혹시 하시다가 막히시면 추가로 개발해서 안내드릴께요~ */
            var temp_option = new Array(); // 상품 옵션시 이용
            for(var i = 0; i<"옵션 수" ; i++){ // 옵션 수에 맞게 기제하시면 됩니다.
                var temp_option_data = $("select[name=tmcp_select_"+i+"]").val(); //상품 옵션 선택시 값 저장
                if(temp_option_data != null){
                    var strArray = temp_option_data.split('_'); // E.P.O 사용시는 옵션값에 _ 가 붙기 때문에 _ 제거 처리하는것 입니다.
                    temp_option[i] =  strArray[0];
                }
            }
            var option = temp_option[0+ "/" + temp_option[1+ "/" + temp_option[2]; // 옵션값 붙이기 입니다.
        /* Extra products option 사용 시 코드 끝 */
 
 
        var temp_product_id = <?=$temp_produc_id?>// 상품 번호
        var temp_product_name = <?=$temp_product_name?>// 상품명
        //var spt = ""; // 배송 입력란 입니다. 그냥 공백으로 두셔도 됩니다. 따로 php에서 처리 할수있습니다. 예- FREE 시 무료배송 / PAYED시 배송시 선불 
        var option = ""// 옵션값 입력란 입니다. 옵션이 없을시 그냥 공백으로 두셔도 됩니다.
        
        /* ajax 전송을 위해서 배열로 data 정리 */
        /* Jquery된 부분들은 각 홈페이지 테마 마다 다를수 있습니다. 확인하시고 수정하여야 됩니다.*/
        /* 예 - $("input[name=cpf_product_price]").val(); 이런부분 말씀입니다.*/
        var order_data = []; 
        var form_data = new Object();
        form_data.ITEM_ID = temp_product_id; // 상품 번호
        form_data.PRODUCT_NAME = temp_product_name; // 상품명
        form_data.PRODUCT_PRICE = $("input[name=cpf_product_price]").val(); // 상품가격
        //form_data.option_price = $("select[name=tmcp_select_0]").find(':selected').attr('data-price'); // 상품 옵션 가격 있을시 부분에 맞게 세팅 하셔야됩니다.
        form_data.qa = $("input[name=quantity]").val(); // 상품 수량
        //form_data.spt = spt; // 배송방법 - 상품에 배송방법이 추가 되있을경우 사용 예- 고속버스 화물 ... 이런 추가비용 발생하는것들
        form_data.option = option; // 옵션값  
        order_data.push(form_data); // 배열에 담기
        var jsondata = JSON.stringify(order_data); // JSON화 시키기
        
        /* ajax 전송 */
        /* 초보자라... url을 php페이지 만들어서 전송처리 하였습니다.. 고수분들은 수정하셔서 사용하세요. */
        $.ajax({
            type: 'POST',
            contentType: 'application/json; charset=UTF-8',
            url: 'http://도메인주소/wp-content/themes/테마명/파일명.php'// 이 주소는 FTP에 넣으신 주소로 하시면 됩니다. 저같은경우는 테마 폴더에 넣었습니다.
            data: jsondata,
            success: function (text) { // 성공시 리턴값 받기
                    var url = text;
                    //console.log(text); // 리턴된 text값의 로그 체크 위해서 사용하였습니다. 개발시에는 주석 지우시고 테스트하시다가 결과값 전송잘되면 주석처리 하시면됩니다.
                    window.location.href=url;
            },
            error: function(xhr, status, error){ // 실패시 에러값 받기
                console.log(error);
              }
        });
    }
    
    /* 찜 하기 연동 function 입니다. */
    function wishlist_nc(){     
        var temp_product_id = <?=$temp_produc_id?>// 상품 번호
        var temp_product_name = <?=$temp_product_name?>// 상품명
        var temp_img = <?=$product_img?>// 상품 이미지
        var temp_thumb = <?=$product_thumb?>// 상품 썸네일 이미지
        var wishlist_data = [];
        var form_data = new Object();
        form_data.ITEM_ID = temp_product_id; // 상품번호
        form_data.PRODUCT_NAME = temp_product_name; // 상품명
        form_data.PRODUCT_PRICE = $("input[name=cpf_product_price]").val(); //상품 가격
        form_data.img = temp_img; // 상품 이미지
        form_data.thumb = temp_thumb; // 상품 썸네일 이미지
        wishlist_data.push(form_data); // 배열에 추가
        var wishlist_jsondata = JSON.stringify(wishlist_data); // JSON화 시키기
 
        $.ajax({
            type: 'POST',
            contentType: 'application/json; charset=UTF-8',
            url: 'http://도메인주소/wp-content/themes/테마명/파일명.php'// 이 주소는 FTP에 넣으신 주소로 하시면 됩니다. 저같은경우는 테마 폴더에 넣었습니다.
            data: wishlist_jsondata,
            success: function (text) {
                    var url = text;
                    //console.log(text); // 리턴된 text값의 로그 체크 위해서 사용하였습니다. 개발시에는 주석 지우시고 테스트하시다가 결과값 전송잘되면 주석처리 하시면됩니다.
                    if(mobile_chk == "pc"){ // pc 버전일시 팝업
                        window.open(url,"","scrollbars=yes,width=400,height=267");
                    }else// 모바일일때 페이지 전환
                        window.location.href=url;
                    }
            },
            error: function(xhr, status, error){
                console.log(error);
              }
        });
    }    
 
 
    function not_buy_nc(){
        alert("죄송합니다. 네이버페이로 구매가 불가한 상품입니다.");
        return false;
    }
</script>
<!-- 네이버페이 버튼 나와게 하는 부분입니다. -->
<div id="naver-pay-btn" style="clear: both;    padding-top: 10px;">
</div>
</form>
<script type="text/javascript" >//<![CDATA[
    naver.NaverPayButton.apply({
        BUTTON_KEY:"버튼 인증키 값 기재"//네이버페이에서 할당받은 버튼 인증키 값을 입력하세요.
        TYPE: naver_btn_chk, // 템플릿을 확인하시고 원하는 타입의 버튼을 선택 naver_btn_chk 이부분은 header 에서 모바일, pc체크 해서 받아옵니다.
        COLOR: 1// 버튼의 색 설정
        COUNT: 2// 버튼 개수 설정. 구매하기 버튼(장바구니 페이지)만 있으면 1, 찜하기 버튼(상품 상세 페이지)과 함께 있으면 2 를 입력한다.
        ENABLE: "Y"// 품절등과 같은 이유에 따라 버튼을 비활성화할 필요가 있을 경우
        EMBED_ID:"naver-pay-btn",
        BUY_BUTTON_HANDLER:buy_nc, // 구매하기 버튼 이벤트 Handler 함수 등록, 품절인 경우 not_buy_nc 함수 사용
        WISHLIST_BUTTON_HANDLER:wishlist_nc
    });
//]]></script>
<!-- 네이버페이 버튼 나오게하는 부분 소스 끝 -->
<?
    }
 
    /* simple.php 페이지 소스 끝  */
?>
 
cs

 

 

다음은 cart.php 페이지 수정 내용 입니다.

 

이부분은 장바구니에서 여러 상품을 네이버 페이로 보내야 하기 때문에

 

장바구니 정보를 php 배열로 만들어서 JSON화 시켜서

 

자바스크립트로 보내서 ajax 전송을 하였습니다.

 

장바구니 foreach 문 안에서 배열로 받으셔야 합니다.

 

그래야 모든 상품 정보가 배열로 저장 됩니다^^

 

foreach 문 과 바로 다음 if 문 안에 넣어서 배열로 만드세요 ㅎ

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
<?php
/* wp-content/themes/테마명/woocommerce/cart 폴더에 있는 cart.php */
/* cart.php 페이지  */
 
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        $_product     = apply_filters( 'woocommerce_cart_item_product'$cart_item['data'], $cart_item$cart_item_key );
        $product_id   = apply_filters( 'woocommerce_cart_item_product_id'$cart_item['product_id'], $cart_item$cart_item_key );
 
        if ( $_product && $_product->exists() && $cart_item['quantity'> 0 && apply_filters( 'woocommerce_cart_item_visible'true$cart_item$cart_item_key ) ) {
             ?>
            <tr class="<?php echo esc_attr( apply_filters( 'woocommerce_cart_item_class', 'cart_item', $cart_item, $cart_item_key ) ); ?>">
            .....
            .....
            .....
                <td class="product-remove">
                    <?php
                        echo apply_filters( 'woocommerce_cart_item_remove_link', sprintf( '<a href="%s" class="remove" title="%s"><i class="getbowtied-icon-close_regular"></i></a>', esc_url( WC()->cart->get_remove_url( $cart_item_key ) ), __( 'Remove this item''woocommerce' ) ), $cart_item_key );
                    ?>
                </td>
                
            </tr>
            <?
            /* 위 내용처럼 소스 기재되 있는 부분 젤 하단에 기재하시면됩니다. */
 
            $temp_post_id = esc_attr( $product->id ); // 상품 번호 가져오기
 
            /* 이부분은 E.P.O (Extra products option) 사용으로 테스트 하기 위해서 기재한 소스입니다. */
            $user_ID = get_current_user_id(); // 유저값 가져오기
            if($user_ID == "관리자 유저값" || $user_ID == "네이버 페이 검수 아이디값"){ // 검수 아이디값은 새로 생성하셔서 네이버페이에 알려주시면 됩니다. 검수 끝나면 지워주시면 됩니다.
 
                //print_r($cart_item['tmcartepo']); // 데이터 확인 하기위해서 개발하실때 주석 지우시고 배열값 확인하시고 지우셔도 됩니다.
                /* E.P.O 사용 하시는분은 옵션값 받는 소스입니다.  */
                if($cart_item['tmcartepo'][0]['value'!= null){
                    $temp_option = $cart_item['tmcartepo'][0]['value']."/".$cart_item['tmcartepo'][1]['value']."/".$cart_item['tmcartepo'][2]['value']."/".$cart_item['tmcartepo'][3]['value'];
                    // 옵션 값 개수에 맞춰서 연결 하시면 됩니다 ^^
 
                    //$temp_spt = $cart_item['tmcartepo'][3]['value']; // 저희는 고속버스 운송조건이 붙어서 사용한것입니다. 일반분들은 안쓰셔도 됩니다 ^^
                }
 
            }
            /* 테스트 위한 소스 끝 */
 
            /* cart 정보 배열로 저장 */
            $temp_cart_data[] = array(
                "ITEM_ID"=>$product_id// 상품번호
                "PRODUCT_NAME"=>$_product->get_title(), // 상품명
                "PRODUCT_PRICE"=>$cart_item['배열 명칭 기재'], // 상품 가격 이부분은 print_r($cart_item); 하셔서 배열을 확인하시서 배열 명칭 기재 하세요 ^^ 아마 price일듯 하지만요 ㅎ 전 E.P.O 사용하여서 다를것 같아서 E.P.O 사용하시는분은 tm_epo_product_original_price 넣으시면 됩니다.
                "option_price"=>0// 옵션 가격입니다. 옵션 가격이 있을시 $cart_item['배열 명칭 기재'] 기재 없으면 패스~ 이부분도...  print_r($cart_item); 하셔서 배열을 확인하시서 배열 명칭 기재 하세요 ^^ E.P.O 사용하시는분은 $cart_item['tmcartepo'][0]['price'] 이라고 기재하시면 될듯 합니다.
                "qa"=>$cart_item['quantity'], // 수량 기재
                "option"=>""// 옵션 기재 입니다. 옵션값으면 기재 안하셔도 됩니다. E.P.O 사용 하시는분만 $temp_option 으로 기재하시면 됩니다.
                //"spt"=>"" // 배송비 지개 입니다. 여기 안쓰셔도 됩니다 ㅎㅎ E.P.O 사용 하시는분만 $temp_spt 으로 기재하시면됩니다.
            );
        }
}
 
?>
 
 
    <? /* cart 코드 내용 */ ?>
    <?php do_action( 'woocommerce_cart_actions' ); ?>
    <?php do_action( 'woocommerce_after_cart' ); ?>
    <div class="cart-collaterals">
    <? /* cat 코드 내용 끝 */ ?>
 
    <? /* 위 cart 코드 아래 부분에 네이버 페이 버튼 소스 코드 기재 하시면 됩니다. */
        /* 위 코드 부분은 네이버 페이 버튼이 나오게 하고 싶으신 부분에 넣으시면 됩니다 ^^ 꼭 저 코드 다음이 아니여도 전혀 무방합니다~ */
        /* 모바일 장바구니에서 보시고 참고해서 넣으시면 됩니다 ^^*/
    ?>
    
            <?
            $user_ID = get_current_user_id();
            if($user_ID == "관리자 유저값" || $user_ID == "네이버페이 검수 유저값"){
                /* 위에 2줄은 이제 따로 설명 안드려도 될듯하지만~ 검수할때만 쓰시고 지우세요~ */
            $cart_data_json = json_encode($temp_cart_data); // 위에서 cart 정보 배열로 담은거 json_encode 하기
 
        ?>
        <script type="text/javascript" >
 
            function buy_nc(){
                var temp_json = <?=$cart_data_json?>// 위에 php에서 json 한값 가져오기
                var jsondata = JSON.stringify(temp_json);
                $.ajax({
                    type: 'POST',
                    contentType: 'application/json; charset=UTF-8',
                    url: 'http://도메인주소/wp-content/themes/테마명/파일명.php'// 이 주소는 FTP에 넣으신 주소로 하시면 됩니다. 저같은경우는 테마 폴더에 넣었습니다.
                    data: jsondata,
                    success: function (text) {
                            var url = text;
                            //console.log(text); // 리턴된 text값의 로그 체크 위해서 사용하였습니다. 개발시에는 주석 지우시고 테스트하시다가 결과값 전송잘되면 주석처리 하시면됩니다.
                            window.location.href=url;
                    },
                    error: function(xhr, status, error){
                        console.log(error);
                      }
                });
            }
                
            function not_buy_nc(){
                alert("죄송합니다. 네이버페이로 구매가 불가한 상품입니다.");
                return false;
            }
        </script>
        <!-- 네이버페이 버튼 나와게 하는 부분입니다. -->
        <div id="naver-pay-btn" style="clear: both;    padding-top: 10px;">
        </div>
        </form>
        <script type="text/javascript" >//<![CDATA[
        naver.NaverPayButton.apply({
        BUTTON_KEY:"버튼 인증키 값 기재"//네이버페이에서 할당받은 버튼 인증키 값을 입력하세요.
        TYPE: naver_btn_chk, // 템플릿을 확인하시고 원하는 타입의 버튼을 선택 naver_btn_chk 이부분은 header 에서 모바일, pc체크 해서 받아옵니다.
        COLOR: 1// 버튼의 색 설정
        COUNT: 1// 버튼 개수 설정. 구매하기 버튼(장바구니 페이지)만 있으면 1, 찜하기 버튼(상품 상세 페이지)과 함께 있으면 2 를 입력한다.
        ENABLE: "Y"// 품절등과 같은 이유에 따라 버튼을 비활성화할 필요가 있을 경우
        EMBED_ID:"naver-pay-btn",
        BUY_BUTTON_HANDLER: buy_nc // 구매하기 버튼 이벤트 Handler 함수 등록, 품절인 경우 not_buy_nc 함수 사용
 
        });
        //]]></script>
        <!-- 네이버페이 버튼 나오게하는 부분 소스 끝 -->
<?
            }
    ?>
cs

 

 

이렇게 해서 4개의 워드프레스 php 파일을 수정 하였습니다.

 

다은은 네이버에서 제공하는 네이버페이 / 찜 / 상품정보 제공 / 3개의 페이지 입니다.

 

첫번째로 네이버페이 주문 등록 소스 입니다.

 

파일명은 각자 잘~~ 만드세요 ㅎㅎ

 

임시로 - test_n.php로 하겠습니다.

 

여기서 부터는 수정할 곳이 좀 있습니다.

 

네이버페이 아이디 넣기 / 가맹점 인증키 넣기 / 무료배송 조건 넣기 / 배송비 가격 넣기 /

상품상세 주소 넣기 / 장바구니 주소 넣기/

 

상품상세와 장바구니 주소가 필요한이유는 1개의 물품만 사셨다면 상품페이지로 보내면되지만

 

장바구니에서 네이버페이로 구매했을때 돌아갈곳은 장바구니 여야 된다고 합니다~^^

 

명심하세요~ 이것도 검수과정중에 1가지 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89

<?
header("Content-Type: text/html; charset=UTF-8");
 
$value = json_decode(file_get_contents('php://input'),true);
 
//print_r($value);  // 이부분은 ajax로 넘어온 값 잘 들어오는지 출력하는 겁니다 ^^ 개발하실때만 주석 지우고 사용하시고 잘들어오면 지우셔도 됩니다~
 
$arr_count = count($value);
 
/* 모바일 구분해서 pc버전 네이버페이 주소와 모바일 네이버페이 주소 구분 하는 소스입니다. */
$mobile_agent = array("ipone","ipod","android","blackberry","opera Mini""windows ce""nokia""sony" );
$check_mobile = false;
for($i=0$i<sizeof($mobile_agent); $i++){ 
    if(preg_match("/$mobile_agent[$i]/", strtolower($_SERVER['HTTP_USER_AGENT']))){ 
        $check_mobile = true;
        break
    } 
}
if($check_mobile){ 
    $mobile_chk_url = "https://test-m.pay.naver.com/mobile/customer/order.nhn";  // 모바일 네이버 페이
}else
    $mobile_chk_url = "https://test-pay.naver.com/customer/order.nhn"// PC 네이버 페이
}
 
 
//item data를 생성한다.
class ItemStack {
var $id;
var $name;
var $tprice;
var $uprice;
var $option;
var $count;
    //option이 여러 종류라면, 선택된 옵션을 슬래시(/)로 구분해서 표시하는 것을 권장한다.
    function ItemStack($_id$_name$_tprice$_uprice$_option$_count) {
        $this->id = $_id;
        $this->name = $_name;
        $this->tprice = $_tprice;
        $this->uprice = $_uprice;
        $this->option = $_option;
        $this->count = $_count;
    }
    function makeQueryString() {
        $ret .= "ITEM_ID=" . urlencode($this->id);
        $ret .= "&ITEM_NAME=" . urlencode($this->name);
        $ret .= "&ITEM_COUNT=" . $this->count;
        $ret .= "&ITEM_OPTION=" . urlencode($this->option);
        $ret .= "&ITEM_TPRICE=" . $this->tprice;
        $ret .= "&ITEM_UPRICE=" . $this->uprice;
        return $ret;
    }
};
 
 
$shopId = '가입시 기재한 아이디(즉 네이버페이센터 로그인 아이디)';  // 네이버페이센터 로그인 아이디 //
$certiKey = '가맹점 인증키'//메일로 전송된 가맹점 인증키 기재 // 
 
$temp_total_money = 0// 배송비 확인을 위해서 총 상품 금액 저장하기 위한 변수
for($i=0$i<$arr_count$i++){
    $temp_uprice = $value[$i]['PRODUCT_PRICE']; // 상품 가격
    $option_price = $value[$i]['option_price'];  // 상품 옵션에 별도 가격이 있을시 사용
    $count = $value[$i]['qa']; // 수량
    $uprice = $temp_uprice + $option_price// 상품 가격에 옵션값 합
    $tprice = $uprice * $count;
    $temp_total_money = $temp_total_money + $tprice// 상품별 총 금액 더하기!
}
 
if($temp_total_money >= "무료배송 조건 가격기재"){ // 무료배송 조건 가격 예 - 3만원이상시 무료배송이다 = 30000 // 
    $shippingPrice =  0// 배송이 0원
    $shippingType = 'FREE'// 무료배송~
}else{
    $shippingPrice = "배송비 기재"// 배송비 기재~
    $shippingType = 'PAYED'// 선불 배송~
}
 
if($arr_count == 1 ){
    $backUrl = "도메인명/?p=".$value[0]['ITEM_ID']; // 주문 상품 수정 /예- http://www.test.com
}else{
    $backUrl = "도메인명/cart/"// 주문 상품 수정 장바구니 주소 기재하시면 됩니다. /예- http://www.test.com/cart/
}
 
$queryString = 'SHOP_ID='.urlencode($shopId);
$queryString .= '&CERTI_KEY='.urlencode($certiKey);
$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;
//DB와 장바구니에서 상품 정보를 얻어 온다.
 
/* 장바구니 or 상품 구매시 상품 정보 확인*/
for($i=0$i<$arr_count$i++){
    $id = $value[$i]['ITEM_ID'];
    $name = $value[$i]['PRODUCT_NAME'];
    $temp_uprice = $value[$i]['PRODUCT_PRICE'];
    $option_price = $value[$i]['option_price'];  // 상품 옵션 가격
    $option = ""// 상품에 별도 옵션이 없을시 "", 별도 옵션이 존재 하면 사용 - $value[$i]['option']
    $count = $value[$i]['qa']; // 수량
    $uprice = $temp_uprice + $option_price// 상품 가격에 옵션값 합
    $tprice = $uprice * $count;
 
$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"); // 주문 내용 쿼리문 출력 //
 
$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=utf-8\r\n");
    //fwrite($nc_sock, "Content-type: application/x-www-form-urlencoded; charset=CP949\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");
 
    // 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
        echo $bodys;
    }
}else {
    echo "$errstr ($errno)<br>\n";
    exit(-1);
    //에러처리
}
 
//리턴받은 order_id로 주문서 page를 호출한다.
//echo ($orderId."<br>\n");
$orderUrl = $mobile_chk_url."?ORDER_ID=".$orderId."&SHOP_ID=".$shopId."&TOTAL_PRICE=".$totalPrice;
if ($resultCode == 200) {
    echo $orderUrl// ajax 성공시 주소 전달
}
?>
 

cs

 

 

 

두번째는 네이버페이 찜 연동 페이지 입니다.

 

위에 처럼 파일명은 각자 잘~~ 만드세요 ㅎㅎ

 

임시로 - test_n_w.php로 하겠습니다.

 

이부분은 네이버 상품 구매 연동 소스랑 비슷합니다

 

이곳에서 수정할 곳은 네이버페이 아이디 넣기 / 가맹점 인증키 넣기 / 도메인 주소 넣기

만하시면 됩니다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
 
<?
header("Content-Type: text/html; charset=UTF-8");
 
$value = json_decode(file_get_contents('php://input'),true);
 
//print_r($value);
 
$arr_count = count($value);
 
$mobile_agent = array("ipone","ipod","android","blackberry","opera Mini""windows ce""nokia""sony" );
$check_mobile = false;
for($i=0$i<sizeof($mobile_agent); $i++){ 
    if(preg_match("/$mobile_agent[$i]/", strtolower($_SERVER['HTTP_USER_AGENT']))){ 
        $check_mobile = true;
        break
    } 
}
if($check_mobile){ 
}else
}
 
 
//item data를 생성한다.
class ItemStack {
var $id;
var $name;
var $uprice;
var $image;
var $thumb;
var $url;
    function ItemStack($_id$_name$_uprice$_image$_thumb$_url) {
        $this->id = $_id;
        $this->name = $_name;
        $this->uprice = $_uprice;
        $this->image = $_image;
        $this->thumb = $_thumb;
        $this->url = $_url;
    }
    function makeQueryString() {
        $ret .= 'ITEM_ID=' . urlencode($this->id);
        $ret .= '&ITEM_NAME=' . urlencode($this->name);
        $ret .= '&ITEM_UPRICE=' . $this->uprice;
        $ret .= '&ITEM_IMAGE=' . urlencode($this->image);
        $ret .= '&ITEM_THUMB=' . urlencode($this->thumb);
        $ret .= '&ITEM_URL=' . urlencode($this->url);
        return $ret;
    }
};
 
$shopId = '가입시 기재한 아이디(즉 네이버페이센터 로그인 아이디)';  // 네이버페이센터 로그인 아이디 //
$certiKey = '가맹점 인증키'//메일로 전송된 가맹점 인증키 기재 // 
$queryString = 'SHOP_ID='.urlencode($shopId);
$queryString .= '&CERTI_KEY='.urlencode($certiKey);
$queryString .= '&RESERVE1=&RESERVE2=&RESERVE3=&RESERVE4=&RESERVE5=';
//DB 에서 상품 정보를 얻어온다.
 
for($i=0$i<$arr_count$i++){
    $uid = $value[$i]['ITEM_ID']; // 상품번호
    $name = $value[$i]['PRODUCT_NAME']; // 상품명
    $uprice = $value[$i]['PRODUCT_PRICE']; // 상품 가격
    $image = $value[$i]['img']; // 상품이미지 주소
    $thumb = $value[$i]['thumb']; // 상품 썸네일이미지 주소
    $url = "도메인 주소 기재/?p=".$uid;
    $item = new ItemStack($uid$name$uprice$image$thumb$url);
    $queryString .= '&'.$item->makeQueryString();
}
 
//echo($queryString."<br>\n");
 
$req_addr = 'ssl://test-pay.naver.com';
$req_url = 'POST /customer/api/wishlist.nhn HTTP/1.1'// utf-8
// $req_url = 'POST /customer/api/CP949/wishlist.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=utf-8\r\n"); // utf-8
    //fwrite($nc_sock, "Content-type: application/x-www-form-urlencoded; charset=CP949\r\n"); // euc-kr
    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");
    // 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
        // 한개일경우
        $itemId = $bodys;
        // 여러개일경우
        //$itemIds = trim($bodys);
        //$itemIdList = split(",",$itemIds);
    } else {
        // fail
        echo $bodys;
    }
}
else {
echo "$errstr ($errno)<br>\n";
exit(-1);
//에러처리
}
//리턴받은 itemId로 주문서 page를 호출한다.
//echo "<br> 아이템 아이디 : ".$itemId."<br>";
 
$wishlistPopupUrl = $mobile_chk_url."?SHOP_ID=".$shopId."&ITEM_ID=".$itemId;
if ($resultCode == 200) {
    
    echo $wishlistPopupUrl// ajax 주소 전달
}
 
?>
 
cs

 

 

 

어느덧 마지막으로 네이버페이 상품정보 제공 페이지 입니다.

 

위에 처럼 파일명은 각자 잘~~ 만드세요 ㅎㅎ

 

임시로 - test_n_p_info.php로 하겠습니다.

 

이부분은 네이버페이에서 상품정보를 제공받기위해서 요청하는 페이지입니다.

 

XML로 정보를 제공하여야 하므로 phpmyadmin 로그인을 따로 했습니다 ㅠㅜ

 

뭐 저의 능력부족일수도 있겠지만요 ㅎㅎ

 

저보다 능력 좋은신분들을 편하게 바꾸셔서 사용하세요~

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
 
<?
$host   = "localhost";
$user   = "로그인 아이디";
$pw     = "비밀번호";
$dbname = "DB명";
 
$conn     = mysql_connect$host$user$pw ) or die( "디비에 연결할 수 없습니다." );
mysql_query("set names utf8");
mysql_select_db$dbname ) or die( mysql_error() );
 
$query = $_SERVER['QUERY_STRING'];
$vars = array();
foreach(explode('&'$queryas $pair) {
    list($key$value= explode('='$pair);
    $key = urldecode($key);
    $value = urldecode($value);
    $vars[$key][] = $value;
}
 
$itemIds = $vars['ITEM_ID'];
$item_count = count($itemIds);
if ($item_count < 1) {
    exit('ITEM_ID 는 필수입니다.');
}
 
header('Content-Type: application/xml;charset=UTF-8');
echo ('<?xml version="1.0" encoding="UTF-8"?>');
echo'<response>';
 
for($i=0$i<$item_count$i++){
    $post_id = $vars['ITEM_ID'][$i]; // 상품 ID = POST_ID 입니다.
    
    /* 상품 아이디 & 상품 이름 & 상품 소개 정보 불러오기 */
    $product_data_sql = mysql_query("select * from wp_posts where ID = '$post_id'");
    $product_data_result = mysql_fetch_array($product_data_sql);
    
    /* 상품 가격 정보 불러오기 */
    $product_data_meta_sql = mysql_query("select * from wp_postmeta where post_id = '$post_id' AND meta_key = '_price'");
    $product_data_meta_result = mysql_fetch_array($product_data_meta_sql);
 
    $id = $product_data_result['ID'];    // 상품 고유 아이디 = 즉 post_id  입니다. $id = $post_id; 이렇게 사용하셔도 무방합니다.
    $name = $product_data_result['post_title']; // 상품명 = 즉 post_title(상품 제목) 입니다.
    $url = "도메인명/?p=".$id// url은 상품 주소 입니다.(http://www.test.com - 이부분을 사용자 도메인으로 수정하시면 됩니다.)
    $description = $product_data_result['post_excerpt']; // 상품 소개란 입니다.
    $price = $product_data_meta_result['meta_value']; // 상품 가격란 입니다.
    $quantity = 1// 상품 수량란 입니다. - 이건 기본 1개로 하셔도 되는듯 합니다.
    
    /* 상품 썸네일 정보 불러오기 */
    $product_thumb_data_meta_sql = mysql_query("select * from wp_postmeta where post_id = '$post_id' AND meta_key = '_thumbnail_id'");
    $product_thumb_data_meta_result = mysql_fetch_array($product_thumb_data_meta_sql);
    $post_thumbnail = $product_thumb_data_meta_result['meta_value'];
    
    /* 상품 이미지 정보 불러오기 */
    $product_img_data_sql = mysql_query("select * from wp_posts where ID = '$post_thumbnail'");
    $product_img_data_result = mysql_fetch_array($product_img_data_sql);
 
    $product_img = $product_img_data_result['guid']; // 상품이미지 주소 입니다.
    
    /* 상품이미지 주소 잘라서 썸네일 주소 만들기 */
    /* 사용되는 평균 이미지 확장자만 세팅 했습니다. */
    $arr = explode("."$product_img);
    if($arr[3== 'jpg'){
        $img_exe = ".jpg";
    }else if($arr[3== 'JPG'){
        $img_exe = ".JPG";
    }else if($arr[3== 'jpeg'){
        $img_exe = ".jpeg";
    }else if($arr[3== 'JPEG'){
        $img_exe = ".JPEG";
    }else if($arr[3== 'png'){
        $img_exe = ".png";
    }else if($arr[3== 'PNG'){
        $img_exe = ".PNG";
    }else if($arr[3== 'gif'){
        $img_exe = ".gif";
    }else if($arr[3== 'GIF'){
        $img_exe = ".GIF";
    }
 
    $thumbnail_img = $arr[0].".".$arr[1].".".$arr[2]."-190x236".$img_exe// 상품 썸네일 주소 입니다. -190x236 부분은 각 사용하시는 썸네일에 맞춰서 변경해주시면 됩니다.
 
    /* 카테고리 정보 불러오기 */
    $category_sql = mysql_query("select * from wp_term_relationships where object_id ='$id'");
    $category_rows = mysql_num_rows($category_sql);
 
    for($c=0$c<$category_rows$c++){
        $temp_category_id = mysql_result($category_sql$c, term_taxonomy_id);
 
        $term_taxonomy_sql = mysql_query("select * from wp_term_taxonomy where term_taxonomy_id = $temp_category_id and taxonomy = 'product_cat'");
        $term_taxonomy_row = mysql_num_rows($term_taxonomy_sql);
 
        if($term_taxonomy_row != 0){
            $term_taxonomy_result = mysql_fetch_array($term_taxonomy_sql);
            $category_id = $term_taxonomy_result['term_id'];
            if($category_id != "제외하고 싶은 카테고리 번호"){ // 예 - 43 <- 숫자는 전체보기 카테고리를 만들었을시 제외 처리를 위해서 사용하였습니다. 여러가지 카테고리를 선택하지않으셨다면 if문은 지우셔도 됩니다.
                $slug_sql = mysql_query("select * from wp_terms where term_id = '$category_id'");
                $slug_result = mysql_fetch_array($slug_sql);
                
                $category_name = $slug_result['name'];
                $category_slug = urldecode($slug_result['slug']);
            }
        }
    }
?>
<item id="<?=$id?>">
<name><![CDATA[<?=$name?>]]></name>
<url><?=$url?></url>
<description><![CDATA[<?=$description?>]]></description>
<image><?=$product_img?></image>
<thumb><?=$thumbnail_img?></thumb>
<price><?=$price?></price>
<quantity><?=$quantity?></quantity>
<category>
<first id="<?=$category_slug?>"><?=$category_name?></first>
</category>
<options>
<?
    /* Extra Products Option 사용분들을 위한 옵션 불러오기 */
    $product_option_data_meta_sql = mysql_query("select * from wp_postmeta where post_id = '$post_id' AND meta_key = 'tm_meta_cpf'");
    $product_option_data_meta_result = mysql_fetch_array($product_option_data_meta_sql);
    
    $temp_option = unserialize($product_option_data_meta_result['meta_value']);
 
    $global_forms = $temp_option['global_forms'];
    if($global_forms != null){
        $global_option_count = count($temp_option['global_forms']);
        for($b=0$b<$global_option_count$b++){
            $temp_option_id = $temp_option['global_forms'][$b];
 
            $option_sql = mysql_query("select * from wp_postmeta where post_id = '$temp_option_id' and meta_key ='tm_meta'");
            $option_result = mysql_fetch_array($option_sql);
 
            $option = unserialize($option_result['meta_value']);
 
            $option_count = count($option['tmfbuilder']['multiple_selectbox_options_value'][0]);
            
            echo '<option name="옵션">';
            for($a=0$a<$option_count$a++){
                $temp_option_name = $option['tmfbuilder']['multiple_selectbox_options_value'][0][$a];
                $aa = $a + 1;
                ?>
                <select> <![CDATA[<?=$temp_option_name?>]]> </select>
                <?
            }
            echo '</option>';
        }
    }
    echo '</options>';
    echo '</item>';
}
 
echo '</response>';
?>
cs

 

 

이렇게 소스는 적용하였습니다^^

 

모든 홈페이지나 테마에 적용이 될지는 모르겠지만

 

최소한의 수정 코딩은 하여야 할듯합니다 ^^

 

저보다 개발 고수 및 선배분들이 조언 및 수정 해주셨으면 합니다~

 

문의 사항이나 질문사항은 메일로 보내주세요 ㅎ


반응형

'PHP' 카테고리의 다른 글

페이팔로 결제를 요청할 전송 폼 만들기  (0) 2018.09.07
PHP 날짜 계산 정리  (0) 2018.08.30
Unirest for PHP  (0) 2018.06.28
API Store, SMS  (0) 2018.06.27
gmail smtp 메일 보내기 - 오류해결  (0) 2018.06.09