Mobile 자동결제 연동하기


API 연동하기

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

호출-거래등록-인증-배치키발급-자동결제승인-결과 6STEP으로 진행되는 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
테스트코드 : A52Q7


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 /* 호출 함수 (실행) */
3 function call_pay_form()
4 {
5     var v_frm = document.order_info;
6        v_frm.action = PayUrl;
7        v_frm.submit();
8 }
9</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 발급 사이트(상점)코드
테스트코드 : A52Q7


string12

pay_method

결제수단코드(영문 대문자)
AUTH : 고정 값


string5

ActionResult

인증수단(영문 소문자)
batch : 고정 값


string1

escw_used

에스크로 사용여부
N : 고정값


string3

currency

거래 화폐 단위 설정 변수
원화 : 410


string가변

approval_key

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


string256

Ret_URL

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


string가변

PayUrl

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


string40

ordr_idxx

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


string12

kcp_group_id

가맹점 그룹 아이디
※ 자동결제 그룹 아이디 생성 방법
NHN KCP 상점관리자 페이지 접속 → 결제 관리 → 일반결제 → 자동결제 → 그룹관리를 통해 그룹 아이디 생성
ex)A52Q71000489

선택 파라미터

string1000

param_opt_1

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


string1000

param_opt_2

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


string1000

param_opt_3

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


string30

buyr_name

주문자이름

옵션 파라미터

string1

batch_soc_choice

결제창에서 주민번호/사업자 번호 고정여부 설정
S: 주민번호만 표시
C: 사업자번호만 표시
ex) S


string1

batch_cardno_return_yn

배치키 발급 시 사용한 카드의 카드번호 리턴 여부 설정
KCP 결제창에서 card_mask_no 로 리턴 됩니다.
"Y"로 요청 시 : 12345******8910
"L"로 요청 시 : 8910
ex ) Y / L

배치키 발급(요청/인증리턴) 샘플코드 예시

  <%@ page language="java" contentType="text/html;charset=euc-kr"%>

      request.setCharacterEncoding( "euc-kr" );

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

      /* kcp와  결제 통신후 kcp 서버에서 전송되는 결제 요청 정보 */
      String req_tx          =  request.getParameter( "req_tx"         ); // 요청 종류
      String res_cd          =  request.getParameter( "res_cd"         ); // 응답 코드
      String site_cd         =  request.getParameter( "site_cd"        ); // 사이트코드
      String tran_cd         =  request.getParameter( "tran_cd"        ); // 트랜잭션 코드
      String ordr_idxx       =  request.getParameter( "ordr_idxx"      ); // 쇼핑몰 주문번호
      String good_mny        =  request.getParameter( "good_mny"       ); // 결제 총금액
      String buyr_name       =  request.getParameter( "buyr_name"      ); // 주문자명
      String enc_info        =  request.getParameter( "enc_info"       ); // 암호화 정보
      String enc_data        =  request.getParameter( "enc_data"       ); // 암호화 데이터
  %>

  <!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>
