Mobile 표준결제 연동하기


API 연동하기

NHN KCP에서 제공하는 API 연동 가이드를 안내합니다.

호출-인증-승인-결과 4STEP으로 진행되는 Mobile 표준결제 가이드를 확인해주세요

API Download

라이브러리와 샘플은 다운로드 자료실을 참조해주세요.


거래등록

NHN KCP 모바일 표준결제창 호출에 필요한 거래등록에 대해 확인 바랍니다.

거래등록은 주문자로부터 결제에 필요한 데이터를 입력 받고,
가맹점이 설정한 데이터를 체크한 후 NHN KCP 거래인증등록 서버를 통해 거래인증을 하는 페이지입니다.

json 요청으로 거래가 정상 등록되면 json 응답 값으로 데이터를 리턴해드립니다.

승인요청 데이터는 Json String 전송방식으로 요청 하세요.

kcp_cert_info 인증서 데이터 발급은 참고사항의 서버인증서페이지를 참고해주세요.

<!-- 거래등록 호출 -->

1https://spl.kcp.co.kr/std/tradeReg/register

테스트 환경 : https://stg-spl.kcp.co.kr/std/tradeReg/register


거래등록 파라미터 가이드

등록요청 파라미터

string가변

kcp_cert_info

KCP 발급 인증서정보


string5

site_cd

상점ID
테스트코드 : T0000


string40

ordr_idxx

주문번호


string12

good_mny

주문금액


string12

pay_method

결제수단


string100

good_name

상품명


string256

Ret_URL

인증 완료 후 데이터를 리턴받을 응답 주소


string1

escw_used

에스크로 사용여부


string40

user_agent

사용 OS

등록응답 파라미터

string4

Code

응답코드


string100

Message

응답메세지


string가변

approvalKey

거래인증 키


string가변

PayUrl

리턴 받은 결제 창 호출 주소
전달 받은 값 그대로 요청


string가변

hashData

해시정보


string가변

traceNo

추적번호


string가변

paymentMethod

결제 수단


string가변

request_URI

요청 주소

거래등록 샘플코드 예시

<%@ page language="java" contentType="text/html;charset=euc-kr"%>
<%!
    /* null 값을 처리하는 메소드 */
        public String f_get_parm( String val )
        {
          if ( val == null ) val = "";
          return  val;
        }
%>
<%
    request.setCharacterEncoding( "euc-kr" );
    /*
    ==========================================================================
    거래등록 API URL
    --------------------------------------------------------------------------
    */
    String target_URL = "https://stg-spl.kcp.co.kr/std/tradeReg/register"; //개발환경
    //String target_URL = "https://spl.kcp.co.kr/std/tradeReg/register"; //운영환경
    /*
    ==========================================================================
    요청 정보
    --------------------------------------------------------------------------
    */
    String site_cd              = f_get_parm( request.getParameter( "site_cd"  )); // 사이트코드
    // 인증서정보(직렬화)
    String kcp_cert_info        = "-----BEGIN CERTIFICATE-----MIIDgTCCAmmgAwIBAgIHBy4lYNG7ojANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJLUjEOMAwGA1UECAwFU2VvdWwxEDAOBgNVBAcMB0d1cm8tZ3UxFTATBgNVBAoMDE5ITktDUCBDb3JwLjETMBEGA1UECwwKSVQgQ2VudGVyLjEWMBQGA1UEAwwNc3BsLmtjcC5jby5rcjAeFw0yMTA2MjkwMDM0MzdaFw0yNjA2MjgwMDM0MzdaMHAxCzAJBgNVBAYTAktSMQ4wDAYDVQQIDAVTZW91bDEQMA4GA1UEBwwHR3Vyby1ndTERMA8GA1UECgwITG9jYWxXZWIxETAPBgNVBAsMCERFVlBHV0VCMRkwFwYDVQQDDBAyMDIxMDYyOTEwMDAwMDI0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAppkVQkU4SwNTYbIUaNDVhu2w1uvG4qip0U7h9n90cLfKymIRKDiebLhLIVFctuhTmgY7tkE7yQTNkD+jXHYufQ/qj06ukwf1BtqUVru9mqa7ysU298B6l9v0Fv8h3ztTYvfHEBmpB6AoZDBChMEua7Or/L3C2vYtU/6lWLjBT1xwXVLvNN/7XpQokuWq0rnjSRThcXrDpWMbqYYUt/CL7YHosfBazAXLoN5JvTd1O9C3FPxLxwcIAI9H8SbWIQKhap7JeA/IUP1Vk4K/o3Yiytl6Aqh3U1egHfEdWNqwpaiHPuM/jsDkVzuS9FV4RCdcBEsRPnAWHz10w8CX7e7zdwIDAQABox0wGzAOBgNVHQ8BAf8EBAMCB4AwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAg9lYy+dM/8Dnz4COc+XIjEwr4FeC9ExnWaaxH6GlWjJbB94O2L26arrjT2hGl9jUzwd+BdvTGdNCpEjOz3KEq8yJhcu5mFxMskLnHNo1lg5qtydIID6eSgew3vm6d7b3O6pYd+NHdHQsuMw5S5z1m+0TbBQkb6A9RKE1md5/Yw+NymDy+c4NaKsbxepw+HtSOnma/R7TErQ/8qVioIthEpwbqyjgIoGzgOdEFsF9mfkt/5k6rR0WX8xzcro5XSB3T+oecMS54j0+nHyoS96/llRLqFDBUfWn5Cay7pJNWXCnw4jIiBsTBa3q95RVRyMEcDgPwugMXPXGBwNoMOOpuQ==-----END CERTIFICATE-----";
    String ordr_idxx            = f_get_parm( request.getParameter( "ordr_idxx" )); // 주문번호
    String good_mny             = f_get_parm( request.getParameter( "good_mny" )); // 결제 금액
    String good_name            = f_get_parm( request.getParameter( "good_name" )); // 상품명
    String pay_method           = f_get_parm( request.getParameter( "pay_method" )); // 결제수단
    String Ret_URL              = f_get_parm( request.getParameter( "Ret_URL" )); // 리턴 URL
    /* ============================================================================== */
    String actionResult         = f_get_parm( request.getParameter( "ActionResult" )); // pay_method에 매칭되는 값 (인증창 호출 시 필요)
    String van_code             = f_get_parm( request.getParameter( "van_code" )); // (포인트,상품권 인증창 호출 시 필요)

    JSONObject json_req = new JSONObject();

    json_req.put("site_cd", site_cd);
    json_req.put("kcp_cert_info", kcp_cert_info);
    json_req.put("ordr_idxx", ordr_idxx);
    json_req.put("good_mny", good_mny);
    json_req.put("good_name", good_name);
    json_req.put("pay_method", pay_method);
    json_req.put("Ret_URL", Ret_URL);
    json_req.put("escw_used", "N");
    json_req.put("user_agent", "");

    String temp_req_param = json_req.toString();
    String req_param = temp_req_param.replace(",",",\r\n");

    String inputLine = null;
    StringBuffer outResult = new StringBuffer();

    try
    {
        // API REQ
        URL url = new URL(target_URL);
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setRequestProperty("Accept-Charset", "UTF-8");

        OutputStream os = conn.getOutputStream();
        os.write(req_param.getBytes("UTF-8"));
        os.flush();

        // API RES
        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
        while ((inputLine = in.readLine()) != null)
        {
            outResult.append(inputLine);
        }
        conn.disconnect();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

    String temp_result = outResult.toString();
    String res_param = temp_result.replace(",",",\r\n");

    /*
    ==========================================================================
    거래등록 응답정보
    --------------------------------------------------------------------------
    */
    String res_cd      = ""; // 응답코드
    String res_msg     = ""; // 응답메세지
    String approvalKey = ""; // 거래등록키
    String traceNo     = ""; // 추적번호
    String PayUrl      = ""; // 거래등록 PAY URL

    // RES JSON DATA Parsing
    JSONParser parser = new JSONParser();
    JSONObject json_res = (JSONObject)parser.parse(temp_result);

    res_cd      = (String)json_res.get("Code");
    res_msg     = (String)json_res.get("Message");
    approvalKey = (String)json_res.get("approvalKey");
    traceNo     = (String)json_res.get("traceNo");
    PayUrl      = (String)json_res.get("PayUrl");

%>
<?php
  header("Content-type: text/html; charset=utf-8");
  /*
   ==========================================================================
        거래등록 API URL
   --------------------------------------------------------------------------
   */
  $target_URL = "https://stg-spl.kcp.co.kr/std/tradeReg/register"; //개발환경
  //$target_URL = "https://spl.kcp.co.kr/std/tradeReg/register"; //운영환경
  /*
  ==========================================================================
  요청 정보
  --------------------------------------------------------------------------
  */
  $site_cd            = $_POST[ "site_cd"  ]; // 사이트코드
  // 인증서정보(직렬화)
  $kcp_cert_info      = "-----BEGIN CERTIFICATE-----MIIDgTCCAmmgAwIBAgIHBy4lYNG7ojANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJLUjEOMAwGA1UECAwFU2VvdWwxEDAOBgNVBAcMB0d1cm8tZ3UxFTATBgNVBAoMDE5ITktDUCBDb3JwLjETMBEGA1UECwwKSVQgQ2VudGVyLjEWMBQGA1UEAwwNc3BsLmtjcC5jby5rcjAeFw0yMTA2MjkwMDM0MzdaFw0yNjA2MjgwMDM0MzdaMHAxCzAJBgNVBAYTAktSMQ4wDAYDVQQIDAVTZW91bDEQMA4GA1UEBwwHR3Vyby1ndTERMA8GA1UECgwITG9jYWxXZWIxETAPBgNVBAsMCERFVlBHV0VCMRkwFwYDVQQDDBAyMDIxMDYyOTEwMDAwMDI0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAppkVQkU4SwNTYbIUaNDVhu2w1uvG4qip0U7h9n90cLfKymIRKDiebLhLIVFctuhTmgY7tkE7yQTNkD+jXHYufQ/qj06ukwf1BtqUVru9mqa7ysU298B6l9v0Fv8h3ztTYvfHEBmpB6AoZDBChMEua7Or/L3C2vYtU/6lWLjBT1xwXVLvNN/7XpQokuWq0rnjSRThcXrDpWMbqYYUt/CL7YHosfBazAXLoN5JvTd1O9C3FPxLxwcIAI9H8SbWIQKhap7JeA/IUP1Vk4K/o3Yiytl6Aqh3U1egHfEdWNqwpaiHPuM/jsDkVzuS9FV4RCdcBEsRPnAWHz10w8CX7e7zdwIDAQABox0wGzAOBgNVHQ8BAf8EBAMCB4AwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAg9lYy+dM/8Dnz4COc+XIjEwr4FeC9ExnWaaxH6GlWjJbB94O2L26arrjT2hGl9jUzwd+BdvTGdNCpEjOz3KEq8yJhcu5mFxMskLnHNo1lg5qtydIID6eSgew3vm6d7b3O6pYd+NHdHQsuMw5S5z1m+0TbBQkb6A9RKE1md5/Yw+NymDy+c4NaKsbxepw+HtSOnma/R7TErQ/8qVioIthEpwbqyjgIoGzgOdEFsF9mfkt/5k6rR0WX8xzcro5XSB3T+oecMS54j0+nHyoS96/llRLqFDBUfWn5Cay7pJNWXCnw4jIiBsTBa3q95RVRyMEcDgPwugMXPXGBwNoMOOpuQ==-----END CERTIFICATE-----";
  $ordr_idxx          = $_POST[ "ordr_idxx" ]; // 주문번호
  $good_mny           = $_POST[ "good_mny" ]; // 결제 금액
  $good_name          = $_POST[ "good_name" ]; // 상품명
  $pay_method         = $_POST[ "pay_method" ]; // 결제수단
  $Ret_URL            = $_POST[ "Ret_URL" ]; // 리턴 URL
  /* ============================================================================== */
  $actionResult       = $_POST[ "ActionResult" ]; // pay_method에 매칭되는 값 (인증창 호출 시 필요)
  $van_code           = $_POST[ "van_code" ]; // (포인트,상품권 인증창 호출 시 필요)

  $data = [
      'site_cd'        => $site_cd,
      'kcp_cert_info'  => $kcp_cert_info,
      'ordr_idxx'      => $ordr_idxx,
      'good_mny'       => $good_mny,
      'good_name'      => $$good_name,
      'pay_method'     => $pay_method,
      'Ret_URL'        => $Ret_URL,
      'escw_used'      => 'N',
      'user_agent'     => ''
  ];

  $req_data = json_encode($data);

  $header_data = array( "Content-Type: application/json", "charset=utf-8" );

  // API REQ
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $target_URL);
  curl_setopt($ch, CURLOPT_HTTPHEADER, $header_data);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
  curl_setopt($ch, CURLOPT_POSTFIELDS, $req_data);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

  // API RES
  $res_data  = curl_exec($ch);

  /*
  ==========================================================================
  거래등록 응답정보
  --------------------------------------------------------------------------
  */
  $res_cd      = ""; // 응답코드
  $res_msg     = ""; // 응답메세지
  $approvalKey = ""; // 거래등록키
  $traceNo     = ""; // 추적번호
  $PayUrl      = ""; // 거래등록 PAY URL

  // RES JSON DATA Parsing
  $json_res = json_decode($res_data, true);

  $res_cd      = $json_res["Code"];
  $res_msg     = $json_res["Message"];
  $approvalKey = $json_res["approvalKey"];
  $traceNo     = $json_res["traceNo"];
  $PayUrl      = $json_res["PayUrl"];

  curl_close($ch);
