퀵 가이드
퀵 가이드 내용을 포함한 포트원 결제 연동 샘플 프로젝트를 GitHub 저장소에서 추가로 확인하실 수 있습니다.
브라우저 측
포트원 브라우저 SDK 불러오기
포트원 브라우저 SDK를 불러옵니다.
아래 명령어로 브라우저 SDK를 설치합니다.
npm install --save @portone/browser-sdk
yarn add @portone/browser-sdk
pnpm add @portone/browser-sdk
bun add @portone/browser-sdk
deno add npm:@portone/browser-sdk
ni @portone/browser-sdk
상품 정보 불러오기
서버로부터 결제할 상품의 정보를 불러옵니다.
결제 요청
포트원 브라우저 SDK를 사용하여 결제를 요청합니다.
상점 아이디
포트원 계정에 생성된 상점을 식별하는 고유한 값으로 관리자 콘솔 > 연동 정보 우측 상단에서 확인할 수 있습니다.
채널키
관리자 콘솔 > 연동 정보에서 채널 연동 시 생성된 채널키입니다.
고객사 주문 고유 번호
주문을 식별하는 고유 번호로, 포트원에서 제공하지 않고 직접 입력합니다.
이미 승인이 완료된 paymentId
로 결제나 가상계좌 발급을 시도하는 경우 에러가 발생합니다.
토스페이먼츠의 경우 영문 대소문자, 숫자, -
, _
만 허용되며, 6자 이상 64자 이하로 입력합니다.
주문명
주문명으로 자유롭게 입력합니다.
결제 금액
결제 금액을 정수로 입력합니다.
-
해외 통화의 경우 통화의 최소 단위를 기준으로 합니다. 예를 들어, USD의 최소 단위는 센트(0.01 USD)이므로, 6 USD의 경우 100배하여 600으로 입력합니다.
-
통화의 최소 단위는 ISO 4217에 의해 표준화된 minor unit입니다.
- KRW: 1배
- USD: 100배
- JPY: 1배
결제 수단
사용할 결제 수단에 맞는 값을 입력합니다.
카드 결제 추가 정보
payMethod
가 CARD
인 경우 카드 결제와 관련한 추가 정보를 입력할 수 있습니다.
단독 노출 카드사
구매자가 카드사를 선택하지 않고 입력한 카드사 화면으로 바로 이동하도록 합니다.
토스페이먼츠의 경우 카드사 단독 노출과 동시에 할부를 설정하려면 card.installment.monthOption.fixedMonth
를 반드시 전달해야 하며, 그렇지 않을 경우 일시불로 결제됩니다.
카드사 일부 노출
지정한 일부 카드사만을 목록에 노출할 수 있습니다. 상단의 카드사 식별 값 항목을 참고해주세요.
상점 분담 무이자 활성화 여부
토스페이먼츠의 경우 상점 분담 무이자 할부 이용 시 별도 계약이 필요합니다.
할부 사용 여부
할부 설정
토스페이먼츠의 경우 신용카드 할부 이용 시 별도 계약이 필요합니다.
무이자 할부 설정
고객사가 부담하는 무이자 할부 설정입니다.
무이자 할부를 제공하는 카드사 식별 값
상단의 카드사 식별 값 항목을 참고해주세요.
무이자 할부를 제공하는 개월 수
할부 개월 수 설정
할부 결제 시 할부 개월 수를 설정할 수 있습니다.
fixedMonth
와 availableMonthList
중 하나만 제공해주세요.
구매자가 선택할 수 없도록 고정된 할부 개월 수
구매자가 할부 개월 수를 선택할 수 있도록 하려면 availableMonthList
를 사용해주세요.
토스페이먼츠의 경우 현대카드는 1만원, 그 외는 5만원 이상 결제에 대해서만 적용됩니다.
구매자가 선택할 수 있는 할부 개월 수 목록
카드사 포인트 사용 여부
토스페이먼츠의 경우 카드사 포인트 사용 시 별도 계약이 필요합니다.
앱 카드만 허용할지 여부
토스페이먼츠의 경우 씨티카드는 적용이 불가능합니다.
면세 금액
결제 금액 중 면세금액에 해당하는 금액을 입력합니다.
- 미입력 시 0으로 취급됩니다.
- 결제 금액과 동일하게 통화별 scale factor가 적용된 금액으로 전달해주세요.
토스페이먼츠의 경우 면세 및 복합과세 이용 시 별도 계약이 필요합니다.
부가세
부가세 금액을 입력합니다.
- 미입력 시 과세 금액의 1/11 로 자동 계산됩니다.
- 결제 금액과 동일하게 통화별 scale factor가 적용된 금액으로 전달해주세요.
구매자 정보
구매자 고유 아이디
구매자를 식별하는 고유 번호로, 자유롭게 입력합니다.
구매자 전체 이름
fullName
과 (firstName
,lastName
) 쌍 중 하나만 입력해 주세요.
구매자의 성을 제외한 이름
firstName
과lastName
은 함께 입력해야 합니다. 전체 이름은{firstName} {lastName}
으로 기록됩니다.
구매자의 성
firstName
과lastName
은 함께 입력해야 합니다. 전체 이름은{firstName} {lastName}
으로 기록됩니다.
구매자 연락처
구매자 이메일 주소
구매자 주소
국가
ISO 3166-1 alpha-2에 의해 표준화된 2글자 국가 코드입니다.
일반 주소
상세 주소
도시
주, 도, 시
구매자 우편번호
구매자 성별
MALE
,FEMALE
,OTHER
중 하나를 입력해주세요.
구매자 출생년도
1990
과 같이 숫자 4자리로 입력해 주세요.
구매자 출생월
07
과 같이 숫자 2자리로 입력해 주세요.
구매자 출생일
08
과 같이 숫자 2자리로 입력해 주세요.
customData
에는 임의의 데이터를 저장할 수 있습니다.
서버에서 결제건 조회 시에 확인할 수 있으며, 상품 정보를 전달하여 서버가 인식한 상품 정보와 일치하는지 확인할 수 있습니다.
결제대행사 고유 기능
- 결제수단에 프로모션을 적용할 경우 토스페이먼츠로부터 제공받은 코드를 입력합니다.
true
로 설정하면 해외 카드로만 결제를 허용합니다.
리디렉션 방식에서 결제 프로세스 완료 후 이동될 고객사 URL
- 대부분의 모바일 결제환경에서 반드시 입력해야 합니다.
결제 웹훅 수신 URL
관리자 콘솔에서 설정한 웹훅 주소 대신 사용할 주소입니다.
- 해당 값 설정시 관리자 콘솔에 설정한 주소로는 웹훅이 발송되지 않습니다.
모바일 결제 후 고객사 앱으로 복귀하기 위한 URL scheme
ISP/앱카드에서 결제 완료 후 고객사 앱으로 복귀할 때 사용합니다.
토스페이먼츠의 경우 myappscheme://
형식으로 입력해 주세요.
상품 유형
휴대폰 소액결제 시 productType
는 필수 입력이며, 상점에 설정된 상품 유형과 입력된 상품 유형이 다른 경우 결제가 실패합니다.
- 실물 상품:
PRODUCT_TYPE_REAL
- 디지털 상품:
PRODUCT_TYPE_DIGITAL
서비스 제공 기간
range
와 interval
중 하나만 입력해주세요.
서비스 제공 기간 범위
시작 시점
종료 시점
제공 기간
{number}d
({number}
일){number}m
({number}
분){number}y
({number}
년)
구매 상품 상세 정보
상품 아이디
상품명
상품 코드
토스페이먼츠의 경우 반드시 입력해주세요.
상품 단위 가격
- 결제 금액과 동일하게 통화별 scale factor가 적용된 금액으로 전달해주세요.
상품 수량
상품 태그
상품 링크
상점 정보
상점 대표자 이름
상점 연락처
상점 주소
상점 우편번호
상점 사업자명
상점 사업자 번호
문화비 지출 여부
도서, 공연, 박물관 등 문화비 지출 여부
에스크로 결제 여부
true
로 설정하면 에스크로를 사용합니다.
토스페이먼츠의 경우 에스크로 사용 시 별도 계약이 필요합니다.
결제 국가
ISO 3166-1 alpha-2에 의해 표준화된 2글자 국가 코드입니다.
프로모션 아이디
결제창이 팝업 방식일 경우 결제창에 적용할 속성
true
로 설정하면 결제창이 브라우저 화면의 정중앙에 표시됩니다.
결제 오류 처리
결제 중 오류가 발생하여 결제가 완료되지 않은 경우를 처리합니다.
SDK
의 반환 값에 code
가 있는 경우 오류 상태로 message
필드에 오류 메시지가 존재합니다.
결제대행사로부터 오류를 전달받은 경우 code
는 FAILURE_TYPE_PG
이고, 결제대행사의 오류 코드인 pgCode
를 기반으로 결제 오류를 처리할 수 있습니다.
서버 측으로 결제 완료 요청
완료된 결제의 paymentId
를 서버로 전송하여 결제 상태를 반영합니다.
결제 완료 상태 처리
서버로부터 검증 후 결제가 완료된 경우를 처리합니다.
결제 실패 상태 처리
서버로부터 검증 결과를 획득하여, 결제가 최종적으로 실패한 경우를 처리합니다.
서버 측
포트원 서버 SDK 불러오기
포트원 서버 SDK를 불러옵니다.
아래 명령어로 서버 SDK를 설치합니다.
npm install --save @portone/server-sdk
yarn add @portone/server-sdk
pnpm add @portone/server-sdk
bun add @portone/server-sdk
deno add jsr:@portone/server-sdk
ni @portone/server-sdk
Node.js의 경우 v20 이상에서 정상 동작하며, v20 미만 버전은 폴리필이 필요합니다.
포트원 API Secret 설정
서버 SDK를 사용하기 위해 포트원 V2 API Secret을 설정합니다. API Secret은 포트원 관리자콘솔의 결제 연동 > 연동 정보 > 식별코드 ・ API Keys > V2 API에서 발급받으실 수 있습니다.
결제 완료 요청
완료된 결제의 실제 상태를 조회해 시스템에 반영합니다. 브라우저 SDK를 통해 결제하는 경우 모든 결제 과정이 브라우저에서 진행되므로 결제가 조작되는 것을 막기 위해 서버에서 검증이 필요합니다.
결제 정보 조회
브라우저에서 전송한 paymentId
를 통해 실제 결제 상태를 조회합니다.
ISP/페이북을 통한 결제 시 토스페이먼츠가 실제 카드 번호와 다른 카드 번호를 전달하고 있어 결제 내역 단건 조회시 응답되는 payment_method_detail.card.detail.bin
정보가 정확하지 않을 수 있습니다.
결제 정보 일치 검증
포트원에 전달한 customData
로 조회한 상품 정보와 결제 정보가 일치하는지 검증합니다.
웹훅 수신
결제 상태의 변화를 실시간으로 확인해야 한다면 웹훅을 사용할 수 있습니다.
HTTP Body 수신 설정
웹훅 내용을 검증하기 위해서는 HTTP Body를 문자열 형태로 수신해야 합니다.
웹훅 검증
수신한 웹훅이 위조되지 않았는지 포트원 서버 SDK를 사용하여 검증합니다.
결제 상태 업데이트
검증된 웹훅 결과를 바탕으로 결제 상태를 업데이트합니다.