# NHH KCP

### 1. Configure NHH KCP PG settings

Refer to the [**NHN KCP settings**](https://portone.gitbook.io/docs-en/ready/2.-pg/payment-gateway-settings/nhn-kcp) page to configure the PG settings.

![](https://2814812280-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTv8JEzyM5h4cYcL5StH%2Fuploads%2FXNBAIJxedgYoIKRPqKsv%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-05-29%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%207.53.40.png?alt=media\&token=284fa4ef-dc4d-43b7-82fa-b7e4ce18057e)

### 2. Request payment

To open the payment window, call [JavaScript SDK](https://portone.gitbook.io/docs-en/sdk/javascript-sdk) IMP.**request\_pay**(param, callback).

In PC browsers, <mark style="color:red;">**callback**</mark> is invoked after calling `IMP.request_pay(param, callback)`. In mobile browsers, the page is redirected to <mark style="color:red;">**m\_redirect\_url**</mark>.

{% tabs %}
{% tab title="Authenticated payment request" %}
{% code title="Javascript SDK" %}

```javascript
IMP.request_pay({
    pg : 'kcp',
    pay_method : 'card',
    merchant_uid : '{Merchant created Order ID}', // Example: order_no_0001
    name : 'Order name: Test payment request',
    amount : 14000,
    buyer_email : 'iamport@siot.do',
    buyer_name : 'John Doe',
    buyer_tel : '010-1234-5678',
    buyer_addr : 'Shinsa-dong, Gangnam-gu, Seoul',
    buyer_postcode : '123-456',
    language : 'ko', // default: ko (Korean)    
    m_redirect_url : '{Mobile only - URL to redirect to after payment approval}' // Example: https://www.my-service.com/payments/complete/mobile
}, function(rsp) { // callback logic
	//* ...Omitted... *//
});
```

{% endcode %}

#### Key parameter description

**`pg`** <mark style="color:red;">**\***</mark>\*\* \*\*<mark style="color:green;">**string**</mark>

**PG code**

* If not specified and this is the only PG setting that exists, `default PG` is automatically set.
* If there are multiple PG settings, set to `kcp`.

**`pay_method`** <mark style="color:red;">**\***</mark>\*\* \*\*<mark style="color:green;">**string**</mark>

**Payment method code**

<details>

<summary>Payment method codes</summary>

* `card` (credit card)
* `trans`(instant account transfer)
* `vbank`(virtual account)
* `phone`(mobile micropayment)
* `samsung`(Samsung Pay)
* `kakaopay`(Kakao Pay)
* `payco` ( PAYCO hub-type)
* `lpay` (LPAY hub-type)
* `naverpay` (Naver Pay)
* `cultureland`(Cultureland)
* `smartculture`(Smart Culture)
* `happymoney`(Happy Money)
* `booknlife`(Book culture gift certificate)
* `point`(Benepia)

</details>

**`merchant_uid`** <mark style="color:red;">**\***</mark>\*\* \*\*<mark style="color:green;">**string**</mark>

**Order ID**

Must be unique for each request.

**`amount`** <mark style="color:red;">**\***</mark>\*\* \*\*<mark style="color:purple;">**integer**</mark>

**Payment amount**

Must be an integer (not string).

{% hint style="info" %}
**For Payco hub-type**, you must apply through KCP Admin page and configure the settings.

How to apply: <https://sir.kr/main/service/p_payco_hub.php>
{% endhint %}

{% embed url="<https://codepen.io/chaiport/pen/NWXrGvQ>" %}
{% endtab %}

{% tab title="Non-authenticated payment request" %}
To open non-authenticated payment window, specify the **customer\_uid** parameter. After getting a billing key from this window, you can request payment using the billing key.

{% code title="Javascript SDK" %}

```javascript
IMP.request_pay({
    pg : 'kcp_billing',
    pay_method : 'card', // only 'card' supported.
    merchant_uid : '{Merchant created Order ID}', // Example: issue_billingkey_monthly_0001
    name : 'Initial billing key request',
    amount : 0, // For display purpose only (no payment approval).
    customer_uid : '{Unique ID for the card (billing key)}', // Required (Example: gildong_0001_1234)
    buyer_email: "johndoe@gmail.com",
    buyer_name: "John Doe",
    buyer_tel : '02-1234-1234',
    m_redirect_url : '{redirect URL}' // Example: https://www.my-service.com/payments/complete/mobile (for mobile only)
}, function(rsp) {
	if ( rsp.success ) {
		alert('Success');
	} else {
		alert('Failed');
	}
});
```

{% endcode %}

{% hint style="info" %}

* To request non-authenticated payment, you must set the **site code issued by KCP** in the Admin console.
* KCP <mark style="color:red;">**does not process the payment**</mark> when issuing the billing key even if you specify an amount.
  {% endhint %}

#### Key parameter description

**`pg`** <mark style="color:red;">**\***</mark>\*\* \*\*<mark style="color:green;">**string**</mark>

**PG code**

* If not specified and this is the only PG setting that exists, `default PG` is automatically set.
* If there are multiple PG settings, set to `kcp_billing`.

**`customer_uid`** <mark style="color:red;">**\***</mark>\*\* \*\*<mark style="color:green;">**string**</mark>

**Credit card billing key**

Billing key to be mapped 1:1 with the user-entered credit card information.

**`amount`** <mark style="color:red;">**\***</mark>\*\* \*\*<mark style="color:purple;">**Integer**</mark>

**Payment amount**

Amount to display in the payment window, but <mark style="color:red;">actual payment approval is not processed.</mark> (To request payment, use the **REST API with the customer\_uid**.)\\

#### Request payment with billing key (customer\_uid)

After successfully getting the billing key, the billing key is **stored on the i'mport server** mapped 1:1 with the specified `customer_uid`. For security reasons, the server cannot directly access the billing key. Subsequent payments can be requested by calling the [<mark style="color:blue;">**non-authenticated payment request REST API**</mark>](https://portone.gitbook.io/docs-en/api/api/api) with the `customer_uid` as follows:

{% code title="sever-side" %}

```
curl -H "Content-Type: application/json" \   
     -X POST -d '{"customer_uid":"your-customer-unique-id", "merchant_uid":"order_id_8237352", "amount":3000}' \
     https://api.iamport.kr/subscribe/payments/again
```

{% endcode %}
{% endtab %}

{% tab title="Non-authenticated API  request" %}
**You can use i'mport REST API to request billing key, request payment, and schedule payment.**

#### Request one-time payment

To request a one-time payment, use the key-in REST[ **API POST /subscribe/payments/onetime**](https://portone.gitbook.io/docs-en/api/api/request-non-authenticated-payment-one-time-api). The card information is not saved during this process.

```
curl -H "Content-Type: application/json" \   
     -X POST -d '{"merchant_uid":"order_id_8237352", "card_number":"1234-1234-1234-1234", "expiry":"2019-01", "birth":"123456", "amount":3000}' \
     https://api.iamport.kr/subscribe/payments/onetime
```

####

#### Request billing key

To request a billing key, use the billing key request REST [**API POST /subscribe/customers/{customer\_uid}**](https://portone.gitbook.io/docs-en/api/billing-key-api/api-1).

```
curl -H "Content-Type: application/json" \   
     -X POST -d '{"card_number":"1234-1234-1234-1234", "expiry":"2025-12", "birth":"820213", "pwd_2digit":"00"}' \
     https://api.iamport.kr/subscribe/customers/your-customer-unique-id
```

#### Request billing key + initial payment

To request a billing key and initial payment, use the key-in REST [**API POST /subscribe/payments/onetime**](https://portone.gitbook.io/docs-en/api/api/request-non-authenticated-payment-one-time-api).

* **`customer_uid`** : required for saving the billing key.

```
curl -H "Content-Type: application/json" \   
     -X POST -d '{"customer_uid":"your-customer-unique-id", "merchant_uid":"order_id_8237352", "card_number":"1234-1234-1234-1234", "expiry":"2019-01", "birth":"123456", "amount":3000}' \
     https://api.iamport.kr/subscribe/payments/onetime 
```

#### Request payment with billing key

After successfully getting the billing key and making the initial payment, the billing key is stored on the i'mport server mapped 1:1 with the specified `customer_uid`. For security reasons, the server cannot directly access the billing key. Subsequent payments can be requested by calling the repeat pay REST API ([**POST /subscribe/payments/again**](https://portone.gitbook.io/docs-en/api/api/api)) with the `customer_uid` as follows:

```
curl -H "Content-Type: application/json" \   
     -X POST -d '{"customer_uid":"your-customer-unique-id", "merchant_uid":"order_id_8237352", "amount":3000}' \
     https://api.iamport.kr/subscribe/payments/again
```

**For detailed information, refer to:**

{% content-ref url="../../auth/guide-1" %}
[guide-1](https://portone.gitbook.io/docs-en/auth/guide-1)
{% endcontent-ref %}
{% endtab %}
{% endtabs %}

### 3. Additional functions

{% tabs %}
{% tab title="Installment setting" %}
{% code title="javascript" %}

```javascript
display: {
    card_quota: [6]  // Display up to 6 months installment plans
}
```

{% endcode %}

**Parameters**

* **card\_quota :**
  * `[]`: Only immediate pay
  * `2,3,4,5,6`: immediate, 2, 3, 4, 5, 6 month installment plans\\

{% hint style="info" %}
Installment plan option is available only for **KRW 50,000 or more**.
{% endhint %}

{% embed url="<https://codepen.io/chaiport/pen/yLpMvYJ>" %}
Example of allowing up to <mark style="color:red;">**3 months**</mark>\*\* installment plans\*\*
{% endembed %}
{% endtab %}

{% tab title="Direct credit card module call" %}
{% code title="javascript" %}

```javascript
card: {
     direct: {
        code: "367",
        quota: 3
    }
}
```

{% endcode %}

**Parameters**

* **code**: [<mark style="color:red;">**Credit card code**</mark>](https://chaifinance.notion.site/53589280bbc94fab938d93257d452216?v=eb405baf52134b3f90d438e3bf763630) (**string**)
* **quota**: Installment plan. For immediate, set to 0. (**integer**)

{% hint style="danger" %}
**Precautions**

* Currently, direct call to the credit card company's payment window is only supported by 6 PGs: **KG Inicis, KCP, Toss Payments, Nice Payments, KICC, and Danal**.
* Some PGs do not support direct call to credit card company's payment windows for all Merchant IDs. You must check your Merchant ID with each PG for direct call support.
  {% endhint %}

{% embed url="<https://codepen.io/chaiport/pen/oNpZEvq>" %}
Example of direct call to <mark style="color:red;">**Hyundai Card**</mark> module
{% endembed %}
{% endtab %}

{% tab title="Enable specific credit cards" %}
{% code title="javascript" %}

```javascript
card : {
    detail : [
        {card_code:"*", enabled:false},     // Disable all credit cards
        {card_code:'366', enabled:true}     // Enable specific credit card
    ]
}
```

{% endcode %}

**Parameters**

* **card\_code:** [<mark style="color:red;">**Credit card code**</mark>](https://chaifinance.notion.site/53589280bbc94fab938d93257d452216?v=eb405baf52134b3f90d438e3bf763630) (<mark style="color:green;">**string)**</mark>
* **enabled:** Option to enable the credit card (<mark style="color:orange;">**boolean)**</mark>

{% embed url="<https://codepen.io/chaiport/pen/RwxpQNq>" %}
**Example of enabling only&#x20;**<mark style="color:red;">**Shinhan Card**</mark>**&#x20;payment window**
{% endembed %}
{% endtab %}

{% tab title="App cards only" %}
Set the following parameter to only expose app cards for authenticated payments.

{% code title="request\_pay()" %}

```javascript
...
appCard : true .  // Set to true to only expose app cards.
...
```

{% endcode %}
{% endtab %}
{% endtabs %}

### 4. Additional parameters

{% tabs %}
{% tab title="Gift certificate payment" %}
To use the **gift certificate payment method**, set the merchant assigned user ID as follows:

{% code title="javascript SDK " %}

```javascript
bypass : {
    shop_user_id : ‘ABCD123’   // Merchant user ID (20 bytes)
}
```

{% endcode %}

{% hint style="success" %}
**This parameter is required for gift certificate providers' RM action.**
{% endhint %}

**Example of paying with Cultureland gift certificate**

```javascript
MP.request_pay({
    pg : 'kcp.{Site code for gift certificate use}',
    pay_method : 'cultureland',    //Gift certificate
    merchant_uid: "A00021-TEST",
    name : 'Carrots 10kg',
    amount : 1004,
    buyer_email : 'iamport@chai.finance',
    buyer_name : 'iamport tech support',
    buyer_tel : '010-1234-5678',
    buyer_addr : 'Shinsa-dong, Gangnam-gu, Seoul',
    buyer_postcode : '123-456',
    bypass : {
        shop_user_id : 'abaddd'  // Merchant user ID
    }
}
```

{% endtab %}

{% tab title="Escrow payment" %}
For escrow payment, set the **`escrow`** parameter to **true**. To bundle products in the shopping cart when making an escrow payment request, pass the item-related information as an additional parameter (**`kcpProducts`**).

**`kcpProducts`** is an object array consisting of the following four required properties:

**`amount`** is not related or compared with the payment amount (`param.amount`).

* orderNumber : Order ID
* name : Product name
* quantity : Product quantity
* amount : Product price

{% code title="JavaScript SDK" %}

```javascript
IMP.request_pay({
    pg : 'kcp',
    escrow : true, // For escrow payment
    kcpProducts : [
    	{
	    "orderNumber" : "xxxx",
	    "name" : "Product A",
	    "quantity" : 3,
	    "amount" : 1000
	},{
	    "orderNumber" : "yyyy",
	    "name" : "Product B",
	    "quantity" : 2,
	    "amount" : 3000
	}
    ],
    //* ...Omitted... *//
})
```

{% endcode %}
{% endtab %}
{% endtabs %}