?>
using System;
namespace Payment
{
    public partial class Kcp_api_trade_reg : System.Web.UI.Page
    {
        protected string site_cd;       // 사이트코드
        protected string kcp_cert_info; // 인증서 정보
        protected string ordr_idxx;     // 주문번호
        protected string good_mny;      // 결제 금액
        protected string good_name;     // 상품명
        protected string pay_method;    // 결제수단
        protected string Ret_URL;       // 리턴 URL

        protected string actionResult;  // pay_method에 매칭되는 값 (인증창 호출 시 필요)
        protected string van_code;      // (포인트,상품권 인증창 호출 시 필요)

        protected string target_URL;

        protected string req_data;
        protected string res_data;

        protected string res_cd;      // 응답코드
        protected string res_msg;     // 응답메세지
        protected string approvalKey; // 거래등록키
        protected string traceNo;     // 추적번호
        protected string PayUrl;      // 거래등록 PAY URL

        protected void Page_Load(object sender, EventArgs e)
        {
            /* ============================================================================== */
            /* =   거래등록 API URL                                                         = */
            /* = -------------------------------------------------------------------------- = */
            target_URL = "https://stg-spl.kcp.co.kr/std/tradeReg/register"; // 개발서버
            //target_URL = "https://spl.kcp.co.kr/std/tradeReg/register"; // 운영서버
            /* ============================================================================== */
            /* =  요청정보                                                                  = */
            /* = -------------------------------------------------------------------------- = */
            site_cd = Request.Form["site_cd"]; // 사이트코드
            // 인증서정보(직렬화)
            kcp_cert_info = "-----BEGIN CERTIFICATE-----MIIDgTCCAmmgAwIBAgIHBy4lYNG7ojANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJLUjEOMAwGA1UECAwFU2VvdWwxEDAOBgNVBAcMB0d1cm8tZ3UxFTATBgNVBAoMDE5ITktDUCBDb3JwLjETMBEGA1UECwwKSVQgQ2VudGVyLjEWMBQGA1UEAwwNc3BsLmtjcC5jby5rcjAeFw0yMTA2MjkwMDM0MzdaFw0yNjA2MjgwMDM0MzdaMHAxCzAJBgNVBAYTAktSMQ4wDAYDVQQIDAVTZW91bDEQMA4GA1UEBwwHR3Vyby1ndTERMA8GA1UECgwITG9jYWxXZWIxETAPBgNVBAsMCERFVlBHV0VCMRkwFwYDVQQDDBAyMDIxMDYyOTEwMDAwMDI0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAppkVQkU4SwNTYbIUaNDVhu2w1uvG4qip0U7h9n90cLfKymIRKDiebLhLIVFctuhTmgY7tkE7yQTNkD+jXHYufQ/qj06ukwf1BtqUVru9mqa7ysU298B6l9v0Fv8h3ztTYvfHEBmpB6AoZDBChMEua7Or/L3C2vYtU/6lWLjBT1xwXVLvNN/7XpQokuWq0rnjSRThcXrDpWMbqYYUt/CL7YHosfBazAXLoN5JvTd1O9C3FPxLxwcIAI9H8SbWIQKhap7JeA/IUP1Vk4K/o3Yiytl6Aqh3U1egHfEdWNqwpaiHPuM/jsDkVzuS9FV4RCdcBEsRPnAWHz10w8CX7e7zdwIDAQABox0wGzAOBgNVHQ8BAf8EBAMCB4AwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAg9lYy+dM/8Dnz4COc+XIjEwr4FeC9ExnWaaxH6GlWjJbB94O2L26arrjT2hGl9jUzwd+BdvTGdNCpEjOz3KEq8yJhcu5mFxMskLnHNo1lg5qtydIID6eSgew3vm6d7b3O6pYd+NHdHQsuMw5S5z1m+0TbBQkb6A9RKE1md5/Yw+NymDy+c4NaKsbxepw+HtSOnma/R7TErQ/8qVioIthEpwbqyjgIoGzgOdEFsF9mfkt/5k6rR0WX8xzcro5XSB3T+oecMS54j0+nHyoS96/llRLqFDBUfWn5Cay7pJNWXCnw4jIiBsTBa3q95RVRyMEcDgPwugMXPXGBwNoMOOpuQ==-----END CERTIFICATE-----";
            ordr_idxx     = Request.Form["ordr_idxx"];
            good_mny      = Request.Form["good_mny"];
            good_name     = Request.Form["good_name"];
            pay_method    = Request.Form["pay_method"];
            Ret_URL       = Request.Form["Ret_URL"];
            /* ============================================================================== */
            actionResult  = Request.Form["ActionResult"];
            van_code      = Request.Form["van_code"];

            req_data = "{\"site_cd\" : \"" + site_cd + "\"," +
                                  "\"kcp_cert_info\":\"" + kcp_cert_info + "\"," +
                                  "\"ordr_idxx\":\"" + ordr_idxx + "\"," +
                                  "\"good_mny\":\"" + good_mny + "\"," +
                                  "\"good_name\":\"" + good_name + "\"," +
                                  "\"pay_method\":\"" + pay_method + "\"," +
                                  "\"Ret_URL\":\"" + Ret_URL + "\"," +
                                  "\"escw_used\":\"N\"," +
                                  "\"user_agent\":\"\"}";

            Console.WriteLine(req_data);
            // SSL/ TLS 보안 채널을 만들수 없습니다. 오류 발생 시 추가 (프레임워크 버전을 올렸음에도 안될 경우 추가)
            ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
            ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

            // API REQ
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(target_URL);
            req.Method         = "POST";
            req.ContentType    = "application/json";

            byte[] byte_req = Encoding.UTF8.GetBytes(req_data);
            req.ContentLength = byte_req.Length;

            Stream st = req.GetRequestStream();
            st.Write(byte_req, 0, byte_req.Length);
            st.Close();

            // API RES
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            StreamReader st_read = new StreamReader(res.GetResponseStream(), Encoding.GetEncoding("utf-8"));
            res_data = st_read.ReadToEnd();

            st_read.Close();
            res.Close();

            // RES JSON DATA Parsing
            JObject json_data = JObject.Parse(res_data);

            res_cd      = json_data["Code"].ToString();
            res_msg     = json_data["Message"].ToString();
            approvalKey = json_data["approvalKey"].ToString();
            traceNo     = json_data["traceNo"].ToString();
            PayUrl      = json_data["PayUrl"].ToString();

        }
    }
}
<!--#include file="../lib/json2.asp"-->
<%
    Response.CharSet = "UTF-8"

    '==========================================================================
    '거래등록 API URL
    '--------------------------------------------------------------------------

    target_URL = "https://stg-spl.kcp.co.kr/std/tradeReg/register" '개발환경
    'target_URL = "https://spl.kcp.co.kr/std/tradeReg/register" '운영환경

    '==========================================================================
    '요청 정보
    '--------------------------------------------------------------------------

    site_cd              = trim(request( "site_cd"  ))' 사이트코드
    ' 인증서정보(직렬화)
    kcp_cert_info        = "-----BEGIN CERTIFICATE-----MIIDgTCCAmmgAwIBAgIHBy4lYNG7ojANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJLUjEOMAwGA1UECAwFU2VvdWwxEDAOBgNVBAcMB0d1cm8tZ3UxFTATBgNVBAoMDE5ITktDUCBDb3JwLjETMBEGA1UECwwKSVQgQ2VudGVyLjEWMBQGA1UEAwwNc3BsLmtjcC5jby5rcjAeFw0yMTA2MjkwMDM0MzdaFw0yNjA2MjgwMDM0MzdaMHAxCzAJBgNVBAYTAktSMQ4wDAYDVQQIDAVTZW91bDEQMA4GA1UEBwwHR3Vyby1ndTERMA8GA1UECgwITG9jYWxXZWIxETAPBgNVBAsMCERFVlBHV0VCMRkwFwYDVQQDDBAyMDIxMDYyOTEwMDAwMDI0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAppkVQkU4SwNTYbIUaNDVhu2w1uvG4qip0U7h9n90cLfKymIRKDiebLhLIVFctuhTmgY7tkE7yQTNkD+jXHYufQ/qj06ukwf1BtqUVru9mqa7ysU298B6l9v0Fv8h3ztTYvfHEBmpB6AoZDBChMEua7Or/L3C2vYtU/6lWLjBT1xwXVLvNN/7XpQokuWq0rnjSRThcXrDpWMbqYYUt/CL7YHosfBazAXLoN5JvTd1O9C3FPxLxwcIAI9H8SbWIQKhap7JeA/IUP1Vk4K/o3Yiytl6Aqh3U1egHfEdWNqwpaiHPuM/jsDkVzuS9FV4RCdcBEsRPnAWHz10w8CX7e7zdwIDAQABox0wGzAOBgNVHQ8BAf8EBAMCB4AwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAg9lYy+dM/8Dnz4COc+XIjEwr4FeC9ExnWaaxH6GlWjJbB94O2L26arrjT2hGl9jUzwd+BdvTGdNCpEjOz3KEq8yJhcu5mFxMskLnHNo1lg5qtydIID6eSgew3vm6d7b3O6pYd+NHdHQsuMw5S5z1m+0TbBQkb6A9RKE1md5/Yw+NymDy+c4NaKsbxepw+HtSOnma/R7TErQ/8qVioIthEpwbqyjgIoGzgOdEFsF9mfkt/5k6rR0WX8xzcro5XSB3T+oecMS54j0+nHyoS96/llRLqFDBUfWn5Cay7pJNWXCnw4jIiBsTBa3q95RVRyMEcDgPwugMXPXGBwNoMOOpuQ==-----END CERTIFICATE-----"
    ordr_idxx            = trim(request( "ordr_idxx" )) ' 주문번호
    good_mny             = trim(request( "good_mny" )) ' 결제 금액
    good_name            = trim(request( "good_name" )) ' 상품명
    pay_method           = trim(request( "pay_method" )) ' 결제수단
    Ret_URL              = trim(request( "Ret_URL" )) ' 리턴 URL
    '==========================================================================
    actionResult         = trim(request( "ActionResult" )) ' pay_method에 매칭되는 값 (인증창 호출 시 필요)
    van_code             = trim(request( "van_code" )) ' (포인트,상품권 인증창 호출 시 필요)


    req_data = "{""site_cd"":""" & site_cd & """,""kcp_cert_info"":""" & kcp_cert_info & """,""ordr_idxx"":""" & ordr_idxx & """,""good_mny"":""" & good_mny & """,""ordr_mony"":""" & ordr_mony & """,""good_name"":""" & good_name & """,""pay_method"":""" & pay_method & """,""Ret_URL"":""" & Ret_URL & """,""escw_used"":""N"",""user_agent"":""""}"

    ' API REQ
    set req = Server.CreateObject("MSXML2.ServerXMLHTTP")
    req.open "POST", target_URL, false
    req.setRequestHeader "Content-Type", "application/json;charset=UTF-8"
    req.send req_data

    ' API RES
    '요청 성공인 경우
    if req.status = 200 then
        res_data = req.ResponseText
    '요청 실패인 경우
    else
        res_data = "http error code : " & req.status
    end if

    set req = nothing

    '==========================================================================
    '거래등록 응답정보
    '--------------------------------------------------------------------------

    res_cd      = "" ' 응답코드
    res_msg     = "" ' 응답메세지
    approvalKey = "" ' 거래등록키
    traceNo     = "" ' 추적번호
    PayUrl      = "" ' 거래등록 PAY URL

    ' RES JSON DATA Parsing
    '' RES JSON DATA Parsing
    set json_data = JSON.parse(res_data)

    res_cd      = json_data.Code
    res_msg     = json_data.Message
    approvalKey = json_data.approvalKey
    traceNo     = json_data.traceNo
    PayUrl      = json_data.PayUrl

