한국결제네트웍스(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 *string

        인증 관련 정보

        • number *object

          카드 번호

        • expiryYear *object

          유효 기간 만료 연도 (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 *string

        인증 관련 정보

        • number *object

          카드 번호

        • expiryYear *object

          유효 기간 만료 연도 (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

      구매자 이메일

공통 유의사항