한국결제네트웍스(KPN)

한국결제네트웍스(KPN) 결제 연동 방법을 안내합니다.

채널 설정하기

사전 계약 안내

아래 기능을 사용하시려면 한국결제네트웍스(KPN)에 사전 신청 후 계약이 완료되어야 합니다. 그렇지 않은 상태에서 해당 기능 이용시 결제 승인에 실패하거나, 승인에 성공하더라도 의도한 바와는 다른 응답(ex. 결제창에서 에스크로 결제를 했으나 비-에스크로 결제 응답을 받음)을 얻게 될 수 있으니 주의해주시기 바랍니다.

  • API를 통한 수기(키인) 결제 (카드, 가상계좌)
  • API를 통한 빌링키 발급
  • 에스크로 결제 (결제창)
  • 가상계좌 입금통보 설정 (백노티)
  • 상점분담무이자 설정
  • 부분무이자 설정
  • 비과세 금액 직접 설정
  • 간편결제 다이렉트 호출
  • 결제 취소 시 계좌 환불 서비스 설정

가능한 결제 수단

  • 결제창 일반 결제

    payMethod 파라미터를 결제 수단에 따라 아래와 같이 설정해야 합니다.

    • 카드 : CARD
    • 계좌이체 : TRANSFER
    • 가상계좌 : VIRTUAL_ACCOUNT
    • 휴대폰 소액 결제 : MOBILE
    • 간편결제 : EASY_PAY
  • 결제창 빌링키 발급

    billingKeyMethod 파라미터를 결제 수단에 따라 아래와 같이 설정해야 합니다.

    • 카드: CARD
  • API 수기(키인) 결제

    method 파라미터를 결제 수단에 따라 아래와 같이 설정해야 합니다.

    • 카드: card 로 설졍하여 카드 관련 파라미터 입력
    • 가상계좌: virtualAccount 로 설정하여 가상계좌 관련 파라미터 입력

    자세한 파라미터 구성은 REST API Docs 를 참고해주시기 바랍니다.

  • API 빌링키 발급

    method 파라미터를 결제 수단에 따라 아래와 같이 설정해야 합니다.

    • 카드: card 로 설졍하여 카드 관련 파라미터 입력

    자세한 파라미터 구성은 REST API Docs를 참고해주시기 바랍니다.

SDK 결제 요청하기

결제 요청 시에는 requestPayment 함수를 호출해야 합니다. channelKey 파라미터에 결제 채널 연동 후 생성된 채널 키를 지정하여 한국결제네트웍스(KPN) 채널 사용을 명시해주세요.

한국결제네트웍스(KPN) 기준으로 작성한 예시 코드는 아래와 같습니다.