%>

  //MOBILE 거래등록 PAGE
  router.get('/mobile_sample/trade_reg', function(req, res) {
  res.render('mobile_sample/trade_reg');
  });

  //MOBILE 거래등록 API
  router.post('/mobile_sample/kcp_api_trade_reg', function(req, res) {
  // 거래등록처리 POST DATA
  var actionResult = f_get_parm(req.body.ActionResult); // pay_method에 매칭되는 값 (인증창 호출 시 필요)
  var van_code = f_get_parm(req.body.van_code); // (포인트,상품권 인증창 호출 시 필요)

  var post_data = {
    actionResult : actionResult,
    van_code : van_code
  };

  // 거래등록 API REQ DATA
  var req_data = {
    site_cd : f_get_parm(req.body.site_cd),
    kcp_cert_info : KCP_CERT_INFO,
    ordr_idxx : f_get_parm(req.body.ordr_idxx),
    good_mny : f_get_parm(req.body.good_mny),
    good_name : f_get_parm(req.body.good_name),
    pay_method : f_get_parm(req.body.pay_method),
    Ret_URL : f_get_parm(req.body.Ret_URL),
    escw_used : 'N',
    user_agent : ''
  };

  // 거래등록 API URL
  // 개발 : https://stg-spl.kcp.co.kr/std/tradeReg/register
  // 운영 : https://spl.kcp.co.kr/std/tradeReg/register
  fetch("https://stg-spl.kcp.co.kr/std/tradeReg/register", {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(req_data),
    })
    // 거래등록 API RES
    .then(response => {
      return response.json();
    })
    .then(data => {
      res.render('mobile_sample/kcp_api_trade_reg', {
        req_data : req_data,
        res_data : data,
        post_data : post_data
    });
  });
});

  #MOBILE 거래등록 PAGE
  @app.route('/mobile_sample/trade_reg')
  def trade_reg():
      return render_template('/mobile_sample/trade_reg.html')

  # MOBILE 거래등록 API
  @app.route('/mobile_sample/kcp_api_trade_reg', methods=['POST'])
  def kcp_api_trade_reg():
  #거래등록처리 POST DATA
  actionResult = f_get_parm(request.form['ActionResult']) # pay_method에 매칭되는 값 (인증창 호출 시 필요)
  van_code = f_get_parm(request.form['van_code']) # (포인트,상품권 인증창 호출 시 필요)

  post_data = {
      'actionResult' : actionResult,
      'van_code': van_code
  }
  # 거래등록 API
  target_URL = 'https://stg-spl.kcp.co.kr/std/tradeReg/register' #개발환경
  #target_URL = 'https://spl.kcp.co.kr/std/tradeReg/register' #운영환경
  headers = {'Content-Type': 'application/json', 'charset': 'UTF-8'}

  # 거래등록 API REQ DATA
  req_data = {
      'site_cd' : f_get_parm(request.form['site_cd']),
      'kcp_cert_info' : KCP_CERT_INFO,
      'ordr_idxx' : f_get_parm(request.form['ordr_idxx']),
      'good_mny' : f_get_parm(request.form['good_mny']),
      'good_name' :f_get_parm(request.form['good_name']),
      'pay_method' : f_get_parm(request.form['pay_method']),
      'Ret_URL' : f_get_parm(request.form['Ret_URL']),
      'escw_used' : 'N',
      'user_agent' : ''
  }

  res = requests.post(target_URL, headers=headers, data=json.dumps(req_data, ensure_ascii=False, indent="\t").encode('utf8'))
  return render_template('mobile_sample/kcp_api_trade_reg.html', res_data=json.loads(res.text), req_data=req_data, post_data=post_data)

결제창 실행 함수

NHN KCP 모바일 결제창 호출에 필요한 함수에 대해 안내합니다.

<!-- 호출 함수 예시-->

1<script type="text/javascript">
2 /* kcp web 결제창 호츨 (변경불가) */
3 function call_pay_form()
4 {
5     var v_frm = document.order_info;
6     var PayUrl = v_frm.PayUrl.value;
7     // 인코딩 방식에 따른 변경 -- Start
8     if(v_frm.encoding_trans == undefined)
9     {
10          v_frm.action = PayUrl;
11      }
12      else
13      {
14          // encoding_trans "UTF-8" 인 경우
15          if(v_frm.encoding_trans.value == "UTF-8")
16          {
17              v_frm.action = PayUrl.substring(0,PayUrl.lastIndexOf("/"))  + "/jsp/encodingFilter/encodingFilter.jsp";
18              v_frm.PayUrl.value = PayUrl;
19          }
20          else
21          {
22              v_frm.action = PayUrl;
23          }
24      }
25
26      if (v_frm.Ret_URL.value == "")
27      {
28          /* Ret_URL값은 현 페이지의 URL 입니다. */
29          alert("연동시 Ret_URL을 반드시 설정하셔야 됩니다.");
30          return false;
31      }
32      else
33      {
34          v_frm.submit();
35      }
36  }
37</script>
Type : text/javascript

Ret_URL 인증데이터 리턴

Ret_URL은 kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL입니다.

Ret_URL을 통해 받으신 인증 데이터를 API URL로 요청 후 승인 처리 진행이 가능합니다.

<!-- Ret_URL 설정 예시 -->

1Ret_URL="http://test.kcp.co.kr/returnpage"

주문요청 파라미터 가이드

필수 파라미터

string5

site_cd

KCP 발급 사이트(상점)코드
테스트코드 : T0000


string40

ordr_idxx

상점관리 주문번호
(유니크한 값 설정 권장)
※ 주문번호는 영문과 숫자로 설정하셔야합니다.


string12

pay_method

결제수단코드(영문 대문자)
- 신용카드 : CARD
- 계좌이체 : BANK
- 가상계좌 : VCNT
- 휴대폰 : MOBX
- 포인트 : TPNT
- 상품권 : GIFT


string4

ActionResult

인증수단(영문 소문자)
- 신용카드 : card
- 계좌이체 : acnt
- 가상계좌 : vcnt
- 휴대폰 : mobx
- 도서문화상품권 : scbl
- 문화상품권 : sccl
- 해피머니상품권 : schm
- OK캐쉬백 : ocb
- 복지포인트 : tpnt


string256

Ret_URL

NHN KCP 모바일 결제 창에서 인증완료 후 인증데이터를 리턴 받을 업체페이지
Ret_URL 뒤의 추가 파라미터는 허용되지 않습니다.
예) http://testpay.kcp.co.kr?test1=1&test2=2
추가 파라미터는 반드시 아래 옵션 파라미터인 param_opt_1 ~ 3 으로 활용하셔야 합니다.


string가변

approval_key

거래인증 코드(수정불가)


string가변

PayUrl

approval_key.js 를 통해 리턴 받은 결제 창 호출 주소
전달 받은 값 그대로 요청


string100

good_name

상품명
※ 고객안내 및 주문정보 관리를 위해 정확한 상품명으로 설정하셔야 합니다.


number12

good_mny

주문요청금액
결제 금액은 숫자 이외의 문자(콤마 등)는 허용 하지 않습니다.
결제창이 닫힌 후 리턴되는 금액정보가 변경되는지 체크


string3

currency

화폐단위
※ 원화 - WON : 410 / 달러 - USD : 840


string20

shop_user_id

쇼핑몰에서 관리하는 회원 ID
※ 유니크한 값으로 입력
기관에 따라 리스크 관리 조치를 위한 쇼핑몰 관리 ID를 필수로 요청
휴대폰 소액결제 - 40Byte
상품권결제 - 20Byte

선택 파라미터

string20

shop_name

cfg 환경설정에 설정된 값


string30

buyr_name

주문자이름


string50

buyr_mail

주문자 이메일


string20

buyr_tel1

주문자 전화번호
하이폰(-)포함 가능


string20

buyr_tel2

주문자 휴대폰번호
하이폰(-)포함 가능


string1000

param_opt_1

NHN KCP 기본 파라미터 외 업체 추가 파라미터


string1000

param_opt_2

NHN KCP 기본 파라미터 외 업체 추가 파라미터


string1000

param_opt_3

NHN KCP 기본 파라미터 외 업체 추가 파라미터

옵션 파라미터

신용카드옵션


number2

quotaopt

50,000원 이상 거래에 대한 할부 옵션. 기본값은 12개월. 0~12의 값을 설정하면 결제 창에 할부 개월 수가 최대값까지 표기됩니다.


string1

kcp_noint

무이자할부 표시기능
“” : 상점관리자 설정에 따름
“Y” : kcp_noint_quota 값에 따라 무이자표시(단, 상점관리자에 설정이 되어야 함)
“N” : 상점관리자 값을 무시하고 일반할부로 처리됨


string256

kcp_noint_quota

무이자할부 표시기능이 Y 일 경우 무이자 설정 값을 결제 창에 표기
무이자 설정은 카드사 별로 설정 가능


string1

used_card_YN

결제 요청 시 원하는 신용카드사 확인
※ 해당 변수 값을 Y로 설정 후 used_card 변수 값에 원하는 신용카드사의 코드를 입력
※ 입력한 신용카드사만 결제 창에 노출


string256

used_card

used_card_YN 변수 값을 Y로 설정한 후 사용하길 원하는 신용카드사의 코드 입력


카드 코드보기 ▼

카드코드카드명 카드코드카드명
CCLG신한CCKJ광주
CCDI현대CCSU수협
CCLO롯데CCJB전북
CCKE외환CCCJ제주
CCSS삼성CCKDKDB산업은행
CCKM국민CCSB저축
CCBC비씨CCCU신협
CCNH농협CCPB우체국
CCHN하나CCSMMG새마을금고
CCCT씨티CCKA카카오뱅크
CCWR우리CMCF마스터
BC81하나비씨CJCFJCB
CCKK케이뱅크
CCUF은련
CVSF비자

string가변

AppUrl

가맹점 APP 호출 URL

가맹점에서 APP으로 연동 시, 타 APP에서 가맹점 APP을 다시 호출하기 위한 값 ( 가맹점 APP 연동 시 필수 )


string2

fix_inst

결제금액이 50,000원 이상일 경우 결제 창에서 선택 할 수 있는 할부 개월 수를 0~12 의 값 중 하나로 고정


<!-- 신용카드 옵션 설정 예제 -->
<input type=”hidden” name=”quotaopt” value=”6”> // 최대 할부 개월수
<input type=”hidden” name=”kcp_noint” value=”Y”> // 무이자할부 표시 여부
<input type=”hidden” name=”kcp_noint_quota” value=”CCBC-02:03:06,CCSS-03:06”>
//BC카드 2,3,6 무이자, 삼성카드 3,6 무이자
<input type=”hidden” name=”used_card_YN” value=”Y”> //원하는 카드사 설정 여부
<input type=”hidden” name=”used_card” value=”CCBC:CCKM:CCSS”> //결제창에 BC,국민,삼성카드만 노출

가상계좌옵션


number8

ipgm_date

발급된 가상계좌에 입금할 예정일 입력
예시 : 20211231 또는 20211231235959


string50

used_bank

NHN KCP에서 제공하는 은행 중 가맹점이 원하는 은행을 선택


string6

vcnt_expire_term_time

가상계좌 유효기간 설정
vcnt_expire_term과 함께 부수적으로 설정되는 변수


<!-- 가상계좌 옵션 설정 예제 -->
<input type=”hidden” name=”ipgm_date” value=”20200131”> // 가상계좌 마감기한
<input type=”hidden” name=”used_bank” value=”BK03:BK04”> // 기업은행, 국민은행만 노출

휴대폰결제 옵션


string1

hp_apply_yn

원하는 통신사만 노출시킬 수 있습니다.
※변수 값을 Y로 설정한 후 hp_commid 변수의 값에 통신사 코드를 입력하면 결제창에 해당 통신사만 노출됩니다.


string2

hp_commid

하나의 통신사만 설정 가능


<!-- 휴대폰폰옵션 설정 예제 -->
<input type=”hidden” name=”hp_apply_yn” value=”Y”>
<input type=”hidden” name=”hp_commid” value=“SKT”> //SKT 통신사만 노출

※ 휴대폰 결제를 NHN KCP 테스트서버로 테스트할 경우에도 실제 결제가 이뤄지기 때문에 결제 테스트를 하신 후 반드시 당월 내에 취소를 하셔야 청구되지 않습니다. (예. 2021년 8월 31일 결제 시 반드시 8월 31일 내에 취소)


추가 옵션 변수


string4

tax_flag

복합 과세 구문
TG03 : 복합과세


number14

comm_tax_mny

과세 승인금액 (공급가액)
과세 금액에 해당하는 공급가액 설정
과세 금액 = good_mny / 1.1


number12

comm_free_mny

비과세 승인금액
비과세 금액에 해당하는 공급가액 설정
비과세 금액 = good_mny – 과세금액 – 부가가치세


number12

comm_vat_mny

부가가치세
부가가치세는 과세금액 공금가액의 10%
부가가치세 = good_mny – 과세금액


string1

disp_tax_yn

계좌이체, 가상계좌를 이용한 현금 결제 시 결제 금액이 1원 이상인 경우, 결제 창에 현금영수증 등록여부를 보여줌
현금영수증 자동등록을 원할 경우 해당 변수를 Y 로 설정. 가상계좌의 경우 입금 완료 후 현금영수증 등록됨

Y : 소득공제용, 지출증빙용 노출
N : 현금영수증 숨기기
R : 소득공제용만 노출
E : 지출증빙용만 노출

※ 현금영수증 자동 등록을 사용하시려면 사전에 가맹점 관리자 페이지 [결제관리 - 현금영수증] 에서 현금영수증 사용 등록을 해주셔야 합니다. 현금영수증 사용 옵션 ‘자진발급(자동)등록, 구매자 요청등록, 사용 안 함’ 중 [구매자 요청등록]이 설정되어 있어야 합니다.

결제(요청/인증리턴) 샘플코드 예시

