diff --git a/src/content/docs/ko/_nav.yaml b/src/content/docs/ko/_nav.yaml index 84f2e8904..92fd37066 100644 --- a/src/content/docs/ko/_nav.yaml +++ b/src/content/docs/ko/_nav.yaml @@ -329,6 +329,7 @@ - /ko/v2-payment/pg/tosspayments - /ko/v2-payment/pg/ksnet - /ko/v2-payment/pg/smartro-v2 + - /ko/v2-payment/pg/kpn - /ko/v2-payment/pg/kakaopay - /ko/v2-payment/pg/naverpay - /ko/v2-payment/pg/paypal-v2 diff --git a/src/content/docs/ko/ready/readme.mdx b/src/content/docs/ko/ready/readme.mdx index aae11b560..9ea9fa570 100644 --- a/src/content/docs/ko/ready/readme.mdx +++ b/src/content/docs/ko/ready/readme.mdx @@ -384,6 +384,12 @@ import IntegrationTosspayments from './_components/integration-guide/tosspayment 포트원 콘솔에서 채널 추가 시 계약 완료 후 KSNET으로부터 전달받은 \[상점아이디(MID)] 및 \[API Key]를 입력한 후 `저장`을 클릭합니다. +
+

한국결제네트웍스(KPN)

+ + 포트원 콘솔에서 채널 추가 시 계약 완료 후 한국결제네트웍스(KPN)로부터 전달받은 \[상점아이디(MID)] 및 \[Secret OTP]를 입력한 후 `저장`을 클릭합니다. +
+

NHN KCP