SDK 결제 요청
import * as PortOne from "@portone/browser-sdk/v2"; function requestPayment() { PortOne.requestPayment({ storeId: "store-4ff4af41-85e3-4559-8eb8-0d08a2c6ceec", // 고객사 storeId로 변경해주세요. channelKey: "channel-key-9987cb87-6458-4888-b94e-68d9a2da896d", // 콘솔 결제 연동 화면에서 채널 연동 시 생성된 채널 키를 입력해주세요. paymentId: `payment${Math.random().toString(36).slice(2)}`, orderName: "나이키 와플 트레이너 2 SD", totalAmount: 1000, currency: "CURRENCY_KRW", payMethod: "CARD", }); }

주요 파라미터

storeId: string

스토어 아이디

포트원 계정에 생성된 상점을 식별하는 고유한 값으로 관리자 콘솔에서 확인할 수 있습니다.

paymentId: string

고객사 주문 고유 번호

고객사에서 채번하는 주문 고유 번호로 매번 고유하게 채번되어야 합니다. 이미 승인 완료된 paymentId로 결제를 시도하는 경우 에러가 발생합니다.

orderName: string

주문명

주문명으로 고객사에서 자유롭게 입력합니다.

channelKey: string

채널 키

포트원 콘솔 내 [결제연동] > [채널관리] 화면에서 채널 추가 시 생성되는 값입니다. 결제 호출 시 채널을 지정할 때 사용됩니다.

totalAmount: number

결제 금액

결제 금액으로 결제를 원하는 통화(currency)별 scale factor(소수점 몇번째 자리까지 유효한지)를 고려한 number 형식만 허용됩니다.

currency: string

결제 통화

결제통화로 원화 결제 시 KRW로 입력해야 합니다.

payMethod: string

결제수단 구분코드

결제 호출 시 결제수단을 지정할 때 사용됩니다.

  • 신용카드 : CARD
  • 실시간 계좌이체 : TRANSFER
  • 가상계좌 : VIRTUAL_ACCOUNT
  • 휴대폰 소액결제 : MOBILE
  • 간편 결제 : EASY_PAY
bypass?: object

PG사 결제창 호출 시 PG사로 그대로 bypass할 파라미터들의 모음

kpn?: object

한국결제네트웍스(KPN)에서 제공하는 파라미터

CardSelect?: enum[]

일부 렌더링할 결제방식 목록

특정 카드사로 구별되지 않는 결제수단을 지정할 때 사용합니다.

  • 해외카드 (VISA + MASTER + JCB) : GLOBAL
  • 구인증 : LEGACY_AUTH
  • 키인 : KEY_IN

유의사항

공통

카드 결제

간편 결제

계좌이체

가상계좌 결제

휴대폰 소액결제

SDK 빌링키 발급 요청하기

빌링키 발급 요청 시에는 requestIssueBillingKey 함수를 호출해야 합니다. channelKey 파라미터에 결제 채널 연동 후 생성된 채널 키를 지정하여 한국결제네트웍스(KPN) 채널 사용을 명시해주세요.

한국결제네트웍스(KPN) 기준으로 작성한 예시 코드는 아래와 같습니다.

SDK 빌링키 발급 요청
import * as PortOne from "@portone/browser-sdk/v2"; function requestIssueBillingKey() { PortOne.requestIssueBillingKey({ storeId: "store-4ff4af41-85e3-4559-8eb8-0d08a2c6ceec", // 고객사 storeId로 변경해주세요. channelKey: "channel-key-3b37819a-1c72-4deb-a245-8c810af5403d", // 콘솔 결제 연동 화면에서 채널 연동 시 생성된 채널 키를 입력해주세요. billingKeyMethod: "CARD", issueId: "test-issueId", issueName: "test-issueName", customer: { customerId: "uniqueCustomerId", fullName: "포트원", }, }); }

주요 파라미터

storeId: string

스토어 아이디

포트원 계정에 생성된 상점을 식별하는 고유한 값으로 관리자 콘솔에서 확인할 수 있습니다.

channelKey: string

채널 키

포트원 콘솔 내 [결제연동] > [채널관리] 화면에서 채널 추가 시 생성되는 값입니다. 결제 호출 시 채널을 지정할 때 사용됩니다.

billingKeyMethod: string

빌링키 발급수단

한국결제네트웍스(KPN)는 빌링키 발급 수단으로 카드만을 지원하므로 해당 파라미터는 CARD로 고정해야 합니다.

customer?: object

고객 정보

customerId?: string

구매자 고유 ID

  • 한국결제네트웍스(KPN)의 경우 구매자 ID를 필수로 입력해야 합니다.
fullName?: string

구매자 전체 이름

  • 한국결제네트웍스(KPN)의 경우 fullName 혹은 (firstName + lastName)을 필수로 입력해야 합니다.
firstName?: string

구매자 이름

  • 한국결제네트웍스(KPN)의 경우 fullName 혹은 (firstName + lastName)을 필수로 입력해야 합니다.
lastName?: string

구매자 성

  • 한국결제네트웍스(KPN)의 경우 fullName 혹은 (firstName + lastName)을 필수로 입력해야 합니다.

유의사항

API 수기(키인) 결제 요청하기

수기(키인)로 결제하기 위해서는 POST /payments/${PAYMENT_ID_HERE}/instant API를 통해 결제를 요청해야 합니다.

API 수기(키인) 결제 요청
// ... 수기(키인) 결제 const issueResponse = await axios({ url: `https://api.portone.io/payments/${PAYMENT_ID_HERE}/instant`, method: "post", headers: { Authorization: `PortOne ${PORTONE_API_SECRET}` }, data: { paymentId: `payment${Math.random().toString(36).slice(2)}`, channelKey: "channel-key-9987cb87-****-****-****-********896d", // 콘솔 결제 연동 화면에서 채널 연동 시 생성된 채널 키를 입력해주세요. orderName: "나이키 와플 트레이너 2 SD", amount: { total: 10000, taxFree: 3000, }, currency: "KRW", customer: { name: { full: "홍길동", }, phoneNumber: "010-1234-0000", }, method: { virtualAccount: { bank: `SHINHAN`, expiry: { dueDate: `2024-11-12T00:00:00+09+00`, // 입금기한은 미래시간만 가능합니다. }, cashReceipt: { type: `PERSONAL`, customerIdentityNumber: `010-1234-0000`, }, }, }, }, });

주요 파라미터

paymentId: string

고객사 주문 고유 번호

고객사에서 채번하는 주문 고유 번호로 매번 고유하게 채번되어야 합니다. 이미 승인 완료된 paymentId로 결제를 시도하는 경우 에러가 발생합니다.

orderName: string

주문명

주문명으로 고객사에서 자유롭게 입력합니다.

channelKey: string

채널 키

포트원 콘솔 내 [결제연동] > [채널관리] 화면에서 채널 추가 시 생성되는 값입니다. 결제 호출 시 채널을 지정할 때 사용됩니다.

amount: object

결제 금액

total: number

총 결제 금액

결제 금액으로 결제를 원하는 통화(currency)별 scale factor(소수점 몇번째 자리까지 유효한지)를 고려한 number 형식만 허용됩니다.

taxFree?: number

면세액

결제 금액으로 결제를 원하는 통화(currency)별 scale factor(소수점 몇번째 자리까지 유효한지)를 고려한 number 형식만 허용됩니다.

currency: string

결제 통화

결제통화로 원화 결제 시 KRW로 입력해야 합니다.

method: object

결제수단 정보

virtualAccount?: object

가상계좌 결제 시 파라미터

bank: string

발급 은행

expiry: object

입금 만료 기한

validHours?: integer

유효 시간

dueDate?: string

만료 시점

시간은 ISO8601 형식으로 입력해야 합니다.

option: object

가상계좌 발급 방식

type: string

가상계좌 발급 유형

발급 유형은 ENUM으로 정의되어 있습니다.

  • 회전식 가상계좌 : NORMAL

한국결제네트웍스(KPN)의 경우 회전식 가상계좌(NORMAL)만 지원합니다.

회전식 가상계좌는 일반적으로 사용되는 방식이며 PG사에서 직접 채번한 가상계좌번호를 사용합니다.

cashReceipt: object

현금영수증 정보

type: string

발급 유형

발급 유형은 ENUM으로 정의되어 있습니다.

  • 소득공제용 : PERSONAL
  • 지출증빙용 : CORPORATE
  • 미발행 : NO_RECEIPT
customerIdentityNumber: string

현금영수증 식별 번호

  • 소득공제인 경우 주민등록번호 혹은 휴대폰 번호를 입력해야 합니다.
  • 지출증빙인 경우 사업자등록번호를 입력해야 합니다.
card?: object

카드 결제 시 파라미터

credential: object

인증 관련 정보

number: string

카드 번호

expiryYear: string

유효 기간 만료 연도 (YY 형식 ex. 24)

expiryMonth: string

유효기간 만료 월 (MM 형식 ex. 05)

birthOrBusinessRegistrationNumber?: string

생년월일 6자리 또는 사업자 등록 번호

passwordTwoDigits?: string

비밀번호 앞 두자리

customer?: object

고객 정보

name?: object

고객 이름

full?: string

한 줄 이름 형식 (ex. 김포트)

separated?: object

분리된 이름

first: string

이름

last: string

phoneNumber?: string

구매자 연락처

유의사항

API 빌링키 발급 요청하기

빌링키를 발급하기 위해서는 POST /billing-keys API를 이용하여 빌링키 발급을 요청해야 합니다.

한국결제네트웍스(KPN) 기준으로 작성한 예시 코드는 아래와 같습니다.

API 빌링키 발급 요청
const issueResponse = await axios({ url: "https://api.portone.io/billing-keys", method: "post", headers: { Authorization: `PortOne ${PORTONE_API_SECRET}` }, data: { channelKey: "channel-key-9987cb87-****-****-****-********896d", // 콘솔 결제 연동 화면에서 채널 연동 시 생성된 채널 키를 입력해주세요. customer: { id: "customer-1234", // 고객사에서 관리하는 고객 고유번호 name: { full: "홍길동", }, phoneNumber: "010-1234-0000", }, method: { card: { credential: { number: "1111111111111111", expiryMonth: "01", expiryYear: "20", birthOrBusinessRegistrationNumber: "900101", passwordTwoDigits: "00", }, }, }, }, });

주요 파라미터

channelKey: string

채널 키

포트원 콘솔 내 [결제연동] > [채널관리] 화면에서 채널 추가 시 생성되는 값입니다. 결제 호출 시 채널을 지정할 때 사용됩니다.

method: object

결제수단 정보

card?: object

카드 빌링키 발급 시 파라미터

credential: object

인증 관련 정보

number: string

카드 번호

expiryYear: string

유효 기간 만료 연도 (YY 형식 ex. 24)

expiryMonth: string

유효기간 만료 월 (MM 형식 ex. 05)

birthOrBusinessRegistrationNumber: string

생년월일 또는 사업자 등록 번호

passwordTwoDigits: string

비밀번호 앞 두자리

customer: object

고객 정보

name: object

고객 이름

  • 한국결제네트웍스(KPN)의 경우 full 혹은 separated를 필수로 입력해야 합니다.
full?: string

한 줄 이름 형식 (ex. 김포트)

separated?: object

분리된 이름

first?: string

이름

last?: string

phoneNumber?: string

구매자 연락처

유의사항

API 빌링키 단건 결제 요청하기

발급된 빌링키로 단건 결제를 진행하려면 POST /payments/${PAYMENT_ID_HERE}/billing-key API를 이용하여 결제를 요청하실 수 있습니다.

한국결제네트웍스(KPN) 기준으로 작성한 예시 코드는 아래와 같습니다.

API 빌링키 단건 결제
const response = await axios({ url: `https://api.portone.io/payments/${PAYMENT_ID_HERE}/billing-key`, method: "post", headers: { Authorization: `PortOne ${PORTONE_API_SECRET}` }, data: { billingKey: "billing-key-1", // 빌링키 발급 API를 통해 발급받은 빌링키 orderName: "월간 이용권 정기결제", customer: { id: "customer-1234", // 고객사에서 관리하는 고객 고유번호 phoneNumber: `010-1234-5678`, email: `test@test.com`, }, amount: { total: 10000, }, currency: "KRW", productCount: 1, }, });

주요 파라미터

paymentId: string

결제 주문 번호

  • 고객사에서 채번하여 사용하는 주문번호로 고유한 값이여야 합니다.
  • URL path에 포함하여 요청해야 합니다.
billingKey: string

빌링키 결제에 사용할 빌링키

orderName: string

주문명

amount: object

결제 금액

total: number

총 결제 금액

결제 금액으로 결제를 원하는 통화(currency)별 scale factor(소수점 몇번째 자리까지 유효한지)를 고려한 number 형식만 허용됩니다.

taxFree?: number

면세액

결제 금액으로 결제를 원하는 통화(currency)별 scale factor(소수점 몇번째 자리까지 유효한지)를 고려한 number 형식만 허용됩니다.

currency: string

결제 통화

결제통화로 원화 결제 시 KRW로 입력해야 합니다.

customer?: object

고객 정보

name?: object

고객 이름

full?: string

한 줄 이름 형식 (ex. 김포트)

separated?: object

분리된 이름

first?: string

이름

last?: string

phoneNumber?: string

구매자 연락처

email?: string

구매자 이메일

API 빌링키 예약/반복 결제 요청하기

예약 결제를 진행하려면 POST /payments/${PAYMENT_ID_HERE}/schedule API를 이용하여 결제를 예약하실 수 있습니다.

한국결제네트웍스(KPN) 기준으로 작성한 예시 코드는 아래와 같습니다.

API 예약/반복 결제
const response = await axios({ url: `https://api.portone.io/payments/${PAYMENT_ID_HERE}/schedule`, method: "post", headers: { Authorization: `PortOne ${PORTONE_API_SECRET}` }, data: { payment: { billingKey: "billing-key-1", // 빌링키 발급 API를 통해 발급받은 빌링키 orderName: "월간 이용권 정기결제", customer: { id: "customer-1234", // 고객사에서 관리하는 고객 고유번호 }, amount: { total: 10000, taxFree: 3000, }, currency: "KRW", }, timeToPay: "2023-01-01 00:00:00", // 결제를 시도할 시각이며 미래 시각만 가능합니다. }, });

주요 파라미터

paymentId: string

결제 주문 번호

  • 고객사에서 채번하여 사용하는 주문번호로 고유한 값이여야 합니다.
  • URL path에 포함하여 요청해야 합니다.
payment: object

빌링키 결제 요청 입력정보

billingKey: string

빌링키 결제에 사용할 빌링키

orderName: string

주문명

amount: object

결제 금액

total: number

총 결제 금액

결제 금액으로 결제를 원하는 통화(currency)별 scale factor(소수점 몇번째 자리까지 유효한지)를 고려한 number 형식만 허용됩니다.

taxFree?: number

면세액

결제 금액으로 결제를 원하는 통화(currency)별 scale factor(소수점 몇번째 자리까지 유효한지)를 고려한 number 형식만 허용됩니다.

currency: string

결제 통화

결제통화로 원화 결제 시 KRW로 입력해야 합니다.

timeToPay: string

결제 예정 시점

customer: object

고객 정보

name: object

고객 이름

  • 한국결제네트웍스(KPN)의 경우 full 혹은 separated를 필수로 입력해야 합니다.
full?: string

한 줄 이름 형식 (ex. 김포트)

separated?: object

분리된 이름

first?: string

이름

last?: string

phoneNumber?: string

구매자 연락처

email?: string

구매자 이메일

공통 유의사항