<%@ page language="java" contentType="text/html;charset=euc-kr"%>
  <%!
      /*
      ==========================================================================
      null 값을 처리하는 메소드
      --------------------------------------------------------------------------
      */
      public String f_get_parm( String val )
      {
          if ( val == null ) val = "";
          return  val;
      }
      /* ============================================================================== */
  %>
  <%
      request.setCharacterEncoding( "euc-kr" );

      // 거래등록 응답 값
      String approvalKey = f_get_parm( request.getParameter( "approvalKey"    ) ); // 거래등록키
      String traceNo     = f_get_parm( request.getParameter( "traceNo"        ) ); // 추적번호
      String PayUrl      = f_get_parm( request.getParameter( "PayUrl"         ) ); // 거래등록 PAY URL
      // 인증시 필요한 결제수단 세팅 값
      String pay_method   = f_get_parm( request.getParameter( "pay_method"   ) ); // 결제수단
      String actionResult = f_get_parm( request.getParameter( "actionResult" ) );
      String van_code     = f_get_parm( request.getParameter( "van_code" ) );
      // 가맹점 리턴 URL
      String Ret_URL      = f_get_parm( request.getParameter( "Ret_URL"     ) );

      /* kcp와  결제 통신후 kcp 서버에서 전송되는 결제 요청 정보 */
      String req_tx          = f_get_parm( request.getParameter( "req_tx"         ) ); // 요청 종류
      String res_cd          = f_get_parm( request.getParameter( "res_cd"         ) ); // 응답 코드
      String site_cd         = f_get_parm( request.getParameter( "site_cd"        ) ); // 사이트코드
      String tran_cd         = f_get_parm( request.getParameter( "tran_cd"        ) ); // 트랜잭션 코드
      String ordr_idxx       = f_get_parm( request.getParameter( "ordr_idxx"      ) ); // 쇼핑몰 주문번호
      String good_name       = f_get_parm( request.getParameter( "good_name"      ) ); // 상품명
      String good_mny        = f_get_parm( request.getParameter( "good_mny"       ) ); // 결제 총금액
      String buyr_name       = f_get_parm( request.getParameter( "buyr_name"      ) ); // 주문자명
      String buyr_tel2       = f_get_parm( request.getParameter( "buyr_tel2"      ) ); // 주문자 핸드폰 번호
      String buyr_mail       = f_get_parm( request.getParameter( "buyr_mail"      ) ); // 주문자 E-mail 주소
      String use_pay_method  = f_get_parm( request.getParameter( "use_pay_method" ) ); // 결제 방법
      String enc_info        = f_get_parm( request.getParameter( "enc_info"       ) ); // 암호화 정보
      String enc_data        = f_get_parm( request.getParameter( "enc_data"       ) ); // 암호화 데이터
      String cash_yn         = f_get_parm( request.getParameter( "cash_yn"        ) );
      String cash_tr_code    = f_get_parm( request.getParameter( "cash_tr_code"   ) );
      /* 기타 파라메터 추가 부분 - Start - */
      String param_opt_1    = f_get_parm( request.getParameter( "param_opt_1"     ) ); // 기타 파라메터 추가 부분
      String param_opt_2    = f_get_parm( request.getParameter( "param_opt_2"     ) ); // 기타 파라메터 추가 부분
      String param_opt_3    = f_get_parm( request.getParameter( "param_opt_3"     ) ); // 기타 파라메터 추가 부분
      /* 기타 파라메터 추가 부분 - End -   */

  %>

  <!DOCTYPE>
  <html>
  <head>
      <meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
      <meta http-equiv="x-ua-compatible" content="ie=edge"/>
      <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=yes, target-densitydpi=medium-dpi">
      <script type="text/javascript">
          /* kcp web 결제창 호츨 (변경불가) */
          function call_pay_form()
          {
            var v_frm = document.order_info;
            var PayUrl = v_frm.PayUrl.value;
            // 인코딩 방식에 따른 변경 -- Start
            if(v_frm.encoding_trans == undefined)
            {
              v_frm.action = PayUrl;
            }
            else
            {
              // encoding_trans "UTF-8" 인 경우
              if(v_frm.encoding_trans.value == "UTF-8")
              {
                v_frm.action = PayUrl.substring(0,PayUrl.lastIndexOf("/"))  + "/jsp/encodingFilter/encodingFilter.jsp";
                v_frm.PayUrl.value = PayUrl;
              }
              else
              {
                v_frm.action = PayUrl;
              }
            }

            if (v_frm.Ret_URL.value == "")
            {
              /* Ret_URL값은 현 페이지의 URL 입니다. */
              alert("연동시 Ret_URL을 반드시 설정하셔야 됩니다.");
              return false;
            }
            else
            {
              v_frm.submit();
            }
          }

          /* kcp 통신을 통해 받은 암호화 정보 체크 후 결제 요청 (변경불가) */
          function chk_pay()
          {
            self.name = "tar_opener";
            var pay_form = document.pay_form;

            if (pay_form.res_cd.value != "" )
            {
              if (pay_form.res_cd.value != "0000" )
              {
                if (pay_form.res_cd.value == "3001")
                {
                  alert("사용자가 취소하였습니다.");
                }
                pay_form.res_cd.value = "";
                location.href = "./trade_reg.html"; // 샘플에서는 거래등록 페이지로 이동
              }
            }
            if (pay_form.enc_info.value)
              pay_form.submit();
          }
      </script>
</head>
<body onload="chk_pay();">
<div class="wrap">
<!-- 주문정보 입력 form : order_info -->
<form name="order_info" method="post">
          <input type="text" name="ordr_idxx" value="<%=ordr_idxx %>" maxlength="40" readonly />
          <input type="text" name="good_name" value="<%=good_name %>" readonly />
          <input type="text" name="good_mny" value="<%=good_mny %>" maxlength="9" readonly />
          <input type="text" name="buyr_name" value="홍길동" />
          <input type="text" name="buyr_tel2" value="010-0000-0000" />
          <input type="text" name="buyr_mail" value="test@test.co.kr" />
          <a href="#none" onclick="call_pay_form();" class="btn-type-2 pc-wd-3">결제요청</a>
          <!-- 공통정보 -->
          <input type="hidden" name="req_tx"          value="pay" />              <!-- 요청 구분 -->
          <input type="hidden" name="shop_name"       value="TEST SITE" />        <!-- 사이트 이름 -->
          <input type="hidden" name="site_cd"         value="<%=site_cd %>" />    <!-- 사이트 코드 -->
          <input type="hidden" name="currency"        value="410"/>               <!-- 통화 코드 -->
          <!-- 인증시 필요한 파라미터(변경불가)-->
          <input type="hidden" name="escw_used"       value="N" />
          <input type="hidden" name="pay_method"      value="<%=pay_method %>" />
          <input type="hidden" name="ActionResult"    value="<%=actionResult %>" />
          <input type="hidden" name="van_code"        value="<%=van_code %>" />
          <!-- 신용카드 설정 -->
          <input type="hidden" name="quotaopt"        value="12"/> <!-- 최대 할부개월수 -->
          <!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
          <input type="hidden" name="Ret_URL"         value="<%=Ret_URL %>" />
          <!-- 가맹점에서 APP으로 연동 시, 타 APP에서 가맹점 APP을 다시 호출하기 위한 값 ( 가맹점 APP 연동 시 필수 ) -->
          <input type="hidden" name="AppUrl"         value="<%=AppUrl %>" />
          <!-- 화면 크기조정 -->
          <input type="hidden" name="tablet_size"     value="1.0 " />
          <!-- 추가 파라미터 ( 가맹점에서 별도의 값전달시 param_opt 를 사용하여 값 전달 ) -->
          <input type="hidden" name="param_opt_1"     value="" />
          <input type="hidden" name="param_opt_2"     value="" />
          <input type="hidden" name="param_opt_3"     value="" />
          <!-- 거래등록 응답값 -->
          <input type="hidden" name="approval_key" id="approval" value="<%=approvalKey%>"/>
          <input type="hidden" name="traceNo"                    value="<%=traceNo%>" />
          <input type="hidden" name="PayUrl"                     value="<%=PayUrl%>" />
          <!-- 인증창 호출 시 한글깨질 경우 encoding 처리 추가 (**인코딩 네임은 대문자)
          <input type="hidden" name="encoding_trans" value="UTF-8" />  -->
</form>
</div>
<form name="pay_form" method="post" action="../kcp_api_pay.jsp">
      <input type="hidden" name="req_tx"         value="<%=req_tx%>" />               <!-- 요청 구분          -->
      <input type="hidden" name="res_cd"         value="<%=res_cd%>" />               <!-- 결과 코드          -->
      <input type="hidden" name="site_cd"        value="<%=site_cd%>" />              <!-- 사이트 코드      -->
      <input type="hidden" name="tran_cd"        value="<%=tran_cd%>" />              <!-- 트랜잭션 코드      -->
      <input type="hidden" name="ordr_idxx"      value="<%=ordr_idxx%>" />            <!-- 주문번호           -->
      <input type="hidden" name="good_mny"       value="<%=good_mny%>" />             <!-- 휴대폰 결제금액    -->
      <input type="hidden" name="good_name"      value="<%=good_name%>" />            <!-- 상품명             -->
      <input type="hidden" name="buyr_name"      value="<%=buyr_name%>" />            <!-- 주문자명           -->
      <input type="hidden" name="buyr_tel2"      value="<%=buyr_tel2%>" />            <!-- 주문자 휴대폰번호  -->
      <input type="hidden" name="buyr_mail"      value="<%=buyr_mail%>" />            <!-- 주문자 E-mail      -->
      <input type="hidden" name="enc_info"       value="<%=enc_info%>" />
      <input type="hidden" name="enc_data"       value="<%=enc_data%>" />
      <input type="hidden" name="use_pay_method" value="<%=use_pay_method%>" />
      <input type="hidden" name="cash_yn"        value="<%=cash_yn%>" />              <!-- 현금영수증 등록여부-->
      <input type="hidden" name="cash_tr_code"   value="<%=cash_tr_code%>" />
      <!-- 추가 파라미터 -->
      <input type="hidden" name="param_opt_1"    value="<%=param_opt_1%>" />
      <input type="hidden" name="param_opt_2"    value="<%=param_opt_2%>" />
      <input type="hidden" name="param_opt_3"    value="<%=param_opt_3%>" />
</form>
<!--//wrap-->
</body>
</html>
<?php
  header("Content-type: text/html; charset=utf-8");
  // 거래등록 응답 값
  $approvalKey    = $_POST[ "approvalKey"    ]; // 거래등록키
  $traceNo        = $_POST[ "traceNo"        ]; // 추적번호
  $PayUrl         = $_POST[ "PayUrl"         ]; // 거래등록 PAY URL
  // 인증시 필요한 결제수단 세팅 값
  $pay_method     = $_POST[ "pay_method"   ]; // 결제수단
  $actionResult   = $_POST[ "actionResult" ];
  $van_code       = $_POST[ "van_code" ];
  // 가맹점 리턴 URL
  $Ret_URL        = $_POST[ "Ret_URL"     ];

  /* kcp와 통신후 kcp 서버에서 전송되는 결제 요청 정보 */
  $req_tx          = $_POST[ "req_tx"         ]; // 요청 종류
  $res_cd          = $_POST[ "res_cd"         ]; // 응답 코드
  $site_cd         = $_POST[ "site_cd"        ]; // 사이트 코드
  $tran_cd         = $_POST[ "tran_cd"        ]; // 트랜잭션 코드
  $ordr_idxx       = $_POST[ "ordr_idxx"      ]; // 쇼핑몰 주문번호
  $good_name       = $_POST[ "good_name"      ]; // 상품명
  $good_mny        = $_POST[ "good_mny"       ]; // 결제 총금액
  $buyr_name       = $_POST[ "buyr_name"      ]; // 주문자명
  $buyr_tel2       = $_POST[ "buyr_tel2"      ]; // 주문자 핸드폰 번호
  $buyr_mail       = $_POST[ "buyr_mail"      ]; // 주문자 E-mail 주소
  $use_pay_method  = $_POST[ "use_pay_method" ]; // 결제 방법
  $enc_info        = $_POST[ "enc_info"       ]; // 암호화 정보
  $enc_data        = $_POST[ "enc_data"       ]; // 암호화 데이터
  $cash_yn         = $_POST[ "cash_yn"        ];
  $cash_tr_code    = $_POST[ "cash_tr_code"   ];
  /* 기타 파라메터 추가 부분 - Start - */
  $param_opt_1    = $_POST[ "param_opt_1"     ]; // 기타 파라메터 추가 부분
  $param_opt_2    = $_POST[ "param_opt_2"     ]; // 기타 파라메터 추가 부분
  $param_opt_3    = $_POST[ "param_opt_3"     ]; // 기타 파라메터 추가 부분
  /* 기타 파라메터 추가 부분 - End -   */

?>