diff --git a/src/content/docs/ko/result/notice.mdx b/src/content/docs/ko/result/notice.mdx index fab21349d..a356b34f6 100644 --- a/src/content/docs/ko/result/notice.mdx +++ b/src/content/docs/ko/result/notice.mdx @@ -41,12 +41,13 @@ import welcome_image2 from "./_assets/welcome/welcome-webhook-guide-2.png"; - |PG |코드값 (pg provider)|입금통보 주소 | - |--------------|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| - |토스페이먼츠 |tosspaysments |[https://tx-gateway-service.prod.iamport.co/virtual-account/webhook-event/tosspayments](https://tx-gateway-service.prod.iamport.co/virtual-account/webhook-event/tosspayments)| - |스마트로 |smartro\_v2 |입금 통보, 환불이체 URL 동일: [https://tx-gateway-service.prod.iamport.co/smartro-v2](https://tx-gateway-service.prod.iamport.co/smartro-v2) | - |나이스페이먼츠|nice\_v2 |[https://tx-gateway-service.prod.iamport.co/nicepay-v2](https://tx-gateway-service.prod.iamport.co/nicepay-v2) | - |KG이니시스 |inicis\_v2 |[https://tx-gateway-service.prod.iamport.co/inicis-v2](https://tx-gateway-service.prod.iamport.co/inicis-v2) | + |PG |코드값 (pg provider)|입금통보 주소 | + |----------------|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| + |토스페이먼츠 |tosspaysments |[https://tx-gateway-service.prod.iamport.co/virtual-account/webhook-event/tosspayments](https://tx-gateway-service.prod.iamport.co/virtual-account/webhook-event/tosspayments)| + |스마트로 |smartro\_v2 |입금 통보, 환불이체 URL 동일: [https://tx-gateway-service.prod.iamport.co/smartro-v2](https://tx-gateway-service.prod.iamport.co/smartro-v2) | + |나이스페이먼츠 |nice\_v2 |[https://tx-gateway-service.prod.iamport.co/nicepay-v2](https://tx-gateway-service.prod.iamport.co/nicepay-v2) | + |KG이니시스 |inicis\_v2 |[https://tx-gateway-service.prod.iamport.co/inicis-v2](https://tx-gateway-service.prod.iamport.co/inicis-v2) | + |한국결제네트웍스|kpn |[https://tx-gateway-service.prod.iamport.co/kpn/virtual-account](https://tx-gateway-service.prod.iamport.co/kpn/virtual-account) | @@ -214,3 +215,15 @@ import welcome_image2 from "./_assets/welcome/welcome-webhook-guide-2.png";
+ + +
+

한국결제네트웍스(KPN) 설정 방법

+ + 한국결제네트웍스(KPN)는 계약 이후, 발급된 MID에 대해 **가상계좌 백노티 기능**을 별도로 요청해야 합니다. + + 한국결제네트웍스(KPN) 담당자에게 MID 정보와 함께 입금 통보 URL을 전달하여 가상계좌 백노티 기능 요청을 진행해주세요. + + 만약 입금통보를 받지 못하는 경우 한국결제네트웍스(KPN) 담당자에게 메일을 통해 확인 요청 후 변경이 필요합니다. +
+
diff --git a/src/content/docs/ko/v2-payment/pg/inicis-v2.mdx b/src/content/docs/ko/v2-payment/pg/inicis-v2.mdx index 6b657c7ae..055bf5495 100644 --- a/src/content/docs/ko/v2-payment/pg/inicis-v2.mdx +++ b/src/content/docs/ko/v2-payment/pg/inicis-v2.mdx @@ -715,7 +715,6 @@ import Tabs from "~/components/gitbook/tabs/Tabs.astro"; method: "post", headers: { Authorization: `PortOne ${PORTONE_API_SECRET}` }, data: { - paymentId: `payment${crypto.randomUUID()}`, channelKey: "channel-key-9987cb87-****-****-****-********896d", // 콘솔 결제 연동 화면에서 채널 연동 시 생성된 채널 키를 입력해주세요. orderName: "나이키 와플 트레이너 2 SD", amount: { diff --git a/src/content/docs/ko/v2-payment/pg/kpn.mdx b/src/content/docs/ko/v2-payment/pg/kpn.mdx new file mode 100644 index 000000000..1243ec574 --- /dev/null +++ b/src/content/docs/ko/v2-payment/pg/kpn.mdx @@ -0,0 +1,1079 @@ +--- +title: 한국결제네트웍스(KPN) +description: 한국결제네트웍스(KPN) 연동 가이드를 확인합니다. +--- + +import Details from "~/components/gitbook/Details.astro"; +import ParamTree from "~/components/gitbook/ParamTree.astro"; + +## KPN PG 설정하기 + +### 채널 설정하기 + +- [결제대행사 채널 설정하기](../../ready/readme#3-결제대행사-채널-설정하기)의 내용을 참고하여 PG 설정을 진행합니다. + +#### 사전 계약 안내 + +아래 기능을 사용하시려면 한국결제네트웍스(KPN)에 사전 신청 후 계약이 완료되어야 합니다. +그렇지 않은 상태에서 해당 기능 이용시 결제 승인에 실패하거나, +승인에 성공하더라도 의도한 바와는 다른 응답(ex. 결제창에서 에스크로 결제를 했으나 비-에스크로 결제 응답을 받음)을 얻게 될 수 있으니 주의해주시기 바랍니다. + +- API를 통한 수기 결제 (가상계좌, 카드) +- API를 통한 빌링키 발급 +- 에스크로 결제 (결제창) +- 가상계좌 입금통보 백노티 설정 +- 상점분담무이자 설정 +- 비과세 금액 직접 설정 +- 부분무이자 설정 +- 간편결제 다이렉트 호출 +- 결제 취소 시 계좌 환불 서비스 설정 + +### 가능한 결제 수단 + +- **결제창 일반 결제** + + `payMethod` 파라미터를 결제 수단에 따라 아래와 같이 설정해야 합니다. + + - 카드 : `CARD` + - 계좌이체 : `TRANSFER` + - 가상계좌 : `VIRTUAL_ACCOUNT` + - 휴대폰 소액 결제 : `MOBILE` + - 간편결제 : `EASY_PAY` + +- **결제창 빌링키 발급** + + `billingKeyMethod` 파라미터를 결제 수단에 따라 아래와 같이 설정해야 합니다. + + - 카드: `CARD` + +- **API 수기(키인) 결제** + + `method` 파라미터를 결제 수단에 따라 아래와 같이 설정해야 합니다. + + - 카드: `card` 로 설졍하여 카드 관련 파라미터 입력 + - 가상계좌: `virtualAccount` 로 설정하여 가상계좌 관련 파라미터 입력 + + 자세한 파라미터 구성은 [REST API Docs](/api/rest-v2/payment#post%20%2Fpayments%2F%7BpaymentId%7D%2Finstant) + 를 참고해주시기 바랍니다. + +- **API 빌링키 발급** + + `method` 파라미터를 결제 수단에 따라 아래와 같이 설정해야 합니다. + + - 카드: `card` 로 설졍하여 카드 관련 파라미터 입력 + + 자세한 파라미터 구성은 [REST API Docs](/api/rest-v2/billingKey#post%20%2Fbilling-keys)를 참고해주시기 바랍니다. + +### SDK 결제 요청하기 + +결제 요청 시에는 `requestPayment` 함수를 호출해야 합니다. +`channelKey` 파라미터에 결제 채널 연동 후 생성된 채널 키를 지정하여 한국결제네트웍스(KPN) 채널 사용을 명시해주세요. + +한국결제네트웍스(KPN) 기준으로 작성한 예시 코드는 아래와 같습니다. + +```typescript title="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 결제 - 유의사항 + +#### 공통 + +
+

`paymentId` 에는 영문 대소문자 및 숫자만 허용됩니다.

+ + `paymentId` 에는 0-9,a-z,A-Z 의 문자만으로 이루어진 문자열만 입력할 수 있습니다. + + 한글이나 `♤`, `♡`, `♧` 등의 특수 문자는 허용되지 않습니다. +
+ +
+

결제창 표시 언어는 한국어 및 영어만 지원합니다.

+ + SDK를 통한 빌링키 발급 요청 시 locale 파라미터를 사용하여 결제창 내에 언어를 제어할 수 있습니다. + 한국결제네트웍스의 경우 한국어 및 영어만 지원합니다. + + 한국어 : `KO_KR` + 영어 : `EN_US` +
+ +
+

지원되는 결제 통화

+ + SDK를 통한 결제 요청 파라미터에는 결제 통화를 지정할 수 있는 `currency` 파라미터가 존재합니다. + 한국결제네트웍스(KPN)의 경우 SDK를 통한 결제 요청시, `KRW` 만을 지원합니다. +
+ +
+

한국결제네트웍스(KPN)에서 지원하는 현금영수증 발급 유형

+ + 현금영수증은 현금성 거래인 실시간 계좌이체 및 가상계좌 발급 시 사용이 가능합니다. + 한국결제네트웍스(KPN)의 경우 현금영수증 발급 유형을 `CORPORATE` 혹은 `PERSONAL` 등 파라미터로 제어할 수 없습니다. + 어떤 유형의 현금영수증을 발행할지는 항상 결제창 내에서 선택 가능하며, 결제창 호출 파라미터로는 현금영수증을 발행 여부만을 제어할 수 있습니다. + `cashReceiptType` 파라미터를 `ANONYMOUS`로 설정 시 결제창에서 현금영수증 발급 UI가 미노출됩니다. +
+ +
+

면세금액 설정이 MID 설정보다 우선함

+ + 계약 당시 MID를 면세, 과세 용도로 나누어서 발급받았더라도, 파라미터로 전달하는 금액 정보가 우선 사용됩니다. + 정확한 면세, 과세금액 처리를 원하는경우, `totalAmount`와 `taxFreeAmount`를 올바르게 전달하여야 합니다. +
+ +
+

가상계좌 사용 시 입금통보 URL 별도 설정 필요

+ + 한국결제네트웍스(KPN)의 경우, 가상계좌를 사용하는 경우 입금통보 URL을 별도로 설정해야 합니다. + + 자세한 내용은 [가상계좌 입금통보 URL 설정 가이드](/docs/ko/result/notice?v=v2#notice-config-kpn)를 + 참조해 주세요. +
+ +
+

가상계좌 지원 은행 리스트

+ + 한국결제네트웍스(KPN)에서 가상계좌 발급이 가능한 은행 리스트는 아래와 같습니다. + + 은행코드는 [BANK ENUM](https://developers.portone.io/api/rest-v2/type-def#Bank)으로 정의되어 있으며 + 아래 목록에 대한 ENUM 코드를 매핑하여 API에 사용하실 수 있습니다. + + - 기업은행 + - 국민은행 + - 외환은행 + - 농협은행 + - 우리은행 + - SC은행 + - 한국씨티은행 + - 대구은행 + - 부산은행 + - 광주은행 + - 경남은행 + - 우체국 + - KEB하나은행 + - 신한은행 +
+ +#### 카드 결제 + +
+

한국결제네트웍스(KPN)에서 지원하지 않는 카드 관련 파라미터

+ + 한국결제네트웍스(KPN)의 경우 아래 파라미터들을 지원하지 않으며, 해당 파라미터들을 설정하더라도 결제 동작에 아무런 영향을 주지 않습니다. + + - `useAppCardOnly`: 앱카드만 허용할지 여부 + - `useFreeInterestFromMall`: 상점부담무이자 사용 여부 + - `cardCompany`: 카드 다이렉트 호출 시 카드사 코드 +
+ +#### 간편 결제 + +
+

한국결제네트웍스(KPN)에서 지원하는 간편결제사 종류

+ + 한국결제네트웍스(KPN)의 경우 아래 간편결제사를 지원합니다. `easyPay.easyPayProvider` 파라미터에 아래 리스트 중 원하는 값을 입력하세요. + + - 카카오페이: `KAKAOPAY` + - 네이버페이: `NAVERPAY` + - 삼성페이: `SAUMSUNGPAY` + - 토스페이: `TOSSPAY` + - 페이코: `PAYCO` +
+ +
+

네이버페이 다이렉트 호출 미지원

+ + 한국결제네트웍스(KPN)의 경우, 현재 네이버페이 다이렉트 호출은 지원하지 않습니다. +
+ +
+

한국결제네트웍스(KPN)에서 지원하지 않는 간편결제 관련 파라미터

+ + 한국결제네트웍스(KPN)의 경우 아래 파라미터들을 지원하지 않으며, 해당 파라미터들을 설정하더라도 결제 동작에 아무런 영향을 주지 않습니다. + + - `customerIdentifier`: 현금영수증 발행 대상 식별 정보 + - `useCardPoint`: 카드사 포인트 사용 여부 + - `useFreeInterestFromMall`: 상점부담무이자 사용 여부 + - `useInstallment`: 할부 사용 여부 + - `cashReceiptType`: 현금영수증 타입 + - `installment`: 할부 설정 + - `availableCards`: 결제 수단으로써 사용 허가할 카드사 리스트 + - `availablePayMethod`: 간편결제 세부 결제수단 지정 렌더링 옵션 +
+ +#### 계좌이체 + +
+

한국결제네트웍스(KPN)에서 지원하지 않는 계좌이체 관련 파라미터

+ + 한국결제네트웍스(KPN)의 경우 아래 파라미터들을 지원하지 않으며, 해당 파라미터들을 설정하더라도 결제 동작에 아무런 영향을 주지 않습니다. + + - `bankCode`: 계좌이체 은행 다이렉트 호출 시 은행 코드 + - `customerIdentifier`: 현금영수증 발행 대상 식별 정보 +
+ +#### 가상계좌 결제 + +
+

한국결제네트웍스(KPN)에서 지원하지 않는 가상계좌 관련 파라미터

+ + 한국결제네트웍스(KPN)의 경우 아래 파라미터들을 지원하지 않으며, 해당 파라미터들을 설정하더라도 결제 동작에 아무런 영향을 주지 않습니다. + + - `bankCode`: 가상계좌 은행 다이렉트 호출 시 은행 코드 + - `customerIdentifier`: 현금영수증 발행 대상 식별 정보 + - `fixedOption`: 고정식 가상계좌 옵션 +
+ +#### 휴대폰 소액 결제 + +
+

`productType` 파라미터는 필수 입력해야 합니다.

+ + - 한국결제네트웍스(KPN)의 경우 **휴대폰 소액결제 시 상품 유형을 구분짓는 `productType` 파라미터를 필수**로 입력해야 합니다. + - `productType`의 값은 `PRODUCT_TYPE_REAL` 또는 `PRODUCT_TYPE_DIGITAL`를 입력해야 합니다. +
+ +
+

한국결제네트웍스(KPN)에서 지원하지 않는 휴대폰 소액결제 관련 파라미터

+ + 한국결제네트웍스(KPN)의 경우 아래 파라미터들을 지원하지 않으며, 해당 파라미터들을 설정하더라도 결제 동작에 아무런 영향을 주지 않습니다. + + - `carrier`: 휴대폰 소액결제 통신사 바로 호출을 위한 통신사 구분 값 + - `availableCarriers`: 결제창에 노출될 통신사 리스트 지정 옵션 +
+ +### SDK 빌링키 발급 요청하기 + +빌링키 발급 요청 시에는 `requestIssueBillingKey` 함수를 호출해야 합니다. +`channelKey` 파라미터에 결제 채널 연동 후 생성된 채널 키를 지정하여 한국결제네트웍스(KPN) 채널 사용을 명시해주세요. + +한국결제네트웍스(KPN) 기준으로 작성한 예시 코드는 아래와 같습니다. + +```typescript title="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`)을 필수로 입력해야 합니다. + + + +### SDK 빌링키 발급 - 유의사항 + +
+

offerPeriod 파라미터는 range형식만 가능합니다.

+ + SDK를 통한 빌링키 발급 요청 시 offerPeriod 파라미터를 사용하여 결제창 내에 제공 기간을 표시할 수 있습니다. + 해당 파라미터는 range형태로만 입력 가능합니다. + + 구체적인 형식은 SDK 가이드를 참고해주세요. +
+ +
+

결제창 표시 언어는 한국어 및 영어만 지원합니다.

+ + SDK를 통한 빌링키 발급 요청 시 locale 파라미터를 사용하여 결제창 내에 언어를 제어할 수 있습니다. + 한국결제네트웍스의 경우 한국어 및 영어만 지원합니다. + + 한국어 : `KO_KR` + 영어 : `EN_US` +
+ +
+

카드사 다이렉트 호출을 지원하지 않습니다.

+ + 한국결제네트웍스(KPN) 경우 빌링키 발급 시 카드사 다이렉트 호출 기능을 지원하지 않습니다. + `card.cardCompany` 필드에 값을 입력한 후 빌링키 발급을 요청한 경우에도 빌링키 발급 동작에 아무런 영향을 미치지 않습니다. +
+ +### API 수기(키인) 결제 요청하기 + +수기(키인)로 결제하기 위해서는 `POST /payments/${PAYMENT_ID_HERE}/instant` API를 통해 결제를 요청해야 합니다. + +```typescript title="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** + + **발급 은행** + + - 은행코드는 ENUM으로 정의되어 있습니다. + - [BANK ENUM 바로가기](https://developers.portone.io/api/rest-v2/type-def#Bank) + + - `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) 기준으로 작성한 예시 코드는 아래와 같습니다. + +```typescript title="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) 기준으로 작성한 예시 코드는 아래와 같습니다. + +```typescript title="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", // 고객사에서 관리하는 고객 고유번호 + phoneNumber: `010-1234-5678`, + email: `test@test.com`, + }, + amount: { + total: 10000, + taxFree: 3000, + }, + currency: "KRW", + }, + }, +}); +``` + +#### **주요 파라미터** + + + - `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) 기준으로 작성한 예시 코드는 아래와 같습니다. + +```typescript title="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** + + **구매자 이메일** + + + +### API 유의사항 + +#### 공통 + +
+

한국결제네트웍스(KPN) 필수 파라미터

+ + 한국결제네트웍스(KPN)의 경우에는 빌링키 발급 시 아래의 파라미터를 필수로 입력해야 합니다. + + - `customer.name.full` 혹은 `customer.name.separated` + + 그 외에는 위에서 설명한 주요 파라미터들을 참고하여 입력해주시기 바랍니다. +
+ +
+

수기(키인) 결제 시 카드 정보 입력 파라미터

+ + API를 통한 수기(키인) 결제 요청 파라미터에는 카드의 상세 정보를 입력하는 필드가 존재합니다. + + 한국결제네트웍스(KPN)의 경우 카드 번호 + 유효기간 만으로 결제가 가능하나, 일부 고객사의 경우 생년월일 + 비밀번호 앞 두 자리를 추가적으로 입력해야 하는 경우도 있습니다. + + 자세한 내용은 한국결제네트웍스(KPN) 담당자에게 문의해주시기 바랍니다. +
+ +
+

부가세 금액을 지정할 수 없습니다.

+ + 한국결제네트웍스(KPN)의 경우 결제 시 부가세액을 직접 지정할 수 없습니다. + + 따라서, 결제 요청 파라미터에 VAT(부가세)를 지정하시더라도 해당 값은 무시되며, 결제 금액에 대한 부가세는 한국결제네트웍스(KPN)에서 자동으로 계산됩니다. + + 그러나 결제 요청 파라미터에 부가세를 지정하시게 되면 결제 조회 시 요청 파라미터에 입력한 값이 응답으로 내려가므로, 부가세를 지정하지 않는 것을 권장합니다. +
+ +
+

결제 통화는 KRW, USD만 지원됩니다.

+ + API를 통한 수기(키인) 결제 요청 파라미터에는 결제 통화를 지정할 수 있는 `currency` 파라미터가 존재합니다. + + 한국결제네트웍스(KPN)의 경우 `KRW`와 `USD`를 지원하며, 이 중 `USD`는 해외 카드일 때 지정 가능합니다. + + 결제는 1센트 단위로 가능하지만, 매입사에 따라 결제 취소는 1달러 이상부터 가능할 수 있습니다. + + 자세한 내용은 한국결제네트웍스(KPN) 담당자에게 문의해주시기 바랍니다. +
+ +
+

API 가상계좌 발급 시 에스크로 결제가 불가능합니다.

+ + 한국결제네트웍스(KPN)의 경우, API 수기(키인) 결제를 통한 가상계좌 발급 시 에스크로 결제를 진행할 수 없습니다. + + 결제창 방식에서는 가상계좌 에스크로 결제가 가능합니다. +
+ +
+

결제 취소 시 MID에 환불서비스 설정을 해야합니다.

+ + 한국결제네트웍스(KPN)의 경우, 계좌 환불의 형태로 결제를 취소하려면 별도 설정을 진행해야 합니다. + + 일반적으로 아래와 같은 경우에 대해 계좌 환불 서비스 신청이 필요합니다. + + - 가상계좌 입금 후 환불 + - 휴대폰 결제 후 익월 환불 + - 계좌이체 취소가 불가능한 경우(환불 기한 초과, 계좌 제한 등) + + 또한, 위 환불 서비스를 이용할 경우에는 결제 취소 시 환불 계좌 정보를 필수적으로 입력해야 합니다. + + 자세한 내용은 한국결제네트웍스(KPN) 담당자에게 문의해주시기 바랍니다. +
diff --git a/src/content/docs/ko/v2-payment/pg/readme.mdx b/src/content/docs/ko/v2-payment/pg/readme.mdx index 3a5ab0555..e7f0164b6 100644 --- a/src/content/docs/ko/v2-payment/pg/readme.mdx +++ b/src/content/docs/ko/v2-payment/pg/readme.mdx @@ -89,6 +89,17 @@ description: 각 PG사별 결제 연동 방법을 확인할 수 있습니다. - 결제창/API 정기결제: 카드 / 휴대폰 - 간편결제 허브형: 카카오페이 / 네이버페이 / 토스페이 / 삼성페이 / SSGpay / L.Pay / 애플페이 / 페이코 +- **한국결제네트웍스(KPN)** + + - 연동 기능 : 인증결제(결제창) / 비인증결제(API) / 정기결제(결제창/API) / 간편결제(결제창/다이렉트 호출) + + - 결제 수단 + + - 결제창 일반결제: 카드 / 실시간 계좌이체 / 가상계좌 / 휴대폰 결제 + - API 수기(키인)결제: 카드 / 가상계좌 + - 결제창/API 정기결제: 카드 + - 간편결제 허브형: 카카오페이 / 네이버페이 / 토스페이 / 삼성페이 / 페이코 + ### 본인인증 - **다날 본인인증** diff --git a/src/content/docs/ko/v2-payment/pg/smartro-v2.mdx b/src/content/docs/ko/v2-payment/pg/smartro-v2.mdx index 8d8437150..ea65ecfbf 100644 --- a/src/content/docs/ko/v2-payment/pg/smartro-v2.mdx +++ b/src/content/docs/ko/v2-payment/pg/smartro-v2.mdx @@ -558,7 +558,6 @@ import Tabs from "~/components/gitbook/tabs/Tabs.astro"; method: "post", headers: { Authorization: `PortOne ${PORTONE_API_SECRET}` }, data: { - paymentId: `payment${crypto.randomUUID()}`, channelKey: "channel-key-9987cb87-****-****-****-********896d", // 콘솔 결제 연동 화면에서 채널 연동 시 생성된 채널 키를 입력해주세요. orderName: "나이키 와플 트레이너 2 SD", amount: { diff --git a/src/content/docs/ko/v2-payment/v2-sdk/billing-key-request.mdx b/src/content/docs/ko/v2-payment/v2-sdk/billing-key-request.mdx index b4fbed026..29029773c 100644 --- a/src/content/docs/ko/v2-payment/v2-sdk/billing-key-request.mdx +++ b/src/content/docs/ko/v2-payment/v2-sdk/billing-key-request.mdx @@ -37,6 +37,7 @@ description: 빌링키 발급 요청 파라미터를 확인할 수 있습니다. > - `NAVERPAY` > - `KAKAOPAY` > - `KSNET` +> - `KPN` > - `PAYPAL_V2` > @@ -236,6 +237,7 @@ description: 빌링키 발급 요청 파라미터를 확인할 수 있습니다. > > > - 모바일에서만 동작하는 파라미터입니다. > > > - `percard` 혹은 `cocard`를 입력할 수 있습니다. > > > - `percard` 입력 시 개인 카드로만 결제를 진행할 수 있으며, `cocard` 입력 시 법인 카드로만 결제를 진행 할 수 있습니다. +> > ### **`card`** **object** diff --git a/src/content/docs/ko/v2-payment/v2-sdk/payment-request.mdx b/src/content/docs/ko/v2-payment/v2-sdk/payment-request.mdx index ce2e6006d..ae22b421b 100644 --- a/src/content/docs/ko/v2-payment/v2-sdk/payment-request.mdx +++ b/src/content/docs/ko/v2-payment/v2-sdk/payment-request.mdx @@ -270,6 +270,7 @@ description: 결제요청 파라미터를 확인할 수 있습니다. > - `KSNET` > - `PAYPAL_V2` > - `INICIS_V2` +> - `KPN` > ### **`isTestChannel`** **boolean** @@ -1033,6 +1034,19 @@ description: 결제요청 파라미터를 확인할 수 있습니다. > > > > **`apprun_check=Y`** **string** > > > > > > > > (android의 경우) custom url scheme 대신 intent schema(intent://) 호출 +> +> > **`kpn`** **object** +> > +> > KPN bypass 파라미터 +> > +> > > `CardSelect` **enum\[]** +> > > +> > > **일부 렌더링할 결제방식 목록** +> > > 특정 카드사로 구별되지 않는 결제수단을 지정할 때 사용합니다. +> > > +> > > - 해외카드 (VISA + MASTER + JCB) : `GLOBAL` +> > > - 구인증 : `LEGACY_AUTH` +> > > - 키인 : `KEY_IN` ### **`country`** **string** diff --git a/src/content/docs/ko/v2-payment/v2.mdx b/src/content/docs/ko/v2-payment/v2.mdx index 7793ab55c..4d89593b5 100644 --- a/src/content/docs/ko/v2-payment/v2.mdx +++ b/src/content/docs/ko/v2-payment/v2.mdx @@ -98,6 +98,7 @@ V2는 최신 결제 기능을 가장 빠르게 제공합니다. 곧 출시될 - **나이스페이먼츠** - **페이팔** - **KG이니시스** +- **한국결제네트웍스(KPN)** ### 본인인증 diff --git a/src/schema/v2.openapi.json b/src/schema/v2.openapi.json index d633dd21d..3b72669d3 100644 --- a/src/schema/v2.openapi.json +++ b/src/schema/v2.openapi.json @@ -4919,6 +4919,24 @@ "summary": "

결제 다건 조회(페이지 기반)

\n", "description": "

결제 다건 조회(페이지 기반)

\n

주어진 조건에 맞는 결제 건들을 페이지 기반으로 조회합니다.

\n", "operationId": "getPayments", + "parameters": [ + { + "name": "requestBody", + "in": "query", + "required": false, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPaymentsBody" + } + } + }, + "x-portone-query-or-body": { + "enabled": true, + "required": false + } + } + ], "requestBody": { "content": { "application/json": { @@ -4927,7 +4945,7 @@ } } }, - "required": true + "required": false }, "responses": { "200": { @@ -4993,6 +5011,24 @@ "summary": "

결제 대용량 다건 조회(커서 기반)

\n", "description": "

결제 대용량 다건 조회(커서 기반)

\n

기간 내 모든 결제 건을 커서 기반으로 조회합니다. 결제 건의 생성일시를 기준으로 주어진 기간 내 존재하는 모든 결제 건이 조회됩니다.

\n", "operationId": "getAllPaymentsByCursor", + "parameters": [ + { + "name": "requestBody", + "in": "query", + "required": false, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetAllPaymentsByCursorBody" + } + } + }, + "x-portone-query-or-body": { + "enabled": true, + "required": false + } + } + ], "requestBody": { "content": { "application/json": { @@ -5001,7 +5037,7 @@ } } }, - "required": true + "required": false }, "responses": { "200": { @@ -5165,6 +5201,24 @@ "summary": "

결제 예약 다건 조회

\n", "description": "

결제 예약 다건 조회

\n

주어진 조건에 맞는 결제 예약 건들을 조회합니다.

\n", "operationId": "getPaymentSchedules", + "parameters": [ + { + "name": "requestBody", + "in": "query", + "required": false, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPaymentSchedulesBody" + } + } + }, + "x-portone-query-or-body": { + "enabled": true, + "required": false + } + } + ], "requestBody": { "content": { "application/json": { @@ -5173,7 +5227,7 @@ } } }, - "required": true + "required": false }, "responses": { "200": { @@ -5237,6 +5291,24 @@ "summary": "

결제 예약 취소

\n", "description": "

결제 예약 취소

\n

결제 예약 건을 취소합니다.

\n", "operationId": "revokePaymentSchedule", + "parameters": [ + { + "name": "requestBody", + "in": "query", + "required": false, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RevokePaymentScheduleBody" + } + } + }, + "x-portone-query-or-body": { + "enabled": true, + "required": false + } + } + ], "requestBody": { "content": { "application/json": { @@ -5245,7 +5317,7 @@ } } }, - "required": true + "required": false }, "responses": { "200": { @@ -36468,4 +36540,4 @@ "description": "

특정 PG사에 국한된 API 기능을 제공합니다.

\n" } ] -} +} \ No newline at end of file