네이버페이(결제형)은 다른 결제대행사와 다르게 별도의 검수절차가 존재합니다.
검수 진행은 포트원 기술지원팀을 통하여 진행해주셔야 하므로 아래 1번, 2번의 내용을 포트원 기술지원팀(support@portone.io)로 네이버페이 결제형 검수를 요청 주시기 바랍니다. (3번 내용은 참고)
참고로 아래(1,2번) 정보는 네이버페이(결제형) 검수 진행시에 네이버페이에서 필수로 요구하는 정보입니다.
1. 사업자 및 계약정보
- 상호명 :
- 사업자번호 :
- 포트원 계정 :
- 네이버페이 연동 개발자 연락처(이메일/전화번호) : 담당자님 정보를 적어주세요
- 네이버페이 연동 검수 담당자 연락처(이메일/전화번호) : 담당자님 정보를 적어주세요
- 네이버페이 결제형 파트너ID : 단건/반복(정기) 이용하실 방식에 따라 구분하여 전달 주세요.
- 검수 진행가능한 URL :
- 테스트 가능한 로그인계정 :
2. 질의사항
- 적립금 적립방식(자체적립/네이버페이적립) :
- 현금영수증 발급 방식(자체발행/네이버페이대행발행) :
- 판매상품 과/면세 여부:
- 에스크로 사용여부:
- 모바일앱 보유 여부:
- 부분취소 제공여부:
- IMP.request_pay 함수 호출 시 naverProduct 파라미터 설정 셋팅 예시:
- 개발진행 완료여부 : 포트원 연동가이드 바로가기↗
- 금액위변조 기능 개발 여부 :
판매 상품의 실제 구매금액이 화면표시부터 네이버페이 도달까지 금액이 위변조 되지 않도록 조치 해야 합니다.
금액변조 방지 기능을 내부적으로 구현하기 어려우신가요?
포트원 에서 참조 및 제공할 수 있는 기능이 있어 소개드립니다.
(네이버페이) 결제창을 띄우기 직전에 결제금액을 미리 사전에 등록하는 api를 사용하실 수 있습니다.
인증방식의 결제를 진행할 때 결제금액 위변조시 결제진행자체를 block하기 위해 결제예정금액을 사전등록하는 기능입니다.
금액변조 방지 기능을 내부적으로 구현하기 어려우신가요?
포트원 에서 참조 및 제공할 수 있는 기능이 있어 소개드립니다.
(네이버페이) 결제창을 띄우기 직전에 결제금액을 미리 사전에 등록하는 api를 사용하실 수 있습니다.
인증방식의 결제를 진행할 때 결제금액 위변조시 결제진행자체를 block하기 위해 결제예정금액을 사전등록하는 기능입니다.
단, 해당 기능을 이용하실 때는 server-side에서 구현하시는 것이 바람직합니다.
추가적으로 포트원 연동 가이드의 결제정보 검증을 통해 취소 및 실패처리 로직을 구현하시는 것을 권해 드립니다.
추가적으로 포트원 연동 가이드의 결제정보 검증을 통해 취소 및 실패처리 로직을 구현하시는 것을 권해 드립니다.
3. 검수요청서 작성 가이드
💡
참고사항
아래 내용은 검수 요청서 작성 시 자세히 참고하실 수 있는 가이드입니다.
검수요청서 파일은 네이버페이로부터 안내받으실 수 있으며, 검수요청서 다운받기 링크를 통해서도 다운로드 가능합니다. (직접 편집 불가 하며 다운로드 후 이용가능)
연동 담당자
- 연동 담당자(개발/검수 담당자):검수 요청 메일을 보낸 고객사 담당자의 이름<이메일 주소>형태로 기재합니다.
검수 환경
- 계정: 고객사 담당자로부터 전달 받은 테스트 계정 / 테스트 계정 비밀번호를 기재합니다.
- 과/면세 기준: IMP.request_pay 호출시 tax_free 파라미터 전달 여부로 판단합니다.
(전달시 면세 , 비 전달시 과세) - 가맹점 타입: IMP.request_pay 호출시 escrow 파라미터 값으로 판단합니다.
(true시 에스크로, false시 비 에스크로) - 포인트 적립 타입, 현금영수증 발행: 가맹점이 네이버페이와 계약한 내용을 기반으로 하므로 고객사 에서 포트원으로 검수 요청시 해당 정보를 제공합니다.
- PC, Mobile Web, Mobile App, 관리자페이지: 제공하는 각 환경에 대해 테스트 가능한 URL, 지원하는 종류와 버전, 부분취소 제공 여부를 파악해 기재합니다.
간편 결제 플랫폼 연동 현황
- 현금영수증 발행대상 금액조회, 거래완료, 네이버페이 포인트 적립 요청은 위 검수환경에 작성된 내용을 기반으로 작성합니다.
결제창 호출(NaverPay javascript SDK) 연동 현황
- PC와 모바일에서 결제창이 호출되는 방식을 파악하고 맞는 값에 O 표시를 합니다.
- layer 방식은 더이상 지원하지 않습니다.
- page 방식이란, 네이버페이 URL로 리디렉션 되는 방식을 의미합니다.
productItems(상품 상세 정보) parameter 연동 현황
네이버페이 - 결제형의 경우,
결제창 호출(IMP.request_pay 함수)시 상품 정보를 의미하는 naverProducts 파라미터를 필수로 전달해야 합니다. 이 값이 없다고 해서 결제가 안되는 것은 아니지만, 네이버페이 측에서 데이터 수집을 위해 필수로 전달할 것을 요구하고 있습니다. naverProducts 파라미터는 상품 정보(객체)를 담고 있는 배열이며, 각 상품 정보는 아래 6가지 속성을 갖고 있습니다.
결제창 호출(IMP.request_pay 함수)시 상품 정보를 의미하는 naverProducts 파라미터를 필수로 전달해야 합니다. 이 값이 없다고 해서 결제가 안되는 것은 아니지만, 네이버페이 측에서 데이터 수집을 위해 필수로 전달할 것을 요구하고 있습니다. naverProducts 파라미터는 상품 정보(객체)를 담고 있는 배열이며, 각 상품 정보는 아래 6가지 속성을 갖고 있습니다.
네이버페이 공식 매뉴얼 보러가기 ↗
- categoryType (필수) : BOOK, MUCIC, MOVIE, PROCUCT 등등 (공식매뉴얼 참고)
- categoryId (필수) : (공식매뉴얼 참고)
- uid (필수) : 가맹점 내부의 상품 고유 ID를 활용하는 것이 일반적입니다만, 네이버페이 가이드 참고가 필요합니다. (공식매뉴얼 참고)
- name (필수) : 주문상품의 명칭
- count (필수) : 상품 주문 개수
- payReferrer (선택) : 네이버 플랫폼의 타 서비스와 제휴계약 후 유입분석을 진행하는 경우에만 입력
해당 파라미터값을 “코드 예” 항목에 넣어주시면 됩니다.
사전 준비 항목
- 자체 앱 보안 설정 항목을 제외한 모든 부분은 포트원에서 이미 처리하고 있으므로 확인 결과를 모두 "O"로 설정합니다.
- 앱을 검수하는 경우에는 자체앱 보안 설정 항목이 처리되어 있는지 직접 확인하며, 웹을 검수하는 경우에는 모두 *(해당 사항 없음 의미) *로 설정합니다.
name 파라미터
name 파라미터는 주문명을 의미합니다.
간혹 2개 이상의 상품을 구매하는 경우, name값을 “XX외 X건”과 같은 형식으로 전달하는 경우가 있습니다.
네이버페이 - 결제형의 경우 2개 이상의 상품 구매시 주문명을 위와 같이 자동으로 생성하기 때문에 name 파라미터는 항상 naverProducts[0].name값과 동일한 값으로 설정해야 합니다.
간혹 2개 이상의 상품을 구매하는 경우, name값을 “XX외 X건”과 같은 형식으로 전달하는 경우가 있습니다.
네이버페이 - 결제형의 경우 2개 이상의 상품 구매시 주문명을 위와 같이 자동으로 생성하기 때문에 name 파라미터는 항상 naverProducts[0].name값과 동일한 값으로 설정해야 합니다.
해당 파라미터가 정상적으로 설정된 경우, 간편결제 API > 결제창 호출 > “No.6 productName(대표 상품명)은 상품명만 전달하는지 확인”에 정상으로 체크해주시면 됩니다.
에러 메시지 비 가공
결제창 호출(IMP.request_pay 함수)후 결제창 하단의 “취소" 버튼 클릭 등으로 결제 프로세스가 중단되거나 잔액 부족, 한도 초과, 10원 미만 결제 등의 사유로 결제에 실패하면 콜백 함수(popup 방식)/m_redirect_url(리디렉션 방식)로 전달되는 결제 결과(response 객체/쿼리 파라미터)에 실패 사유(error_msg)가 전달됩니다.
이 에러 메시지는 사용자에게 가공 없이 그대로 노출되어야 합니다.
이 에러 메시지는 사용자에게 가공 없이 그대로 노출되어야 합니다.
ex) error_msg가 “잔액 부족"이라고 가정할때, "결제에 실패하였습니다. 실패 사유:" + "잔액 부족"과 같은 형태로 가공되면 안됨
해당 내용이 정상적으로 반영되어있는 경우, 결제 화면 > “No.3 실패 응답에 대한 resultMessage를 받은 경우 서비스 시나리오에 따라 적절하게 처리되었는지 확인”에 정상으로 체크해주시면 됩니다.
10원 미만 결제 처리
네이버페이 - 결제형의 최소 결제 금액은 10원이기 때문에, 10원 미만 결제 요청에 대해 예외 처리가 되어있어야 합니다.
ex) 사용자에게 최소 결제 금액이 10원이라 결제를 할 수 없다는 의미를 담는 에러 메시지가 노출되어야 함
해당 내용이 정상적으로 반영되어있는 경우, 간편결제 API > “No.8 totalPayAmount 최소 결제금액(10원)에 대한 예외 처리 확인”에 정상으로 체크해주시면 됩니다.
결제 금액 위/변조
프론트엔드에서 javascript 함수를 호출해 결제창이 렌더링되는 만큼 결제 금액이 얼마든지 위/변조 될 수 있습니다. 결제 금액 위/변조시 승인 완료 후 가맹점 웹서버가 이를 감지해 주문 처리를 하지 않는지 체크해야 합니다. 정상적인 프로세스는 아래와 같습니다.
결제 금액 위/변조하여 결제창 호출 → 승인 완료 → 콜백 함수 호출(또는 m_redirect_url로 리디렉션) → 가맹점 웹서버로 HTTP 리퀘스트 → 전달된 포트원 번호(imp_uid)로 실제로 결제 된 금액(amount)을, 주문 번호(merchant_uid)로 결제를 의도한 금액(예) amountToBePaid)을 조회 → amount와 amountToBePaid가 일치하는 경우에만 주문 완료 처리 → 일치하지 않는 경우 위/변조 된 결제이므로 해당 결제 건을 취소하고 사용자에게 위/변조 된 결제라는 점 안내
해당 내용이 정상적으로 반영되어있는 경우, 결제로직 취약성 > No.3(총 결제금액은 동일하고, 수량만 변경하였을 경우 변조 유무를 체크하는지 확인), No. 4(결제금액과 관련된 기타 파라미터 변경시 결제금액이 변경되는지 확인)에 정상으로 체크해주시면 됩니다.
결제 취소 API 호출시 요청 본문
네이버페이 - 결제형 결제건의 경우, 결제 취소 API(POST /payments/cancel) 호출시 추가적으로 전달해야할 요청 본문 파라미터가 있습니다. 해당 파라미터는 아래와 같습니다.
- reason: 결제 취소 사유, 실제 사유와 같아야 함
- extra:
{ requester: “admin” 또는 “customer” }
: 결제 취소 대상자를 구분하는 값으로 admin은 가맹점을, customer는 가맹점 고객을 의미
4. 연동시 참고사항
네이버페이는 크게 아래의 3단계에 걸쳐 심사가 완료됩니다.
- 네이버페이로부터 (결제형) 입점심사 결정
- 네이버페이(결제형) 연동 완료
- 네이버페이 심사
심사단계에서는 네이버페이가 여러 가지 UI/UX적인 체크와 기능 체크를 하게 됩니다.
- 네이버페이 버튼이 네이버 내부의 디자인 가이드에 맞게 적용되어있는지
- 결제금액을 변조해서 결제를 해봤을 때 주문완료처리를 하지 않고 걸러내는지
- 부분취소 기능은 잘 동작하는지 등등 을 전반적으로 사이트 검수하게 됩니다.
(네이버페이와 관련된 디자인 및 기능들을 점검하는데 통상적으로 2주 정도 소요되는 경향이 있습니다)