<!DOCTYPE>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
  <meta http-equiv="x-ua-compatible" content="ie=edge"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=yes, target-densitydpi=medium-dpi">
  <script type="text/javascript">
      /* kcp web 결제창 호츨 (변경불가) */
      function call_pay_form()
      {
        var v_frm = document.order_info;
        var PayUrl = v_frm.PayUrl.value;
        // 인코딩 방식에 따른 변경 -- Start
        if(v_frm.encoding_trans == undefined)
        {
          v_frm.action = PayUrl;
        }
        else
        {
          // encoding_trans "UTF-8" 인 경우
          if(v_frm.encoding_trans.value == "UTF-8")
          {
            v_frm.action = PayUrl.substring(0,PayUrl.lastIndexOf("/"))  + "/jsp/encodingFilter/encodingFilter.jsp";
            v_frm.PayUrl.value = PayUrl;
          }
          else
          {
            v_frm.action = PayUrl;
          }
        }

        if (v_frm.Ret_URL.value == "")
        {
          /* Ret_URL값은 현 페이지의 URL 입니다. */
          alert("연동시 Ret_URL을 반드시 설정하셔야 됩니다.");
          return false;
        }
        else
        {
          v_frm.submit();
        }
      }

      /* kcp 통신을 통해 받은 암호화 정보 체크 후 결제 요청 (변경불가) */
      function chk_pay()
      {
        self.name = "tar_opener";
        var pay_form = document.pay_form;

        if (pay_form.res_cd.value != "" )
        {
          if (pay_form.res_cd.value != "0000" )
          {
            if (pay_form.res_cd.value == "3001")
            {
              alert("사용자가 취소하였습니다.");
            }
            pay_form.res_cd.value = "";
            location.href = "./trade_reg.html"; // 샘플에서는 거래등록 페이지로 이동
          }
        }
        if (pay_form.enc_info.value)
          pay_form.submit();
      }
  </script>
</head>
<body onload="chk_pay();">
<div class="wrap">
<!-- 주문정보 입력 form : order_info -->
<form name="order_info" method="post">
          <input type="text" name="ordr_idxx" value="<?=ordr_idxx ?>" maxlength="40" readonly />
          <input type="text" name="good_name" value="<?=good_name ?>" readonly />
          <input type="text" name="good_mny" value="<?=good_mny ?>" maxlength="9" readonly />
          <input type="text" name="buyr_name" value="홍길동" />
          <input type="text" name="buyr_tel2" value="010-0000-0000" />
          <input type="text" name="buyr_mail" value="test@test.co.kr" />
          <a href="#none" onclick="call_pay_form();" class="btn-type-2 pc-wd-3">결제요청</a>
          <!-- 공통정보 -->
          <input type="hidden" name="req_tx"          value="pay" />              <!-- 요청 구분 -->
          <input type="hidden" name="shop_name"       value="TEST SITE" />        <!-- 사이트 이름 -->
          <input type="hidden" name="site_cd"         value="<?=site_cd ?>" />    <!-- 사이트 코드 -->
          <input type="hidden" name="currency"        value="410"/>               <!-- 통화 코드 -->
          <!-- 인증시 필요한 파라미터(변경불가)-->
          <input type="hidden" name="escw_used"       value="N" />
          <input type="hidden" name="pay_method"      value="<?=pay_method ?>" />
          <input type="hidden" name="ActionResult"    value="<?=actionResult ?>" />
          <input type="hidden" name="van_code"        value="<?=van_code ?>" />
          <!-- 신용카드 설정 -->
          <input type="hidden" name="quotaopt"        value="12"/> <!-- 최대 할부개월수 -->
          <!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
          <input type="hidden" name="Ret_URL"         value="<?=Ret_URL ?>" />
          <!-- 화면 크기조정 -->
          <input type="hidden" name="tablet_size"     value="1.0 " />
          <!-- 추가 파라미터 ( 가맹점에서 별도의 값전달시 param_opt 를 사용하여 값 전달 ) -->
          <input type="hidden" name="param_opt_1"     value="" />
          <input type="hidden" name="param_opt_2"     value="" />
          <input type="hidden" name="param_opt_3"     value="" />
          <!-- 거래등록 응답값 -->
          <input type="hidden" name="approval_key" id="approval" value="<?=approvalKey?>"/>
          <input type="hidden" name="traceNo"                    value="<?=traceNo?>" />
          <input type="hidden" name="PayUrl"                     value="<?=PayUrl?>" />
          <!-- 인증창 호출 시 한글깨질 경우 encoding 처리 추가 (**인코딩 네임은 대문자)
          <input type="hidden" name="encoding_trans" value="UTF-8" />  -->
</form>
</div>
<form name="pay_form" method="post" action="../kcp_api_pay.jsp">
      <input type="hidden" name="req_tx"         value="<?=req_tx?>" />               <!-- 요청 구분          -->
      <input type="hidden" name="res_cd"         value="<?=res_cd?>" />               <!-- 결과 코드          -->
      <input type="hidden" name="site_cd"        value="<?=site_cd?>" />              <!-- 사이트 코드      -->
      <input type="hidden" name="tran_cd"        value="<?=tran_cd?>" />              <!-- 트랜잭션 코드      -->
      <input type="hidden" name="ordr_idxx"      value="<?=ordr_idxx?>" />            <!-- 주문번호           -->
      <input type="hidden" name="good_mny"       value="<?=good_mny?>" />             <!-- 휴대폰 결제금액    -->
      <input type="hidden" name="good_name"      value="<?=good_name?>" />            <!-- 상품명             -->
      <input type="hidden" name="buyr_name"      value="<?=buyr_name?>" />            <!-- 주문자명           -->
      <input type="hidden" name="buyr_tel2"      value="<?=buyr_tel2?>" />            <!-- 주문자 휴대폰번호  -->
      <input type="hidden" name="buyr_mail"      value="<?=buyr_mail?>" />            <!-- 주문자 E-mail      -->
      <input type="hidden" name="enc_info"       value="<?=enc_info?>" />
      <input type="hidden" name="enc_data"       value="<?=enc_data?>" />
      <input type="hidden" name="use_pay_method" value="<?=use_pay_method?>" />
      <input type="hidden" name="cash_yn"        value="<?=cash_yn?>" />              <!-- 현금영수증 등록여부-->
      <input type="hidden" name="cash_tr_code"   value="<?=cash_tr_code?>" />
      <!-- 추가 파라미터 -->
      <input type="hidden" name="param_opt_1"    value="<?=param_opt_1?>" />
      <input type="hidden" name="param_opt_2"    value="<?=param_opt_2?>" />
      <input type="hidden" name="param_opt_3"    value="<?=param_opt_3?>" />
</form>
<!--//wrap-->
</body>
</html>
<%@ Page Language="C#" %>
<%
    // 거래등록 응답 값
    String approvalKey = Request.Form[ "approvalKey"    ]; // 거래등록키
    String traceNo     = Request.Form[ "traceNo"        ]; // 추적번호
    String PayUrl      = Request.Form[ "PayUrl"         ]; // 거래등록 PAY URL
    // 인증시 필요한 결제수단 세팅 값
    String pay_method   = Request.Form[ "pay_method"   ]; // 결제수단
    String actionResult = Request.Form[ "actionResult" ];
    String van_code     = Request.Form[ "van_code" ];
    // 가맹점 리턴 URL
    String Ret_URL      = Request.Form[ "Ret_URL"     ];

    /* kcp와  결제 통신후 kcp 서버에서 전송되는 결제 요청 정보 */
    String req_tx          = Request.Form[ "req_tx"         ]; // 요청 종류
    String res_cd          = Request.Form[ "res_cd"         ]; // 응답 코드
    String site_cd         = Request.Form[ "site_cd"        ]; // 사이트코드
    String tran_cd         = Request.Form[ "tran_cd"        ]; // 트랜잭션 코드
    String ordr_idxx       = Request.Form[ "ordr_idxx"      ]; // 쇼핑몰 주문번호
    String good_name       = Request.Form[ "good_name"      ]; // 상품명
    String good_mny        = Request.Form[ "good_mny"       ]; // 결제 총금액
    String buyr_name       = Request.Form[ "buyr_name"      ]; // 주문자명
    String buyr_tel2       = Request.Form[ "buyr_tel2"      ]; // 주문자 핸드폰 번호
    String buyr_mail       = Request.Form[ "buyr_mail"      ]; // 주문자 E-mail 주소
    String use_pay_method  = Request.Form[ "use_pay_method" ]; // 결제 방법
    String enc_info        = Request.Form[ "enc_info"       ]; // 암호화 정보
    String enc_data        = Request.Form[ "enc_data"       ]; // 암호화 데이터
    String cash_yn         = Request.Form[ "cash_yn"        ];
    String cash_tr_code    = Request.Form[ "cash_tr_code"   ];
    /* 기타 파라메터 추가 부분 - Start - */
    String param_opt_1    = Request.Form[ "param_opt_1"     ]; // 기타 파라메터 추가 부분
    String param_opt_2    = Request.Form[ "param_opt_2"     ]; // 기타 파라메터 추가 부분
    String param_opt_3    = Request.Form[ "param_opt_3"     ]; // 기타 파라메터 추가 부분
    /* 기타 파라메터 추가 부분 - End -   */

%>

<!DOCTYPE>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
  <meta http-equiv="x-ua-compatible" content="ie=edge"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=yes, target-densitydpi=medium-dpi">
  <script type="text/javascript">
      /* kcp web 결제창 호츨 (변경불가) */
      function call_pay_form()
      {
        var v_frm = document.order_info;
        var PayUrl = v_frm.PayUrl.value;
        // 인코딩 방식에 따른 변경 -- Start
        if(v_frm.encoding_trans == undefined)
        {
          v_frm.action = PayUrl;
        }
        else
        {
          // encoding_trans "UTF-8" 인 경우
          if(v_frm.encoding_trans.value == "UTF-8")
          {
            v_frm.action = PayUrl.substring(0,PayUrl.lastIndexOf("/"))  + "/jsp/encodingFilter/encodingFilter.jsp";
            v_frm.PayUrl.value = PayUrl;
          }
          else
          {
            v_frm.action = PayUrl;
          }
        }

        if (v_frm.Ret_URL.value == "")
        {
          /* Ret_URL값은 현 페이지의 URL 입니다. */
          alert("연동시 Ret_URL을 반드시 설정하셔야 됩니다.");
          return false;
        }
        else
        {
          v_frm.submit();
        }
      }

      /* kcp 통신을 통해 받은 암호화 정보 체크 후 결제 요청 (변경불가) */
      function chk_pay()
      {
        self.name = "tar_opener";
        var pay_form = document.pay_form;

        if (pay_form.res_cd.value != "" )
        {
          if (pay_form.res_cd.value != "0000" )
          {
            if (pay_form.res_cd.value == "3001")
            {
              alert("사용자가 취소하였습니다.");
            }
            pay_form.res_cd.value = "";
            location.href = "./trade_reg.html"; // 샘플에서는 거래등록 페이지로 이동
          }
        }
        if (pay_form.enc_info.value)
          pay_form.submit();
      }
  </script>
</head>
<body onload="chk_pay();">
<div class="wrap">
<!-- 주문정보 입력 form : order_info -->
<form name="order_info" method="post">
          <input type="text" name="ordr_idxx" value="<%=ordr_idxx %>" maxlength="40" readonly />
          <input type="text" name="good_name" value="<%=good_name %>" readonly />
          <input type="text" name="good_mny" value="<%=good_mny %>" maxlength="9" readonly />
          <input type="text" name="buyr_name" value="홍길동" />
          <input type="text" name="buyr_tel2" value="010-0000-0000" />
          <input type="text" name="buyr_mail" value="test@test.co.kr" />
          <a href="#none" onclick="call_pay_form();" class="btn-type-2 pc-wd-3">결제요청</a>
          <!-- 공통정보 -->
          <input type="hidden" name="req_tx"          value="pay" />              <!-- 요청 구분 -->
          <input type="hidden" name="shop_name"       value="TEST SITE" />        <!-- 사이트 이름 -->
          <input type="hidden" name="site_cd"         value="<%=site_cd %>" />    <!-- 사이트 코드 -->
          <input type="hidden" name="currency"        value="410"/>               <!-- 통화 코드 -->
          <!-- 인증시 필요한 파라미터(변경불가)-->
          <input type="hidden" name="escw_used"       value="N" />
          <input type="hidden" name="pay_method"      value="<%=pay_method %>" />
          <input type="hidden" name="ActionResult"    value="<%=actionResult %>" />
          <input type="hidden" name="van_code"        value="<%=van_code %>" />
          <!-- 신용카드 설정 -->
          <input type="hidden" name="quotaopt"        value="12"/> <!-- 최대 할부개월수 -->
          <!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
          <input type="hidden" name="Ret_URL"         value="<%=Ret_URL %>" />
          <!-- 화면 크기조정 -->
          <input type="hidden" name="tablet_size"     value="1.0 " />
          <!-- 추가 파라미터 ( 가맹점에서 별도의 값전달시 param_opt 를 사용하여 값 전달 ) -->
          <input type="hidden" name="param_opt_1"     value="" />
          <input type="hidden" name="param_opt_2"     value="" />
          <input type="hidden" name="param_opt_3"     value="" />
          <!-- 거래등록 응답값 -->
          <input type="hidden" name="approval_key" id="approval" value="<%=approvalKey%>"/>
          <input type="hidden" name="traceNo"                    value="<%=traceNo%>" />
          <input type="hidden" name="PayUrl"                     value="<%=PayUrl%>" />
          <!-- 인증창 호출 시 한글깨질 경우 encoding 처리 추가 (**인코딩 네임은 대문자)
          <input type="hidden" name="encoding_trans" value="UTF-8" />  -->
