Mobile 자동결제 연동하기
API 연동하기
NHN KCP에서 제공하는 API 연동 가이드를 안내합니다.
호출-거래등록-인증-배치키발급-자동결제승인-결과 6STEP으로 진행되는 Mobile 자동결제 가이드를 확인해주세요
거래등록
배치키 발급을 위해 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
거래등록 파라미터 가이드
등록요청 파라미터
kcp_cert_info
KCP 발급 인증서정보
site_cd
상점ID
테스트코드 : A52Q7
ordr_idxx
주문번호
good_mny
주문금액
pay_method
결제수단
good_name
상품명
Ret_URL
인증 완료 후 데이터를 리턴받을 응답 주소
escw_used
에스크로 사용여부
user_agent
사용 OS
등록응답 파라미터
Code
응답코드
Message
응답메세지
approvalKey
거래인증 키
PayUrl
리턴 받은 결제 창 호출 주소
전달 받은 값
그대로 요청
hashData
해시정보
traceNo
추적번호
paymentMethod
결제 수단
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"
배치키 발급 모바일 결제창 요청 파라미터 가이드
필수 파라미터
site_cd
KCP 발급 사이트(상점)코드
테스트코드 : A52Q7
pay_method
결제수단코드(영문 대문자)
AUTH : 고정 값
ActionResult
인증수단(영문 소문자)
batch : 고정 값
escw_used
에스크로 사용여부
N : 고정값
currency
거래 화폐 단위 설정 변수
원화 : 410
approval_key
거래인증 코드(수정불가)
Ret_URL
NHN KCP 모바일 결제 창에서 인증완료 후 인증데이터를
리턴 받을 업체페이지
Ret_URL 뒤의 추가 파라미터는 허용되지 않습니다.
예) http://testpay.kcp.co.kr?test1=1&test2=2
추가 파라미터는 반드시 아래 옵션 파라미터인 param_opt_1 ~ 3 으로
활용하셔야 합니다.
PayUrl
approval_key.js 를 통해 리턴 받은 결제 창
호출 주소
전달 받은 값 그대로 요청
ordr_idxx
상점관리 주문번호
(유니크한 값 설정 권장)
※ 주문번호는
영문과 숫자로 설정하셔야합니다.
kcp_group_id
가맹점 그룹 아이디
※ 자동결제 그룹 아이디 생성 방법
NHN
KCP 상점관리자 페이지 접속 → 결제 관리 → 일반결제 →
자동결제
→ 그룹관리를 통해 그룹 아이디 생성
ex)A52Q71000489
선택 파라미터
param_opt_1
NHN KCP 기본 파라미터 외 업체 추가 파라미터
param_opt_2
NHN KCP 기본 파라미터 외 업체 추가 파라미터
param_opt_3
NHN KCP 기본 파라미터 외 업체 추가 파라미터
buyr_name
주문자이름
옵션 파라미터
batch_soc_choice
결제창에서 주민번호/사업자 번호 고정여부 설정
S: 주민번호만 표시
C: 사업자번호만 표시
ex) S
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>
인증파라미터 가이드
리턴 파라미터
enc_data
결제창 인증결과 암호화 정보
통합 결제
창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.
enc_info
결제창 인증결과 암호화 정보
통합 결제
창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.
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 서비스 인증서 관련 상세 내용은 서버 인증서 페이지를 참고 부탁 드립니다.
배치키 발급 요청 파라미터 가이드
배치키 발급 요청 파라미터
site_cd
KCP발급 사이트(상점)코드
가입 시
발송해드리는 연동메일 참조 / 테스트코드 :
A52Q7
kcp_cert_info
KCP 인증서정보(직렬화)
관리자 페이지에서 발급받은 인증서 정보(직렬화 하여 요청)
enc_data
결제창 인증결과 암호화 정보
통합 결제
창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.
enc_info
결제창 인증결과 암호화 정보
통합 결제
창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.
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'))
배치키 발급 응답 파라미터 가이드
배치키 발급 성공 파라미터
res_cd
결과코드
정상 승인이 이루어졌을 경우 ‘0000’ 값 리턴
res_msg
결과메세지
batch_key
인증 후에 결과로 받는 인증키
이 키를 가맹점 측에 저장(DB 또는 파일로 저장)해두었다가, 자동결제 요청에 이용할
수 있습니다.
ex)11113011327740F3
card_cd
배치키 발급 시 요청한 카드사 코드
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
결제 응답 전문의 경우 동일한 형태로 리턴됩니다.
자동 결제 요청 파라미터 가이드
필수 파라미터
site_cd
KCP 발급 사이트(상점)코드
테스트코드 : A52Q7
kcp_cert_info
KCP 인증서정보(직렬화)
관리자 페이지에서 발급받은 인증서 정보(직렬화 하여 요청)
pay_method
결제수단코드
인증키 요청 서비스 종류
CARD : 고정값
amount
총 결제 금액
결제금액은 숫자 이외의 문자(콤마 등)는 허용하지
않습니다.
card_mny
카드 결제 금액
결제금액은 숫자 이외의 문자(콤마 등)는 허용하지
않습니다.
currency
거래 화폐 단위 설정 변수
원화 : 410
quota
할부개월 수
00 : 고정값
ordr_idxx
상점관리 주문번호
(유니크한 값 설정 권장)
※ 주문번호는
영문과 숫자로 설정하셔야합니다.
card_tx_type
카드 전문 유형
11511000 : 고정값
bt_batch_key
인증 후 결과로 받는 인증 키
ex)21123011327740F3
bt_group_id
가맹점 그룹 아이디
※ 자동결제 그룹 아이디 생성 방법
NHN
KCP 상점관리자 페이지 접속 → 결제 관리 → 일반결제 →
자동결제 → 그룹관리를 통해 그룹 아이디 생성
ex)A52Q710000489
선택 파라미터
cust_ip
요청자 ip
media_type
매체 구분
ex)PC=MC01, 모바일=MC02
good_name
상품명
상품의 정보를 간략하게(100byte 이내) 입력해주시기
바랍니다.
*필수 정보는 아니지만 고객 안내 및 주문정보 관리를 위하여 정확한 상품명을 넘겨야
합니다.
buyr_name
주문자이름
buyr_mail
주문자 E-Mail
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'))
자동결제 응답/승인 파라미터 가이드
공통응답 파라미터
res_cd
결과코드
res_msg
결과 메시지
res_en_msg
영문 결과 메시지
amount
NHN KCP 거래번호
해당 값으로 거래건의 상태를 조회/변경/취소가
가능하니 처리 페이지에서 tno를 반드시
저장 해주시기
바랍니다.
amount
결제 금액
trace_no
NHN KCP 거래 추적번호
승인응답 파라미터
신용카드 결제 응답
card_cd
결제 건의 발급 사 코드
card_name
결제 건의 발급 사 명
card_no
결제 건의 카드번호 (카드번호 16자리 중 3번째구간은 마스킹)
app_no
결제 건의 승인번호
app_time
결제 건의 결제(승인) 시간
noinf
결제 건의 무이자 여부
quota
결제 건의 할부 기간
card_mny
결제 건의 총 결제금액 중 신용카드 결제금액
acqu_cd
결제 건의 매입사 코드
acqu_name
결제 건의 매입사 명
partcanc_yn
결제 건의 부분취소 가능 유무
card_bin_type_01
결제 건의 카드 구분 정보
개인 : 0 / 법인
: 1
card_bin_type_02
결제 건의 카드 구분 정보
일반 : 0 / 체크
: 1
card_bin_bank_cd
카드발급사 은행코드
승인처리 구성하기
승인처리 페이지 구성시 승인요청 서명데이터생성 망취소 결과처리 로직을 포함 할 수 있습니다.
망취소 로직은 거래취소 페이지를 참고 부탁 드리겠습니다.
서명데이터생성 로직은 참고사항의 서버인증서 페이지를 참고 부탁 드리겠습니다.
결제창 호출, 승인처리를 포함한 전체 샘플이 필요하신 경우 다운로드 자료실을 이용해 주세요.