<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="kcp_group_id"        value="A52Q71000489"/> 배치 인증키생성 그룹아이디(리얼테스트시 실제 업체의 그룹아이디 입력
          <!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
          <!-- 신용카드 설정 -->
          <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="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_name"      value=" <%=good_name%>" />            <!-- 상품명             -->
      <input type="hidden" name="buyr_name"      value=" <%=buyr_name%>" />            <!-- 주문자명           -->
      <input type="hidden" name="enc_info"       value=" <%=enc_info%>" />
      <input type="hidden" name="enc_data"       value=" <%=enc_data%>" />
</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" ];
  // 가맹점 리턴 URL
  $Ret_URL        = $_POST[ "Ret_URL"     ];

  /* kcp와 통신후 kcp 서버에서 전송되는 결제 요청 정보 */
  $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"       ]; // 결제 총금액
  $enc_info        = $_POST[ "enc_info"       ]; // 암호화 정보
  $enc_data        = $_POST[ "enc_data"       ]; // 암호화 데이터

?>

  <!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>
<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="kcp_group_id"        value="A52Q71000489"/> 배치 인증키생성 그룹아이디(리얼테스트시 실제 업체의 그룹아이디 입력
          <!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
          <!-- 신용카드 설정 -->
          <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="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_name"      value=" <%=good_name%>" />            <!-- 상품명             -->
      <input type="hidden" name="buyr_name"      value=" <%=buyr_name%>" />            <!-- 주문자명           -->
      <input type="hidden" name="enc_info"       value=" <%=enc_info%>" />
      <input type="hidden" name="enc_data"       value=" <%=enc_data%>" />
</form>
<!--//wrap-->
</body>
</html>

<%@ Page Language="C#" %>
<%
    // 거래등록 응답 값
    String approvalKey = Request.Form[ "approvalKey"    ]; // 거래등록키
    String PayUrl      = Request.Form[ "PayUrl"         ]; // 거래등록 PAY URL
    // 인증시 필요한 결제수단 세팅 값
    String pay_method   = Request.Form[ "pay_method"   ]; // 결제수단
    String actionResult = Request.Form[ "actionResult" ];
    // 가맹점 리턴 URL
    String Ret_URL      = Request.Form[ "Ret_URL"     ];

    /* kcp와  결제 통신후 kcp 서버에서 전송되는 결제 요청 정보 */
    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 enc_info        = Request.Form[ "enc_info"       ]; // 암호화 정보
    String enc_data        = Request.Form[ "enc_data"       ]; // 암호화 데이터
    /* 기타 파라메터 추가 부분 - 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="kcp_group_id"        value="A52Q71000489"/> 배치 인증키생성 그룹아이디(리얼테스트시 실제 업체의 그룹아이디 입력
          <!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
          <!-- 신용카드 설정 -->
          <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="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_name"      value=" <%=good_name%>" />            <!-- 상품명             -->
      <input type="hidden" name="buyr_name"      value=" <%=buyr_name%>" />            <!-- 주문자명           -->
      <input type="hidden" name="enc_info"       value=" <%=enc_info%>" />
      <input type="hidden" name="enc_data"       value=" <%=enc_data%>" />
</form>
<!--//wrap-->
</body>
</html>
<!--#include file="../lib/json2.asp"-->
<%
    Response.CharSet = "UTF-8"

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

   ' kcp와  결제 통신후 kcp 서버에서 전송되는 결제 요청 정보
    res_cd          = request( "res_cd"         )  ' 응답 코드
    site_cd         = request( "site_cd"        )  ' 사이트코드
    tran_cd         = request( "tran_cd"        )  ' 트랜잭션 코드
    ordr_idxx       = request( "ordr_idxx"      )  ' 쇼핑몰 주문번호
    good_name       = request( "good_name"      )  ' 상품명
    good_mny        = request( "good_mny"       )  ' 결제 총금액
    enc_info        = request( "enc_info"       )  ' 암호화 정보
    enc_data        = request( "enc_data"       )  ' 암호화 데이터
%>
<!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="kcp_group_id"        value="A52Q71000489"/> 배치 인증키생성 그룹아이디(리얼테스트시 실제 업체의 그룹아이디 입력
          <!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
          <!-- 신용카드 설정 -->
          <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="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_name"      value=" <%=good_name%>" />            <!-- 상품명             -->
      <input type="hidden" name="buyr_name"      value=" <%=buyr_name%>" />            <!-- 주문자명           -->
      <input type="hidden" name="enc_info"       value=" <%=enc_info%>" />
      <input type="hidden" name="enc_data"       value=" <%=enc_data%>" />
</form>
<!--//wrap-->
</body>
</html>

// 주문페이지 이동 및 Ret_URL 처리(MOBILE)
router.post('/mobile_request/order_mobile', function(req, res) {
  var res_cd = req.body.res_cd);
  if( res_cd == '0000') {
    var enc_info = req.body.enc_info);
    // enc_info 값이 없을 경우 POST DATA 처리 후 order_mobile 이동
    if( enc_info == '') {
      post_data = {
        approvalKey : req.body.approvalKe),
        traceNo : req.body.traceNo,
        PayUrl : req.body.PayUrl,
        pay_method : req.body.pay_method,
        Ret_URL : req.body.Ret_URL,
        site_cd : req.body.site_cd,
        ordr_idxx : req.body.ordr_idxx,
        good_name : req.body.good_name,
        good_mny : req.body.good_mny
      };
    // enc_info 값이 있을 경우 결제 진행(결제인증 후 Ret_URL처리)
    } else {
      post_data = {
        res_cd : req.body.res_cd, // 응답 코드
        site_cd : req.body.site_cd, // 사이트코드
        tran_cd : req.body.tran_cd, // 트랜잭션 코드
        enc_info : enc_info, // 암호화 정보
        enc_data : req.body.enc_data // 암호화 데이터
      };
    }
  }
    res.render('mobile_request/order_mobile', {
      post_data : post_data
    });
  });
<!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="kcp_group_id"        value="A52Q71000489"/> 배치 인증키생성 그룹아이디(리얼테스트시 실제 업체의 그룹아이디 입력
          <!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
          <!-- 신용카드 설정 -->
          <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="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_name"      value=" <%=good_name%>" />            <!-- 상품명             -->
      <input type="hidden" name="buyr_name"      value=" <%=buyr_name%>" />            <!-- 주문자명           -->
      <input type="hidden" name="enc_info"       value=" <%=enc_info%>" />
      <input type="hidden" name="enc_data"       value=" <%=enc_data%>" />
</form>
<!--//wrap-->
</body>
</html>


#주문페이지 이동 및 Ret_URL 처리(MOBILE)
@app.route('/mobile_request/order_mobile', methods=['POST'])
def order_mobile():
    # res_cd == '0000' 인 경우 진행
    if request.form['res_cd'] == '0000' :
        enc_info = request.form['enc_info']
        post_data = ''
        # enc_info 값이 없을 경우 POST DATA 처리 후 order_mobile 이동
        if enc_info == '' :
            post_data = {
                'approvalKey' : request.form['approvalKey'],
                'traceNo' : request.form['traceNo'],
                'PayUrl' : request.form['PayUrl'],
                'pay_method' : request.form['pay_method'],
                'Ret_URL' : request.form['Ret_URL'],
                'site_cd' : request.form['site_cd'],
                'ordr_idxx' : request.form['ordr_idxx'], # 쇼핑몰 주문번호
                'good_name' : request.form['good_name'], # 상품명
                'good_mny' : request.form['good_mny'] # 결제 금액
            }
         # enc_info 값이 있을 경우 결제 진행(결제인증 후 Ret_URL처리)
        else :
            post_data = {
                'res_cd' : request.form['res_cd'], # 응답 코드
                'site_cd' : request.form['site_cd'], # 사이트코드
                'tran_cd' : request.form['tran_cd'], # 트랜잭션 코드
                'enc_info' : enc_info, # 암호화 정보
                'enc_data' : request.form['enc_data'] # 암호화 데이터
            }

    return render_template('/mobile_request/order_mobile.html', post_data=post_data)

<!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="kcp_group_id"        value="A52Q71000489"/> 배치 인증키생성 그룹아이디(리얼테스트시 실제 업체의 그룹아이디 입력
          <!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
          <!-- 신용카드 설정 -->
          <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="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_name"      value=" " />            <!-- 상품명             -->
      <input type="hidden" name="buyr_name"      value=" " />            <!-- 주문자명           -->
      <input type="hidden" name="enc_info"       value=" " />
      <input type="hidden" name="enc_data"       value=" " />
</form>
<!--//wrap-->
</body>
</html>

인증파라미터 가이드

리턴 파라미터

string가변

enc_data

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


string가변

enc_info

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


string가변

tran_cd

배치키 발급 창으로부터 전달 받는 결제 타입

인증 callback 데이터

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

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

배치키 발급 요청 데이터

배치키 발급 요청 데이터는 Json String 전송방식으로 요청 하세요.

배치키 발급 요청을 위한 kcp_cert_info 인증서 데이터 발급은 참고사항의 서버인증서페이지와 아래 가이드를 참고해주세요.

<!-- 배치키 발급 요청 데이터 -->

1{
2"tran_cd":”003000001",
3"ordr_mony":"1004",
4"kcp_cert_info":"-----BEGIN CERTIFICATE-----MIID3DCCAsSgAwIBAgIJAM...=-----END CERTIFICATE-----",
5"site_cd":"A52Q7",
6"enc_data":"SnvXdGftIEjAequorkpNhJXc4u3GRuotLHW9vyDDOhdeorM4DPXMJgJlIEoRo6divo=",
7"enc_info":"A12345B12345"
8}
Type : json / application

서비스 인증서

NHN KCP 발급 인증서 내 데이터 값 추출,
가맹점 인증을 위해 KCP로부터 발급 받은 인증서 정보를 text 형식으로 전달해주셔야 하며,
인증서의 text 값을 데이터 직렬화하여 kcp_cert_info 의 value 값으로 전달하시기 바랍니다.

kcp_cert_info는 결제 승인 취소 거래등록 조회 시에 필요합니다.

KCP 서비스 인증서 관련 상세 내용은 서버 인증서 페이지를 참고 부탁 드립니다.


배치키 발급 요청 파라미터 가이드

배치키 발급 요청 파라미터

string5

site_cd

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


string가변

kcp_cert_info

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


string가변

enc_data

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


string가변

enc_info

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


string가변

tran_cd

배치키 발급 창으로부터 전달 받는 결제 타입

API 배치키 발급 요청 처리 예시


String target_URL = "https://stg-spl.kcp.co.kr/gw/enc/v1/payment";  // 개발서버
// String target_URL = "https://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);

  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"; // 개발서버
  // $target_URL = "https://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
          ];

  $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"; // 개발서버
  // target_URL = "https://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 + "\"}";
  // 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" '개발서버
  'target_URL = "https://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 & """}"

  ' 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)
    };

    // fetch("https://spl.kcp.co.kr/gw/enc/v1/payment", { // 운영서버
    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' # 개발서버
  # target_URL = 'https://spl.kcp.co.kr/gw/enc/v1/payment' # 운영서버
  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'])
  }

  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

결과메세지


string16

batch_key

인증 후에 결과로 받는 인증키
이 키를 가맹점 측에 저장(DB 또는 파일로 저장)해두었다가, 자동결제 요청에 이용할 수 있습니다.
ex)11113011327740F3


string4

card_cd

배치키 발급 시 요청한 카드사 코드


string20

card_name

배치키 발급 시 요청한 카드사명

배치키 발급 처리 구성하기

배치키 발급 처리 페이지 구성시 결과처리 로직을 포함 할 수 있습니다.

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


자동 결제 요청 하기

인증데이터를 API URL로 자동 결제요청 하세요.

<!-- 결제 호출 JS -->

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

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


자동 결제 요청 데이터

자동 결제 요청 데이터는 Json String 전송방식으로 요청 하세요.

자동 결제 요청을 위한 kcp_cert_info 인증서 데이터 발급은 참고사항의 서버인증서페이지와 위의 가이드를 참고해주세요.

<!-- 배치 결제 요청 데이터 -->

1{
2"site_cd":”A52Q7",
3"kcp_cert_info":"-----BEGIN CERTIFICATE-----MIID3DCCAsSgAwIBAgIJAM...=-----END CERTIFICATE-----",
4"ordr_idxx":"TEST123456789",
5"amount":"1000",
6"card_mny":"1000",
7"good_name":"운동화",
8"buyr_name":"홍길동",
9"buyr_mail":"test@test.co.kr",
10"buyr_tel2":"010-0000-0000",
11"pay_method":"CARD",
12"bt_batch_key":"2112151156695850",
13"bt_group_id":"A52Q710000489",
14"currency":"410",
15"quota":"00",
16"media_type":"MC01",
17"card_tx_type":"11511000"
18}
Type : json / application

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


자동 결제 요청 파라미터 가이드

필수 파라미터

string5

site_cd

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


string가변

kcp_cert_info

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


string12

pay_method

결제수단코드
인증키 요청 서비스 종류
CARD : 고정값


number12

amount

총 결제 금액
결제금액은 숫자 이외의 문자(콤마 등)는 허용하지 않습니다.


number12

card_mny

카드 결제 금액
결제금액은 숫자 이외의 문자(콤마 등)는 허용하지 않습니다.


number3

currency

거래 화폐 단위 설정 변수
원화 : 410


number12

quota

할부개월 수
00 : 고정값


string40

ordr_idxx

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


string8

card_tx_type

카드 전문 유형
11511000 : 고정값


string16

bt_batch_key

인증 후 결과로 받는 인증 키
ex)21123011327740F3


string12

bt_group_id

가맹점 그룹 아이디
※ 자동결제 그룹 아이디 생성 방법
NHN KCP 상점관리자 페이지 접속 → 결제 관리 → 일반결제 → 자동결제 → 그룹관리를 통해 그룹 아이디 생성
ex)A52Q710000489

선택 파라미터

string15

cust_ip

요청자 ip


string4

media_type

매체 구분
ex)PC=MC01, 모바일=MC02


string100

good_name

상품명
상품의 정보를 간략하게(100byte 이내) 입력해주시기 바랍니다.
*필수 정보는 아니지만 고객 안내 및 주문정보 관리를 위하여 정확한 상품명을 넘겨야 합니다.


string30

buyr_name

주문자이름


string50

buyr_mail

주문자 E-Mail


string20

buyr_tel2

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

자동 결제 API 처리 예시

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

JSONObject json_req = new JSONObject();

json_req.put("site_cd", site_cd);
json_req.put("kcp_cert_info", kcp_cert_info);
json_req.put("bt_group_id", bt_group_id);
json_req.put("bt_batch_key", bt_batch_key);
json_req.put("good_mny", good_mny);

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 = [
          'site_cd'        => $site_cd,
          'kcp_cert_info'  => $kcp_cert_info,
          'bt_group_id'    => $bt_group_id,
          'bt_batch_key'   => $bt_batch_key,
          'good_mny'   =>  $good_mny
        ];

$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 = "{"\"site_cd\":\"" + site_cd + "\"," +
            "\"kcp_cert_info\":\"" + KCP_CERT_INFO + "\"," +
            "\"bt_group_id\":\"" + bt_group_id + "\"," +
            "\"bt_batch_key\":\"" + bt_batch_key + "\"," +
            "\"good_mny\":\"" + good_mny + "\"}";
// 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 = "{""site_cd"":""" & site_cd & """,""kcp_cert_info"":""" & kcp_cert_info & """,""bt_group_id"":""" & bt_group_id & """,""bt_batch_key"":""" & bt_batch_key & """,""good_mny"":""" & good_mny & """}"

' 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 = {
    site_cd : site_cd,
    kcp_cert_info : KCP_CERT_INFO,
    bt_group_id : bt_group_id,
    bt_batch_key : bt_batch_key,
    good_mny : '1' // 결제요청금액   ** 1 원은 실제로 업체에서 결제하셔야 될 원 금액을 넣어주셔야 합니다. 결제금액 유효성 검증 **
  };

  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 = {
  'site_cd' : site_cd,
  'kcp_cert_info' : KCP_CERT_INFO,
  'bt_group_id' : bt_group_id,
  'bt_batch_key' : bt_batch_key,
  'good_mny' : '1' # ** 1 원은 실제로 업체에서 결제하셔야 될 원 금액을 넣어주셔야 합니다. 결제금액 유효성 검증 **
}

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

자동결제 응답/승인 파라미터 가이드

공통응답 파라미터

string4

res_cd

결과코드


string100

res_msg

결과 메시지


string100

res_en_msg

영문 결과 메시지


String14

amount

NHN KCP 거래번호
해당 값으로 거래건의 상태를 조회/변경/취소가 가능하니 처리 페이지에서 tno를 반드시 저장 해주시기 바랍니다.


number12

amount

결제 금액


String16

trace_no

NHN KCP 거래 추적번호

승인응답 파라미터

신용카드 결제 응답


string4

card_cd

결제 건의 발급 사 코드


string32

card_name

결제 건의 발급 사 명


string16

card_no

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


string8

app_no

결제 건의 승인번호


number14

app_time

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


string1

noinf

결제 건의 무이자 여부


number12

quota

결제 건의 할부 기간


number12

card_mny

결제 건의 총 결제금액 중 신용카드 결제금액


string4

acqu_cd

결제 건의 매입사 코드


string20

acqu_name

결제 건의 매입사 명


string1

partcanc_yn

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


number1

card_bin_type_01

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


number1

card_bin_type_02

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


string4

card_bin_bank_cd

카드발급사 은행코드

승인처리 구성하기

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

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

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

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