</form>
</div>
<form name="pay_form" method="post" action="../kcp_api_pay.jsp">
      <input type="hidden" name="req_tx"         value="<%=req_tx%>" />               <!-- 요청 구분          -->
      <input type="hidden" name="res_cd"         value="<%=res_cd%>" />               <!-- 결과 코드          -->
      <input type="hidden" name="site_cd"        value="<%=site_cd%>" />              <!-- 사이트 코드      -->
      <input type="hidden" name="tran_cd"        value="<%=tran_cd%>" />              <!-- 트랜잭션 코드      -->
      <input type="hidden" name="ordr_idxx"      value="<%=ordr_idxx%>" />            <!-- 주문번호           -->
      <input type="hidden" name="good_mny"       value="<%=good_mny%>" />             <!-- 휴대폰 결제금액    -->
      <input type="hidden" name="good_name"      value="<%=good_name%>" />            <!-- 상품명             -->
      <input type="hidden" name="buyr_name"      value="<%=buyr_name%>" />            <!-- 주문자명           -->
      <input type="hidden" name="buyr_tel2"      value="<%=buyr_tel2%>" />            <!-- 주문자 휴대폰번호  -->
      <input type="hidden" name="buyr_mail"      value="<%=buyr_mail%>" />            <!-- 주문자 E-mail      -->
      <input type="hidden" name="enc_info"       value="<%=enc_info%>" />
      <input type="hidden" name="enc_data"       value="<%=enc_data%>" />
      <input type="hidden" name="use_pay_method" value="<%=use_pay_method%>" />
      <input type="hidden" name="cash_yn"        value="<%=cash_yn%>" />              <!-- 현금영수증 등록여부-->
      <input type="hidden" name="cash_tr_code"   value="<%=cash_tr_code%>" />
      <!-- 추가 파라미터 -->
      <input type="hidden" name="param_opt_1"    value="<%=param_opt_1%>" />
      <input type="hidden" name="param_opt_2"    value="<%=param_opt_2%>" />
      <input type="hidden" name="param_opt_3"    value="<%=param_opt_3%>" />
</form>
<!--//wrap-->
</body>
</html>
<!--#include file="../lib/json2.asp"-->
<%
    Response.CharSet = "UTF-8"

    ' 거래등록 응답 값
    approvalKey = trim(request( "approvalKey"    ) ) ' 거래등록키
    traceNo     = trim(request( "traceNo"        ) ) ' 추적번호
    PayUrl      = trim(request( "PayUrl"         ) ) ' 거래등록 PAY URL
    ' 인증시 필요한 결제수단 세팅 값
    pay_method   = trim(request( "pay_method"   ) ) ' 결제수단
    actionResult = trim(request( "actionResult" ) )
    van_code     = trim(request( "van_code" ) )
    ' 가맹점 리턴 URL
    Ret_URL      = trim(request( "Ret_URL"     ) )

    ' kcp와  결제 통신후 kcp 서버에서 전송되는 결제 요청 정보 '
    req_tx          = trim(request( "req_tx"         ) ) ' 요청 종류
    res_cd          = trim(request( "res_cd"         ) ) ' 응답 코드
    site_cd         = trim(request( "site_cd"        ) ) ' 사이트코드
    tran_cd         = trim(request( "tran_cd"        ) ) ' 트랜잭션 코드
    ordr_idxx       = trim(request( "ordr_idxx"      ) ) ' 쇼핑몰 주문번호
    good_name       = trim(request( "good_name"      ) ) ' 상품명
    good_mny        = trim(request( "good_mny"       ) ) ' 결제 총금액
    buyr_name       = trim(request( "buyr_name"      ) ) ' 주문자명
    buyr_tel2       = trim(request( "buyr_tel2"      ) ) ' 주문자 핸드폰 번호
    buyr_mail       = trim(request( "buyr_mail"      ) ) ' 주문자 E-mail 주소
    use_pay_method  = trim(request( "use_pay_method" ) ) ' 결제 방법
    enc_info        = trim(request( "enc_info"       ) ) ' 암호화 정보
    enc_data        = trim(request( "enc_data"       ) ) ' 암호화 데이터
    cash_yn         = trim(request( "cash_yn"        ) )
    cash_tr_code    = trim(request( "cash_tr_code"   ) )
    ' 기타 파라메터 추가 부분 - Start - '
    param_opt_1    = trim(request( "param_opt_1"     ) ) ' 기타 파라메터 추가 부분
    param_opt_2    = trim(request( "param_opt_2"     ) ) ' 기타 파라메터 추가 부분
    param_opt_3    = trim(request( "param_opt_3"     ) ) ' 기타 파라메터 추가 부분
    ' 기타 파라메터 추가 부분 - End -   '

%>

<!DOCTYPE>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
  <meta http-equiv="x-ua-compatible" content="ie=edge"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=yes, target-densitydpi=medium-dpi">
  <script type="text/javascript">
      /* kcp web 결제창 호츨 (변경불가) */
      function call_pay_form()
      {
        var v_frm = document.order_info;
        var PayUrl = v_frm.PayUrl.value;
        // 인코딩 방식에 따른 변경 -- Start
        if(v_frm.encoding_trans == undefined)
        {
          v_frm.action = PayUrl;
        }
        else
        {
          // encoding_trans "UTF-8" 인 경우
          if(v_frm.encoding_trans.value == "UTF-8")
          {
            v_frm.action = PayUrl.substring(0,PayUrl.lastIndexOf("/"))  + "/jsp/encodingFilter/encodingFilter.jsp";
            v_frm.PayUrl.value = PayUrl;
          }
          else
          {
            v_frm.action = PayUrl;
          }
        }

        if (v_frm.Ret_URL.value == "")
        {
          /* Ret_URL값은 현 페이지의 URL 입니다. */
          alert("연동시 Ret_URL을 반드시 설정하셔야 됩니다.");
          return false;
        }
        else
        {
          v_frm.submit();
        }
      }

      /* kcp 통신을 통해 받은 암호화 정보 체크 후 결제 요청 (변경불가) */
      function chk_pay()
      {
        self.name = "tar_opener";
        var pay_form = document.pay_form;

        if (pay_form.res_cd.value != "" )
        {
          if (pay_form.res_cd.value != "0000" )
          {
            if (pay_form.res_cd.value == "3001")
            {
              alert("사용자가 취소하였습니다.");
            }
            pay_form.res_cd.value = "";
            location.href = "./trade_reg.html"; // 샘플에서는 거래등록 페이지로 이동
          }
        }
        if (pay_form.enc_info.value)
          pay_form.submit();
      }
  </script>
</head>
<body onload="chk_pay();">
<div class="wrap">
<!-- 주문정보 입력 form : order_info -->
<form name="order_info" method="post">
          <input type="text" name="ordr_idxx" value="<%=ordr_idxx %>" maxlength="40" readonly />
          <input type="text" name="good_name" value="<%=good_name %>" readonly />
          <input type="text" name="good_mny" value="<%=good_mny %>" maxlength="9" readonly />
          <input type="text" name="buyr_name" value="홍길동" />
          <input type="text" name="buyr_tel2" value="010-0000-0000" />
          <input type="text" name="buyr_mail" value="test@test.co.kr" />
          <a href="#none" onclick="call_pay_form();" class="btn-type-2 pc-wd-3">결제요청</a>
          <!-- 공통정보 -->
          <input type="hidden" name="req_tx"          value="pay" />              <!-- 요청 구분 -->
          <input type="hidden" name="shop_name"       value="TEST SITE" />        <!-- 사이트 이름 -->
          <input type="hidden" name="site_cd"         value="<%=site_cd %>" />    <!-- 사이트 코드 -->
          <input type="hidden" name="currency"        value="410"/>               <!-- 통화 코드 -->
          <!-- 인증시 필요한 파라미터(변경불가)-->
          <input type="hidden" name="escw_used"       value="N" />
          <input type="hidden" name="pay_method"      value="<%=pay_method %>" />
          <input type="hidden" name="ActionResult"    value="<%=actionResult %>" />
          <input type="hidden" name="van_code"        value="<%=van_code %>" />
          <!-- 신용카드 설정 -->
          <input type="hidden" name="quotaopt"        value="12"/> <!-- 최대 할부개월수 -->
          <!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
          <input type="hidden" name="Ret_URL"         value="<%=Ret_URL %>" />
          <!-- 화면 크기조정 -->
          <input type="hidden" name="tablet_size"     value="1.0 " />
          <!-- 추가 파라미터 ( 가맹점에서 별도의 값전달시 param_opt 를 사용하여 값 전달 ) -->
          <input type="hidden" name="param_opt_1"     value="" />
          <input type="hidden" name="param_opt_2"     value="" />
          <input type="hidden" name="param_opt_3"     value="" />
          <!-- 거래등록 응답값 -->
          <input type="hidden" name="approval_key" id="approval" value="<%=approvalKey%>"/>
          <input type="hidden" name="traceNo"                    value="<%=traceNo%>" />
          <input type="hidden" name="PayUrl"                     value="<%=PayUrl%>" />
          <!-- 인증창 호출 시 한글깨질 경우 encoding 처리 추가 (**인코딩 네임은 대문자)
          <input type="hidden" name="encoding_trans" value="UTF-8" />  -->
</form>
</div>
<form name="pay_form" method="post" action="../kcp_api_pay.jsp">
      <input type="hidden" name="req_tx"         value="<%=req_tx%>" />               <!-- 요청 구분          -->
      <input type="hidden" name="res_cd"         value="<%=res_cd%>" />               <!-- 결과 코드          -->
      <input type="hidden" name="site_cd"        value="<%=site_cd%>" />              <!-- 사이트 코드      -->
      <input type="hidden" name="tran_cd"        value="<%=tran_cd%>" />              <!-- 트랜잭션 코드      -->
      <input type="hidden" name="ordr_idxx"      value="<%=ordr_idxx%>" />            <!-- 주문번호           -->
      <input type="hidden" name="good_mny"       value="<%=good_mny%>" />             <!-- 휴대폰 결제금액    -->
      <input type="hidden" name="good_name"      value="<%=good_name%>" />            <!-- 상품명             -->
      <input type="hidden" name="buyr_name"      value="<%=buyr_name%>" />            <!-- 주문자명           -->
      <input type="hidden" name="buyr_tel2"      value="<%=buyr_tel2%>" />            <!-- 주문자 휴대폰번호  -->
      <input type="hidden" name="buyr_mail"      value="<%=buyr_mail%>" />            <!-- 주문자 E-mail      -->
      <input type="hidden" name="enc_info"       value="<%=enc_info%>" />
      <input type="hidden" name="enc_data"       value="<%=enc_data%>" />
      <input type="hidden" name="use_pay_method" value="<%=use_pay_method%>" />
      <input type="hidden" name="cash_yn"        value="<%=cash_yn%>" />              <!-- 현금영수증 등록여부-->
      <input type="hidden" name="cash_tr_code"   value="<%=cash_tr_code%>" />
      <!-- 추가 파라미터 -->
      <input type="hidden" name="param_opt_1"    value="<%=param_opt_1%>" />
      <input type="hidden" name="param_opt_2"    value="<%=param_opt_2%>" />
      <input type="hidden" name="param_opt_3"    value="<%=param_opt_3%>" />
</form>
<!--//wrap-->
</body>
</html>
<!DOCTYPE>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
  <meta http-equiv="x-ua-compatible" content="ie=edge"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=yes, target-densitydpi=medium-dpi">
  <script type="text/javascript">
      /* kcp web 결제창 호츨 (변경불가) */
      function call_pay_form()
      {
        var v_frm = document.order_info;
        var PayUrl = v_frm.PayUrl.value;
        // 인코딩 방식에 따른 변경 -- Start
        if(v_frm.encoding_trans == undefined)
        {
          v_frm.action = PayUrl;
        }
        else
        {
          // encoding_trans "UTF-8" 인 경우
          if(v_frm.encoding_trans.value == "UTF-8")
          {
            v_frm.action = PayUrl.substring(0,PayUrl.lastIndexOf("/"))  + "/jsp/encodingFilter/encodingFilter.jsp";
            v_frm.PayUrl.value = PayUrl;
          }
          else
          {
            v_frm.action = PayUrl;
          }
        }

        if (v_frm.Ret_URL.value == "")
        {
          /* Ret_URL값은 현 페이지의 URL 입니다. */
          alert("연동시 Ret_URL을 반드시 설정하셔야 됩니다.");
          return false;
        }
        else
        {
          v_frm.submit();
        }
      }

      /* kcp 통신을 통해 받은 암호화 정보 체크 후 결제 요청 (변경불가) */
      function chk_pay()
      {
        self.name = "tar_opener";
        var pay_form = document.pay_form;

        if (pay_form.res_cd.value != "" )
        {
          if (pay_form.res_cd.value != "0000" )
          {
            if (pay_form.res_cd.value == "3001")
            {
              alert("사용자가 취소하였습니다.");
            }
            pay_form.res_cd.value = "";
            location.href = "./trade_reg.html"; // 샘플에서는 거래등록 페이지로 이동
          }
        }
        if (pay_form.enc_info.value)
          pay_form.submit();
      }
  </script>
</head>
<body onload="chk_pay();">
<div class="wrap">
<!-- 주문정보 입력 form : order_info -->
<form name="order_info" method="post">
          <input type="text" name="ordr_idxx" value="<%=ordr_idxx %>" maxlength="40" readonly />
          <input type="text" name="good_name" value="<%=good_name %>" readonly />
          <input type="text" name="good_mny" value="<%=good_mny %>" maxlength="9" readonly />
          <input type="text" name="buyr_name" value="홍길동" />
          <input type="text" name="buyr_tel2" value="010-0000-0000" />
          <input type="text" name="buyr_mail" value="test@test.co.kr" />
          <a href="#none" onclick="call_pay_form();" class="btn-type-2 pc-wd-3">결제요청</a>
          <!-- 공통정보 -->
          <input type="hidden" name="req_tx"          value="pay" />              <!-- 요청 구분 -->
          <input type="hidden" name="shop_name"       value="TEST SITE" />        <!-- 사이트 이름 -->
          <input type="hidden" name="site_cd"         value="<%=site_cd %>" />    <!-- 사이트 코드 -->
          <input type="hidden" name="currency"        value="410"/>               <!-- 통화 코드 -->
          <!-- 인증시 필요한 파라미터(변경불가)-->
          <input type="hidden" name="escw_used"       value="N" />
          <input type="hidden" name="pay_method"      value="<%=pay_method %>" />
          <input type="hidden" name="ActionResult"    value="<%=actionResult %>" />
          <input type="hidden" name="van_code"        value="<%=van_code %>" />
          <!-- 신용카드 설정 -->
          <input type="hidden" name="quotaopt"        value="12"/> <!-- 최대 할부개월수 -->
          <!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
          <input type="hidden" name="Ret_URL"         value="<%=Ret_URL %>" />
          <!-- 화면 크기조정 -->
          <input type="hidden" name="tablet_size"     value="1.0 " />
          <!-- 추가 파라미터 ( 가맹점에서 별도의 값전달시 param_opt 를 사용하여 값 전달 ) -->
          <input type="hidden" name="param_opt_1"     value="" />
          <input type="hidden" name="param_opt_2"     value="" />
          <input type="hidden" name="param_opt_3"     value="" />
          <!-- 거래등록 응답값 -->
          <input type="hidden" name="approval_key" id="approval" value="<%=approvalKey%>"/>
          <input type="hidden" name="traceNo"                    value="<%=traceNo%>" />
          <input type="hidden" name="PayUrl"                     value="<%=PayUrl%>" />
          <!-- 인증창 호출 시 한글깨질 경우 encoding 처리 추가 (**인코딩 네임은 대문자)
          <input type="hidden" name="encoding_trans" value="UTF-8" />  -->
</form>
</div>
<form name="pay_form" method="post" action="../kcp_api_pay.jsp">
      <input type="hidden" name="req_tx"         value="<%=req_tx%>" />               <!-- 요청 구분          -->
      <input type="hidden" name="res_cd"         value="<%=res_cd%>" />               <!-- 결과 코드          -->
      <input type="hidden" name="site_cd"        value="<%=site_cd%>" />              <!-- 사이트 코드      -->
      <input type="hidden" name="tran_cd"        value="<%=tran_cd%>" />              <!-- 트랜잭션 코드      -->
      <input type="hidden" name="ordr_idxx"      value="<%=ordr_idxx%>" />            <!-- 주문번호           -->
      <input type="hidden" name="good_mny"       value="<%=good_mny%>" />             <!-- 휴대폰 결제금액    -->
      <input type="hidden" name="good_name"      value="<%=good_name%>" />            <!-- 상품명             -->
      <input type="hidden" name="buyr_name"      value="<%=buyr_name%>" />            <!-- 주문자명           -->
      <input type="hidden" name="buyr_tel2"      value="<%=buyr_tel2%>" />            <!-- 주문자 휴대폰번호  -->
      <input type="hidden" name="buyr_mail"      value="<%=buyr_mail%>" />            <!-- 주문자 E-mail      -->
      <input type="hidden" name="enc_info"       value="<%=enc_info%>" />
      <input type="hidden" name="enc_data"       value="<%=enc_data%>" />
      <input type="hidden" name="use_pay_method" value="<%=use_pay_method%>" />
      <input type="hidden" name="cash_yn"        value="<%=cash_yn%>" />              <!-- 현금영수증 등록여부-->
      <input type="hidden" name="cash_tr_code"   value="<%=cash_tr_code%>" />
      <!-- 추가 파라미터 -->
      <input type="hidden" name="param_opt_1"    value="<%=param_opt_1%>" />
      <input type="hidden" name="param_opt_2"    value="<%=param_opt_2%>" />
      <input type="hidden" name="param_opt_3"    value="<%=param_opt_3%>" />
</form>
<!--//wrap-->
</body>
</html>
<!DOCTYPE>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
  <meta http-equiv="x-ua-compatible" content="ie=edge"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=yes, target-densitydpi=medium-dpi">
  <script type="text/javascript">
      /* kcp web 결제창 호츨 (변경불가) */
      function call_pay_form()
      {
        var v_frm = document.order_info;
        var PayUrl = v_frm.PayUrl.value;
        // 인코딩 방식에 따른 변경 -- Start
        if(v_frm.encoding_trans == undefined)
        {
          v_frm.action = PayUrl;
        }
        else
        {
          // encoding_trans "UTF-8" 인 경우
          if(v_frm.encoding_trans.value == "UTF-8")
          {
            v_frm.action = PayUrl.substring(0,PayUrl.lastIndexOf("/"))  + "/jsp/encodingFilter/encodingFilter.jsp";
            v_frm.PayUrl.value = PayUrl;
          }
          else
          {
            v_frm.action = PayUrl;
          }
        }

        if (v_frm.Ret_URL.value == "")
        {
          /* Ret_URL값은 현 페이지의 URL 입니다. */
          alert("연동시 Ret_URL을 반드시 설정하셔야 됩니다.");
          return false;
        }
        else
        {
          v_frm.submit();
        }
      }

      /* kcp 통신을 통해 받은 암호화 정보 체크 후 결제 요청 (변경불가) */
      function chk_pay()
      {
        self.name = "tar_opener";
        var pay_form = document.pay_form;

        if (pay_form.res_cd.value != "" )
        {
          if (pay_form.res_cd.value != "0000" )
          {
            if (pay_form.res_cd.value == "3001")
            {
              alert("사용자가 취소하였습니다.");
            }
            pay_form.res_cd.value = "";
            location.href = "./trade_reg.html"; // 샘플에서는 거래등록 페이지로 이동
          }
        }
        if (pay_form.enc_info.value)
          pay_form.submit();
      }
  </script>
</head>
<body onload="chk_pay();">
<div class="wrap">
<!-- 주문정보 입력 form : order_info -->
<form name="order_info" method="post">
          <input type="text" name="ordr_idxx" value="" maxlength="40" readonly />
          <input type="text" name="good_name" value="" readonly />
          <input type="text" name="good_mny" value="" maxlength="9" readonly />
          <input type="text" name="buyr_name" value="홍길동" />
          <input type="text" name="buyr_tel2" value="010-0000-0000" />
          <input type="text" name="buyr_mail" value="test@test.co.kr" />
          <a href="#none" onclick="call_pay_form();" class="btn-type-2 pc-wd-3">결제요청</a>
          <!-- 공통정보 -->
          <input type="hidden" name="req_tx"          value="pay" />              <!-- 요청 구분 -->
          <input type="hidden" name="shop_name"       value="TEST SITE" />        <!-- 사이트 이름 -->
          <input type="hidden" name="site_cd"         value="" >    <!-- 사이트 코드 -->
          <input type="hidden" name="currency"        value="410"/>               <!-- 통화 코드 -->
          <!-- 인증시 필요한 파라미터(변경불가)-->
          <input type="hidden" name="escw_used"       value="N" />
          <input type="hidden" name="pay_method"      value="" />
          <input type="hidden" name="ActionResult"    value="" />
          <input type="hidden" name="van_code"        value="" />
          <!-- 신용카드 설정 -->
          <input type="hidden" name="quotaopt"        value="12"/> <!-- 최대 할부개월수 -->
          <!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
          <input type="hidden" name="Ret_URL"         value="" />
          <!-- 화면 크기조정 -->
          <input type="hidden" name="tablet_size"     value="1.0 " />
          <!-- 추가 파라미터 ( 가맹점에서 별도의 값전달시 param_opt 를 사용하여 값 전달 ) -->
          <input type="hidden" name="param_opt_1"     value="" />
          <input type="hidden" name="param_opt_2"     value="" />
          <input type="hidden" name="param_opt_3"     value="" />
          <!-- 거래등록 응답값 -->
          <input type="hidden" name="approval_key" id="approval" value=""/>
          <input type="hidden" name="traceNo"                    value="" />
          <input type="hidden" name="PayUrl"                     value="" />
          <!-- 인증창 호출 시 한글깨질 경우 encoding 처리 추가 (**인코딩 네임은 대문자)
          <input type="hidden" name="encoding_trans" value="UTF-8" />  -->
</form>
</div>
<form name="pay_form" method="post" action="../kcp_api_pay.jsp">
      <input type="hidden" name="req_tx"         value="" />               <!-- 요청 구분          -->
      <input type="hidden" name="res_cd"         value="" />               <!-- 결과 코드          -->
      <input type="hidden" name="site_cd"        value="" />              <!-- 사이트 코드      -->
      <input type="hidden" name="tran_cd"        value="" />              <!-- 트랜잭션 코드      -->
      <input type="hidden" name="ordr_idxx"      value="" />            <!-- 주문번호           -->
      <input type="hidden" name="good_mny"       value="" />             <!-- 휴대폰 결제금액    -->
      <input type="hidden" name="good_name"      value="" />            <!-- 상품명             -->
      <input type="hidden" name="buyr_name"      value="" />            <!-- 주문자명           -->
      <input type="hidden" name="buyr_tel2"      value="" />            <!-- 주문자 휴대폰번호  -->
      <input type="hidden" name="buyr_mail"      value="" />            <!-- 주문자 E-mail      -->
      <input type="hidden" name="enc_info"       value="" />
      <input type="hidden" name="enc_data"       value="" />
      <input type="hidden" name="use_pay_method" value="" />
      <input type="hidden" name="cash_yn"        value="" />              <!-- 현금영수증 등록여부-->
      <input type="hidden" name="cash_tr_code"   value="" />
      <!-- 추가 파라미터 -->
      <input type="hidden" name="param_opt_1"    value="" />
      <input type="hidden" name="param_opt_2"    value="" />
      <input type="hidden" name="param_opt_3"    value="" />
</form>
<!--//wrap-->
</body>
</html>

인증파라미터 가이드

리턴 파라미터

string가변

enc_data

결제창 인증결과 암호화 정보
통합 결제 창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.


string가변

enc_info

결제창 인증결과 암호화 정보
통합 결제 창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.


string가변

tran_cd

결제요청타입
통합 결제 창에서 처리하여 전달받는 상태 코드 값
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.
※ 해당 값은 KCP 시스템에서 추가 및 변경이 되는 값으로 상점에서 자체 관리가 불가한 값입니다.

인증 리턴 데이터

<!-- 인증 리턴 데이터 수신 예시 -->

1<input type="hidden" name="enc_info"        value=""/>
2<input type="hidden" name="enc_data"        value=""/>
3<input type="hidden" name="tran_cd"         value=""/>

승인요청하기

인증데이터를 API URL로 승인요청 하세요.

<!-- API 호출 -->

1https://spl.kcp.co.kr/gw/enc/v1/payment

테스트 환경 : https://stg-spl.kcp.co.kr/gw/enc/v1/payment


승인요청데이터

승인요청 데이터는 Json String 전송방식으로 요청 하세요.

결제정보 검증을 위해 실제 결제되야할 ordr_mony, ordr_no, pay_type 을 넘겨주세요. 결제창에서 처리된 정보와 비교하여 검증해드립니다.

* ordr_no의 경우 결제창으로 전달하는 주문번호와 실제 승인요청때 처리하는 주문번호가 동일해야하는 경우 검증처리해주세요. 다를경우 주문번호 검증은 하지 않으시기 바랍니다.

승인요청을 위한 kcp_cert_info 인증서는 서비스인증서 페이지를 참고해주세요.

<!-- 승인요청 데이터 -->

1{
2 "tran_cd":”00100000”,
3 "ordr_mony":"100000",
4 "kcp_cert_info":"-----BEGIN CERTIFICATE-----MIID3DCCAsSgAwIBAgIJAM...=-----END CERTIFICATE-----",
5 "site_cd":"사이트코드",
6 "enc_data":"SnvXdGftIEjAequorkpNhJXc4u3GRuotLHW9vyDDOhdeorM4DPXMJgJlIEoRo6divo=",
7 "enc_info":"A12345B12345"
8 "ordr_no":"TEST123"
9 "pay_type":"PACA"
10}
Type : json / application

결제 응답 전문의 경우 동일한 형태로 리턴됩니다.


승인요청 파라미터 가이드

승인요청 파라미터

string5

site_cd

KCP발급 사이트(상점)코드
가입 시 발송해드리는 연동메일 참조 / 테스트코드 : T0000


string가변

kcp_cert_info

KCP 인증서정보(직렬화)
관리자 페이지에서 발급받은 인증서 정보(직렬화 하여 요청)


string가변

enc_data

결제창 인증결과 암호화 정보
통합 결제 창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.


string가변

enc_info

결제창 인증결과 암호화 정보
통합 결제 창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.


string가변

tran_cd

결제요청타입
통합 결제 창에서 처리하여 전달받는 상태 코드 값
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.
※ 해당 값은 KCP 시스템에서 추가 및 변경이 되는 값으로 상점에서 자체 관리가 불가한 값입니다.


string4

pay_type

실제 결제수단
신용카드 : PACA
계좌이체 : PABK
가상계좌 : PAVC
휴 대 폰 : PAMC


string40

ordr_no

실제주문번호


number가변

ordr_mony

실제 결제요청 금액

API 승인처리 예시

String target_URL = "https://stg-spl.kcp.co.kr/gw/enc/v1/payment";  // 승인요청 개발서버

JSONObject json_req = new JSONObject();

json_req.put("tran_cd", tran_cd);
json_req.put("site_cd", site_cd);
json_req.put("kcp_cert_info", kcp_cert_info);
json_req.put("enc_data", enc_data);
json_req.put("enc_info", enc_info);
json_req.put("ordr_mony",ordr_mony);
//json_req.put("ordr_no", ordr_no);
json_req.put("pay_type", pay_type);


String temp_req_data = json_req.toString();
String req_data = temp_req_data.replace(",",",\r\n");

String inputLine = null;
StringBuffer outResult = new StringBuffer();

// API REQ
URL url = new URL(target_URL);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Accept-Charset", "UTF-8");

OutputStream os = conn.getOutputStream();
os.write(req_data.getBytes("UTF-8"));
os.flush();

// API RES
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
while ((inputLine = in.readLine()) != null)
{
  outResult.append(inputLine);
}
conn.disconnect();

String temp_result = outResult.toString();
String res_data = temp_result.replace(",",",\r\n");
header("Content-type: text/html; charset=utf-8");

$target_URL = "https://stg-spl.kcp.co.kr/gw/enc/v1/payment"; // 승인요청 개발서버

$data = [
          'tran_cd'        => $tran_cd,
          'site_cd'        => $site_cd,
          'kcp_cert_info'  => $kcp_cert_info,
          'enc_data'       => $enc_data,
          'enc_info'       => $enc_info,
          'ordr_mony'      => $ordr_mony,
       // 'ordr_no'      => $ordr_no,
          ‘pay_type'       => $pay_type
];

$req_data = json_encode($data);

$header_data = array( "Content-Type: application/json", "charset=utf-8" );

// API REQ
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target_URL);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header_data);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $req_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// API RES
$res_data  = curl_exec($ch);

// RES JSON DATA Parsing
$json_res = json_decode($res_data, true);

$res_cd = $json_res["res_cd"];
$res_msg = $json_res["res_msg"];

curl_close($ch);
target_URL = "https://stg-spl.kcp.co.kr/gw/enc/v1/payment"; // 승인요청 개발서버

req_data = "{\"tran_cd\" : \"" + tran_cd + "\"," +
            "\"site_cd\":\"" + site_cd + "\"," +
            "\"kcp_cert_info\":\"" + KCP_CERT_INFO + "\"," +
            "\"enc_data\":\"" + enc_data + "\"," +
            "\"enc_info\":\"" + enc_info + "\"," +
            "\"pay_type\":\"" + pay_type + "\"," +
            "\"ordr_mony\":\"" + ordr_mony + "\"}";

// ordr_no 필요시 처리

// API REQ
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(target_URL);
req.Method = "POST";
req.ContentType = "application/json";

byte[] byte_req = Encoding.UTF8.GetBytes(req_data);
req.ContentLength = byte_req.Length;

Stream st = req.GetRequestStream();
st.Write(byte_req, 0, byte_req.Length);
st.Close();

// API RES
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader st_read = new StreamReader(res.GetResponseStream(), Encoding.GetEncoding("utf-8"));
res_data = st_read.ReadToEnd();

st_read.Close();
res.Close();

// RES JSON DATA Parsing
JObject json_data = JObject.Parse(res_data);
res_cd = json_data["res_cd"].ToString();
res_msg = json_data["res_msg"].ToString();
target_URL = "https://stg-spl.kcp.co.kr/gw/enc/v1/payment" '개발서버
req_data = "{""tran_cd"":""" & tran_cd & """,""site_cd"":""" & site_cd & """,""kcp_cert_info"":""" & kcp_cert_info & """,""enc_data"":""" & enc_data & """,""enc_info"":""" & enc_info & """,""ordr_mony"":""" & ordr_mony & """,""pay_type"":""" & pay_type & """}“
 ' order_no 는 필요시 처리

' API REQ
set req = Server.CreateObject("MSXML2.ServerXMLHTTP")
req.open "POST", target_URL, false
req.setRequestHeader "Content-Type", "application/json;charset=UTF-8"
req.send req_data

' API RES
'요청 성공인 경우
if req.status = 200 then
    res_data = req.ResponseText
'요청 실패인 경우
else
    res_data = "http error code : " & req.status
end if
set req = nothing

'' RES JSON DATA Parsing
set json_data = JSON.parse(res_data)

res_cd = json_data.res_cd
res_msg = json_data.res_msg
// 결제 REQ DATA
  var req_data = {
    tran_cd : f_get_parm(req.body.tran_cd),
    site_cd : site_cd,
    kcp_cert_info : KCP_CERT_INFO,
    enc_data : f_get_parm(req.body.enc_data),
    enc_info : f_get_parm(req.body.enc_info),
    ordr_mony : ‘1000’,
 // ordr_no: ‘TEST1234’,
    pay_type: ‘PACA’
};

  fetch("https://stg-spl.kcp.co.kr/gw/enc/v1/payment", {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(req_data),
    })
    // 결제 API RES
    .then(response => {
      return response.json();
    })
    .then(data => {

  res.render('kcp_api_pay', {
    req_data : JSON.stringify(req_data),
    res_data : JSON.stringify(data),
    });
});
# 결제요청 API
target_URL = 'https://stg-spl.kcp.co.kr/gw/enc/v1/payment' # 승인요청 API 개발환경
headers = {'Content-Type': 'application/json', 'charset': 'UTF-8'}

site_cd = f_get_parm(request.form['site_cd'])

# 결제 REQ DATA
req_data = {
  'tran_cd' : f_get_parm(request.form['tran_cd']),
  'site_cd' : site_cd,
  'kcp_cert_info' : KCP_CERT_INFO,
  'enc_data' : f_get_parm(request.form['enc_data']),
  'enc_info' : f_get_parm(request.form['enc_info']),
   'ordr_mony' : '1',
# 'ordr_no' : 'TEST12345',
   'pay_type' : 'PACA‘
}

res = requests.post(target_URL, headers=headers, data=json.dumps(req_data, ensure_ascii=False, indent="\t").encode('utf8'))

승인응답 파라미터 가이드

공통응답 파라미터

승인성공 파라미터


string4

res_cd

결과코드
정상 승인이 이루어졌을 경우 ‘0000’ 값 리턴


string100

res_msg

결과메세지


string100

res_en_msg

영문 결과 메시지


string4

pay_method

응답결제수단
신용카드 - PACA
계좌이체 - PABK
가상계좌 - PAVC
포인트 - PAPT
휴대폰 - PAMC
상품권 - PATK
카카오머니 - PAKM
네이버페이 포인트 - PANP
페이코 포인트 - PACP


string14

tno

NHN KCP 거래 고유번호
※ 거래고유번호 전체로 사용 하시기 바랍니다. (임의의 숫자나 파싱하여 사용 불가)


number12

amount

결제 금액
결제 건의 총 결제 금액이 리턴 됩니다.
최종 결제 금액의 처리는 승인완료 후 리턴 데이터 중 amount 로 처리하여야 하며 반드시 업체의 DB금액과 비교하여 검증하시기 바랍니다


승인실패 파라미터


string4

res_cd

결과코드
정상 승인이 이루어졌을 경우 ‘0000’ 값 리턴


string100

res_msg

결과메세지

승인응답 파라미터

신용카드 결제 응답


string4

card_cd

결제 건의 발급 사 코드


string32

card_name

결제 건의 발급 사 명


string16

card_no

결제 건의 카드번호 (카드번호 16자리 중 3번째구간은 마스킹)


string8

app_no

결제 건의 승인번호


number14

app_time

결제 건의 결제(승인) 시간


string1

noinf

결제 건의 무이자 여부


string4

noinf_type

noinf = Y 일 때 (무이자 결제인 경우)
카드사 이벤트 무이자인 경우 : CARD
상점 부담 무이자인 경우 : SHOP


number4

quota

결제 건의 할부 기간


number12

card_mny

결제 건의 총 결제금액 중 신용카드 결제금액
만약 총 결제금액(amount) 10000 원 중 쿠폰할인 2000 원 받았다면 card_mny=8000 이 됩니다.
*페이코 포인트, 쿠폰 100% 결제 시 card_mny=0 으로 리턴될 수 있으니 반드시 총 결제 금액 처리는 amount 금액으로 체크하시기 바랍니다.


number8

coupon_mny

결제 건의 무이자 여부결제 건의 쿠폰 할인, 페이코 포인트 사용 금액
결제 건의 쿠폰 할인 금액 또는 페이코 포인트 사용 금액이 리턴됩니다.
만약 총 결제금액(amount) 10000 원 중 쿠폰 할인을 2000 원 받았다면 coupon_mny=2000 이 됩니다.


string1

partcanc_yn

결제 건의 부분취소 가능 유무


number1

card_bin_type_01

결제 건의 카드 구분 정보
개인 : 0 / 법인 : 1


number1

card_bin_type_02

결제 건의 카드 구분 정보
일반 : 0 / 체크 : 1


string4

isp_issuer_cd

ISP 계열 카드 발급 사 코드
BC96 : 케이뱅크카드
KM90 : 카카오뱅크카드


string32

isp_issuer_nm

ISP 계열 카드 발급 사 명
카카오뱅크의 경우 카카오뱅크 케이뱅크의 경우 K뱅크카드로 리턴됨.


number12

payco_point_mny

결제 건의 페이코 포인트 사용 금액


계좌이체 결제 응답


string20

bankname

결제 건의 은행 명
※ 테스트서버에서 계좌이체 테스트 시 금융결제원과 협의된 은행 코드로 리턴됩니다.


string4

bankcode

결제 건의 은행코드
※ 테스트서버에서 계좌이체 테스트 시 금융결제원과 협의된 은행 코드로 리턴됩니다.


number9

cash_authno

현금영수증 승인번호
NHN KCP 결제 창에서 현금영수증 등록 요청한 결제 건의 현금영수증 승인번호


number14

cash_no

NHN KCP 결제 창에서 현금영수증 등록 요청한 결제 건의 현금영수증 거래번호


number12

bk_mny

결제 건의 계좌이체 결제 금액


number14

app_time

결제건의 계좌발급 시간


가상계좌 결제 응답


string20

bankname

결제 건의 은행 명


string4

bankcode

결제 건의 은행코드


string20

account

결제 건의 가상계좌 번호


number14

va_date

가상계좌 입금마감일


number14

app_time

결제건의 계좌발급 시간


휴대폰 결제 응답


string4

van_cd

결제 건의 결제 사 코드


string4

van_id

결제 건의 실물/컨텐츠 구분


string3

commid

결제 건의 통신사 코드


number11

mobile_no

결제 건의 휴대폰 번호


포인트 결제 응답


number12

pnt_amount

결제 건의 포인트 결제 금액


string4

pnt_issue

결제 건의 결제 사 코드


string20

pnt_app_no

결제 건의 포인트 승인번호


number14

pnt_app_time

결제 건의 포인트 승인시각


string1

pnt_receipt_gubn

결제 건의 현금영수증 등록유무


number9

cash_authno

결제 건의 현금영수증 승인번호


number12

add_pnt

결제 건의 적립/사용 포인트


number12

use_pnt

결제 건의 가용 포인트


number12

rsv_pnt

결제 건의 총 포인트


상품권 결제 응답


number12

tk_mny

결제 건의 상품권 결제 금액


string4

tk_van_code

결제 건의 결제 사 코드


number20

tk_app_no

결제 건의 승인번호


number14

tk_app_time

결제 건의 승인시간


현금영수증 응답


number9

cash_authno

현금영수증 승인번호


number14

cash_no

현금영수증 거래번호

승인처리 구성하기

승인처리 페이지 구성시 승인요청 서명데이터생성 망취소 결과처리 로직을 포함 할 수 있습니다.

망취소 로직은 거래취소 페이지를 참고 부탁 드리겠습니다.

서명데이터생성 로직은 참고사항의 서버인증서 페이지를 참고 부탁 드리겠습니다.

결제창 호출, 승인처리를 포함한 전체 샘플이 필요하신 경우 다운로드 자료실을 이용해 주세요.