CookiePay API 매뉴얼

인증 결제

인증결제 요청전문

인증(일반), 해외원화, 해외달러 결제 > 공통전문

기본도메인(요청도메인)
라이브 : https://www.cookiepayments.com [POST] 
테스트 : https://sandbox.cookiepayments.com [POST] 
URL
{요청도메인}/pay/ready [POST]
JAVASCRIPT

쿠키페이 라이브러리 추가

jQuery 1.0 이상이 설치되어 있어야 합니다

<script type="text/javascript" src="{요청도메인}/js/cookiepayments-1.1.3.js"></script>

결제 준비하기

cookiepayments.init({
    api_id : 'abcde12345', //쿠키페이 결제 연동 id
});

결제 요청하기

cookiepayments.payrequest({
    ORDERNO: $("#ORDERNO").val(), //주문번호 (필수)
    PRODUCTNAME: $("#PRODUCTNAME").val(), //상품명 (필수)
    AMOUNT: $("#AMOUNT").val(), //결제 금액 (필수)
    BUYERNAME: $("#BUYERNAME").val(), //고객명 (필수)
    BUYEREMAIL: $("#BUYEREMAIL").val(), //고객 e-mail (필수)
    PAYMETHOD: $("#PAYMETHOD").val(), //결제 수단 (선택, 미입력시 CARD)
    PRODUCTCODE : $("#PRODUCTCODE").val(), //상품 코드 (선택)
    BUYERID : $("#BUYERID").val(), //고객 아이디 (선택)
    BUYERADDRESS : $("#BUYERADDRESS").val(), //고객 주소 (선택)
    BUYERPHONE : $("#BUYERPHONE").val(), //고객 휴대폰번호 (선택, 웰컴페이는 필수)
    RETURNURL : $("#RETURNURL").val(), //결제 완료 후 리다이렉트 url (필수)
    ETC1 : $("#ETC1").val(), //사용자 추가필드1 (선택)
    ETC2 : $("#ETC2").val(), //사용자 추가필드2 (선택)
    ETC3 : $("#ETC3").val(), //사용자 추가필드3 (선택)
    ETC4 : $("#ETC4").val(), //사용자 추가필드4 (선택)
    ETC5 : $("#ETC5").val(), //사용자 추가필드5 (선택)
});

샘플 예제

<!DOCTYPE html>
<html>
<head></head>
<body>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="{요청도메인}/js/cookiepayments-1.1.3.js"></script>
<script>
cookiepayments.init({
    api_id: 'abcde12345', //쿠키페이 결제 연동 id
});

function pay() {
    cookiepayments.payrequest({
        ORDERNO: $("#ORDERNO").val(), //주문번호 (필수)
        PRODUCTNAME: $("#PRODUCTNAME").val(), //상품명 (필수)
        AMOUNT: $("#AMOUNT").val(), //결제 금액 (필수)
        BUYERNAME: $("#BUYERNAME").val(), //고객명 (필수)
        BUYEREMAIL: $("#BUYEREMAIL").val(), //고객 e-mail (필수)
        PAYMETHOD: $("#PAYMETHOD").val(), //결제 수단 (선택)
        PRODUCTCODE: $("#PRODUCTCODE").val(), //상품 코드 (선택)
        BUYERID: $("#BUYERID").val(), //고객 아이디 (선택)
        BUYERADDRESS: $("#BUYERADDRESS").val(), //고객 주소 (선택)
        BUYERPHONE : $("#BUYERPHONE").val(), //고객 휴대폰번호 (선택, 웰컴페이는 필수)
        RETURNURL: $("#RETURNURL").val(), //결제 완료 후 리다이렉트 url (필수)
        ETC1 : $("#ETC1").val(), //사용자 추가필드1 (선택)
        ETC2 : $("#ETC2").val(), //사용자 추가필드2 (선택)
        ETC3 : $("#ETC3").val(), //사용자 추가필드3 (선택)
        ETC4 : $("#ETC4").val(), //사용자 추가필드4 (선택)
        ETC5 : $("#ETC5").val(), //사용자 추가필드5 (선택)
    });
}
</script>

<form name="payform">
    <input type="text" name="ORDERNO" id="ORDERNO" placeholder="주문번호" value="">
    <input type="text" name="PRODUCTNAME" id="PRODUCTNAME" placeholder="상품명" value="">
    <input type="text" name="AMOUNT" id="AMOUNT" placeholder="금액" value="">
    <input type="text" name="BUYERNAME" id="BUYERNAME" placeholder="고객명" value="">
    <input type="text" name="BUYEREMAIL" id="BUYEREMAIL" placeholder="고객 e-mail" value="">
    <input type="text" name="PAYMETHOD" id="PAYMETHOD" placeholder="결제수단" value="CARD">
    <input type="text" name="PRODUCTCODE" id="PRODUCTCODE" placeholder="상품 코드" value="">
    <input type="text" name="BUYERID" id="BUYERID" placeholder="고객 ID" value="">
    <input type="text" name="BUYERADDRESS" id="BUYERADDRESS" placeholder="고객 주소" value="">
    <input type="text" name="BUYERPHONE" id="BUYERPHONE" placeholder="고객 휴대폰번호" value="">
    <input type="text" name="RETURNURL" id="RETURNURL" placeholder="결제 완료 후 리다이렉트 url" value="">
    <input type="text" name="ETC1" id="ETC1" placeholder="사용자 추가필드 1" value="">
    <input type="text" name="ETC2" id="ETC2" placeholder="사용자 추가필드 2" value="">
    <input type="text" name="ETC3" id="ETC3" placeholder="사용자 추가필드 3" value="">
    <input type="text" name="ETC4" id="ETC4" placeholder="사용자 추가필드 4" value="">
    <input type="text" name="ETC5" id="ETC5" placeholder="사용자 추가필드 5" value="">
</form>

<button type="button" onclick="pay();">결제하기</button>

</body>
</html>
CURL

샘플 예제

curl -H "Content-Type: application/json" \
     -d '{ "API_ID": "{쿠키페이 결제 연동 id}",
           "ORDERNO": "{주문번호}",
           "PRODUCTNAME": "{상품명}",
           "AMOUNT": "{결제금액}",
           "BUYERNAME": "{고객명}",
           "BUYEREMAIL":"{고객 e-mail}",
           "BUYERPHONE":"{고객 휴대폰번호}",
           "RETURNURL": "{결제 완료 후 리다이렉트 url}",
           "ETC1": "{사용자 추가필드 1}",
           "ETC2": "{사용자 추가필드 2}",
           "ETC3": "{사용자 추가필드 3}",
           "ETC4": "{사용자 추가필드 4}",
           "ETC5": "{사용자 추가필드 5}"
        }' \
    -X POST "{요청도메인}/pay/ready"
PHP

샘플 예제

$headers = array(); 

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

$cookiepayments_url = "{요청도메인}/pay/ready";

$request_data_array = array(
    'API_ID' => '{쿠키페이 결제 연동 id}',
    'ORDERNO' => '{주문번호}',
    'PRODUCTNAME' => '{상품명}',
    'AMOUNT' => '{결제 금액}',
    'BUYERNAME' => '{고객명}',
    'BUYEREMAIL' => '{고객 e-mail}',
    'RETURNURL' => '{결제 완료 후 리다이렉트 url}',
    'PRODUCTCODE' => '{상품 코드}',
    'PAYMETHOD' => '{결제 수단}',
    'BUYERID' => '{고객 ID}',
    'BUYERADDRESS' => '{고객 주소}',
    'BUYERPHONE' => '{고객 휴대폰번호}',
    'ETC1' => '{사용자 추가필드 1}',
    'ETC2' => '{사용자 추가필드 2}',
    'ETC3' => '{사용자 추가필드 3}',
    'ETC4' => '{사용자 추가필드 4}',
    'ETC5' => '{사용자 추가필드 5}',
);

$cookiepayments_json = json_encode($request_data_array, JSON_UNESCAPED_UNICODE);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $cookiepayments_url);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $cookiepayments_json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
C#

샘플 예제

// 인증요청 서버통신 CALL

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.Text;
using System.IO;
using System.Text.Json;
using Newtonsoft.Json.Linq;
using System.Web.Mvc;
using MySql.Data.MySqlClient;
using System.Data.SqlClient;

namespace pay.Controllers
{
    public class HomeController : Controller
    {

        string API_ID = "쿠키페이 결제 연동 id";

        public ContentResult ReadyCall()
        {
            string URL = "{요청도메인}/pay/ready";

            //전송 데이터 JSON 형식 만들기
            var json = new JObject();
            json.Add("API_ID", API_ID);  //쿠키페이 결제 연동 ID
            json.Add("ORDERNO", "");     //주문번호
            json.Add("PRODUCTNAME", ""); //상품명
            json.Add("AMOUNT", 100);       //결제 금액
            json.Add("BUYERNAME", "");   //고객명
            json.Add("BUYEREMAIL", "");  //고객 E-MAIL
            json.Add("RETURNURL", "");   //결제 완료 후 리다이렉트 URL
            json.Add("PRODUCTCODE", ""); //상품 코드
            json.Add("PAYMETHOD", "");   //결제 수단
            json.Add("BUYERID", "");     //고객 ID
            json.Add("BUYERADDRESS", "");//고객 주소
            json.Add("BUYERPHONE", "");  //고객 휴대폰번호
            json.Add("ETC1", "");        //사용자 추가필드 1
            json.Add("ETC2", "");        //사용자 추가필드 2
            json.Add("ETC3", "");        //사용자 추가필드 3
            json.Add("ETC4", "");        //사용자 추가필드 4
            json.Add("ETC5", "");        //사용자 추가필드 5

            //요청 HEADER 세팅
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
            request.Method = "POST";
            request.ContentType = "application/json";
            request.Headers.Add("ApiKey", API_KEY);

            //데이터 전송
            byte[] bytes = Encoding.UTF8.GetBytes(json.ToString());
            request.ContentLength = bytes.Length;
            Stream reqStream = request.GetRequestStream();
            reqStream.Write(bytes, 0, bytes.Length);
            reqStream.Flush();
            reqStream.Close();

            //응답
            string response_data = "";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            HttpStatusCode status = response.StatusCode;
            Stream response_stream = response.GetResponseStream();
            using (StreamReader read_stream = new StreamReader(response_stream))
            {
                response_data = read_stream.ReadToEnd();
                System.Diagnostics.Trace.WriteLine(response_data);
                read_stream.Close();
                response_stream.Close();
                response.Close();
            }

            return Content(response_data);
        }
    }

}
JSP

샘플 예제

<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.security.MessageDigest" %>
<%

String ORDERNO          = "1234"; 
String PRODUCTNAME      = "상품명";                
int    AMOUNT           = 1004;                 
String BUYERNAME        = "고객명";                        
String BUYEREMAIL       = "id@email.com";                       
String PAYMETHOD        = "CARD";               
String PRODUCTCODE      = "";           
String BUYERID          = "guest";          
String BUYERADDRESS     = "인천 남동구..."; 
String BUYERPHONE       = "0100001234"; 
String HOMEURL          = ""; 
String RETURNURL        = "https://결과값을 받을 주소";
String COMPLETE_URL     = ""; 
String FAILURL          = "";
String ETC1             = "";
String ETC2             = "";
String ETC3             = "";
String ETC4             = "";
String ETC5             = "";
String MTYPE            = "";
String PAY_VERSION      = "";
String PAY_TYPE         = "";
String FORWARD          = "";
String CANCELURL        = "";
String ESCROW           = "N";
String ENG_FLAG         = "";
String PTYPE            = "";

%>

<!DOCTYPE html>
<html>
<head>
<title>Cookiepayments JSP CARD_AUTH API</title>
<meta charset="utf-8">
<style>
    html,body {height: 100%;}
    form {overflow: hidden;}
</style>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="{요청도메인}/js/cookiepayments-1.1.3.js"></script>
<script>
cookiepayments.init({
    api_id: '쿠키페이 결제 연동 id', 
});

function pay() {

    cookiepayments.payrequest({
        ORDERNO: $("#ORDERNO").val(), //주문번호 (필수)
        PRODUCTNAME: $("#PRODUCTNAME").val(), //상품명 (필수)
        AMOUNT: $("#AMOUNT").val(), //결제 금액 (필수)
        BUYERNAME: $("#BUYERNAME").val(), //고객명 (필수)
        BUYEREMAIL: $("#BUYEREMAIL").val(), //고객 e-mail (필수)
        PAYMETHOD: $("#PAYMETHOD").val(), //결제 수단 (선택)
        PRODUCTCODE: $("#PRODUCTCODE").val(), //상품 코드 (선택)
        BUYERID: $("#BUYERID").val(), //고객 아이디 (선택)
        BUYERADDRESS: $("#BUYERADDRESS").val(), //고객 주소 (선택)
        BUYERPHONE : $("#BUYERPHONE").val(), //고객 휴대폰번호 (선택, 웰컴페이는 필수)
        HOMEURL: $("#HOMEURL").val(), //결제 완료 후 리다이렉트 url (필수)
        RETURN_BACKURL: $("#RETURN_BACKURL").val(), //결제 완료(백단))
        RETURNURL: $("#RETURNURL").val(), //결제 완료 후 리다이렉트 url (필수)
        COMPLETE_URL: $("#COMPLETE_URL").val(), //결제 완료 후 확인버튼을 눌렀을떄 이동 URL
        FAILURL: $("#FAILURL").val(), // 결제실패시
        ETC1 : $("#ETC1").val(), //사용자 추가필드1 (선택)
        ETC2 : $("#ETC2").val(), //사용자 추가필드2 (선택)
        ETC3 : $("#ETC3").val(), //사용자 추가필드3 (선택)
        ETC4 : $("#ETC4").val(), //사용자 추가필드4 (선택)
        ETC5 : $("#ETC5").val(), //사용자 추가필드5 (선택)
        MTYPE : $("#MTYPE").val(), //사용자 추가필드5 (선택)
        PAY_VERSION : $("#PAY_VERSION").val(), //사용자 추가필드5 (선택)
        PAY_TYPE : $("#PAY_TYPE").val(), //사용자 추가필드5 (선택)
        FORWARD : $("#FORWARD").val(), //사용자 추가필드5 (선택)
        CANCELURL : $("#CANCELURL").val(), 
        ESCROW : $("#ESCROW").val(), // 에스크로 사용여부
        ENG_FLAG : $("#ENG_FLAG").val(), // 해외원화결제창 한글사용여부
        PTYPE : $("#PTYPE").val(), // 피시모바일구분
    });

}

</script>
</head>
<body>
    <div id="cookiepayform"></div>

    <form name="payform">
        <input type="text" name="ORDERNO" id="ORDERNO" placeholder="주문번호" value="<%=ORDERNO%>"><br>
        <input type="text" name="PRODUCTNAME" id="PRODUCTNAME" placeholder="상품명" value="<%=PRODUCTNAME%>"><br>
        <input type="text" name="PTYPE" id="PTYPE" placeholder="피시/모바일 구분" value="<%=PTYPE%>"><br>
        <input type="text" name="AMOUNT" id="AMOUNT" placeholder="금액" value="<%=AMOUNT%>"><br>
        <input type="text" name="BUYERNAME" id="BUYERNAME" placeholder="고객명" value="<%=BUYERNAME%>"><br>
        <input type="text" name="EMAIL" id="BUYEREMAIL" placeholder="고객 e-mail" value="<%=BUYEREMAIL%>"><br>
        <input type="text" name="PAYMETHOD" id="PAYMETHOD" placeholder="결제수단" value="<%=PAYMETHOD%>"><br>
        <input type="text" name="PRODUCTCODE" id="PRODUCTCODE" placeholder="상품 코드" value="<%=PRODUCTCODE%>"><br>
        <input type="text" name="BUYERID" id="BUYERID" placeholder="고객 ID" value="<%=BUYERID%>"><br>
        <input type="text" name="BUYERADDRESS" id="BUYERADDRESS" placeholder="고객 주소" value="<%=BUYERADDRESS%>"><br>
        <input type="text" name="BUYERPHONE" id="BUYERPHONE" placeholder="고객 휴대폰번호" value="<%=BUYERPHONE%>"><br>
        <input type="text" name="RETURNURL" id="RETURNURL" placeholder="결제 완료 후 리다이렉트 url" value="<%=RETURNURL%>"><br>
        <input type="text" name="RETURNURL" id="HOMEURL" placeholder="결제 완료 후 리다이렉트 url" value="<%=HOMEURL%>"><br>
        <input type="text" name="COMPLETE_URL" id="COMPLETE_URL" placeholder="결제 완료 후 리다이렉트 url" value="<%=COMPLETE_URL%>"><br>
        <input type="text" name="CANCELURL" id="CANCELURL" placeholder="결제중 취소시 리다이렉트 url" value="<%=CANCELURL%>"><br>

        <input type="text" name="FAILURL" id="FAILURL" placeholder="결제 완료 후 리다이렉트 url" value="<%=FAILURL%>"><br>
        <input type="text" name="MTYPE" id="MTYPE" placeholder="웹뷰활성화" value="<%=MTYPE%>"><br>
        <input type="text" name="ETC1" id="ETC1" placeholder="사용자 추가필드 1" value="<%=ETC1%>"><br>
        <input type="text" name="ETC2" id="ETC2" placeholder="사용자 추가필드 2" value="<%=ETC2%>"><br>
        <input type="text" name="ETC3" id="ETC3" placeholder="사용자 추가필드 3" value="<%=ETC3%>"><br>
        <input type="text" name="ETC4" id="ETC4" placeholder="사용자 추가필드 4" value="<%=ETC4%>"><br>
        <input type="text" name="ETC5" id="ETC5" placeholder="사용자 추가필드 5" value="<%=ETC5%>"><br>
        <input type="text" name="PAY_VERSION" id="PAY_VERSION" placeholder="사용자 추가필드 5" value="<%=PAY_VERSION%>"><br>
        <input type="text" name="PAY_TYPE" id="PAY_TYPE" placeholder="PAY_TYPE" value="<%=PAY_TYPE%>"><br>
        <input type="text" name="FORWARD" id="FORWARD" placeholder="웰컴페이 2차 결제창 팝업/부모여부" value="<%=FORWARD%>"><br>
        <!-- Escrow -->
        <input type="text" name="ESCROW" id="ESCROW" placeholder="에스크로결제 사용여부" value="<%=ESCROW%>"><br>
    </form>

    <br>
    <a href="javascript:pay();">결제하기</button>

</body>
</html>
요청 전문 파라미터

요청 시 주의사항 (필독)

요청 시 ORDERNO(주문번호)는 유니크 한 값이어야 합니다. 결제 시 마다 새로 생성된 값을 넘겨주셔야 합니다. 중복 된 주문번호일 경우 결제 실패가 일어나거나 결제 데이터가 부정확할 수 있습니다.

항목명 길이 내용 구분 비고
API_ID 20 쿠키페이 결제 연동 id 필수 쿠키페이에서 발급받은 결제 연동 id
ORDERNO 50 주문번호 필수 각 주문마다 유니크해야 합니다
PRODUCTNAME 40 상품명 필수 & 문자 포함시 오류 발생
AMOUNT 10 결제 금액 필수 숫자만 사용합니다
TAXFREE_AMOUNT 10 비과세 금액 선택 숫자만 사용합니다(복합과세 가맹점만 이용)
※ 키움페이 > 복합과세 가맹점만 사용가능합니다.
BUYERNAME 20 고객명 필수 결제자 이름
BUYEREMAIL 50 고객 e-mail 필수
RETURNURL 100 결제 결과 값 받는 주소 필수 결제 완료 후 리다이렉트 할 URL(새창)
HOMEURL 100 결제 결과 값 받는 주소 필수 결제 완료 후 리다이렉트 할 URL(결제창에서 이동)
(웹뷰 방식의 화면활성화시 HOMEURL을 사용하시기 바랍니다)
키움페이 PG만 사용
DIRECTRESULTFLAG 1 크로스도메인 이슈 선택 키움페이 PG만 사용
파이어폭스 사용시 DIRECTRESULTFLAG: Y 사용하고,
리턴값은 RETURNURL를 사용하지 마시고,
HOMEURL 사용하십시요.(필수)

파이어폭스는 IE와 크롬과 달리 호출창, 팝업창 간에
크로스도메인 이슈 문제 해결을 위한 것입니다.
MTYPE 1 웹뷰 사용시 선택 키움페이 PG만 사용( M : 앱뷰 활성화 )
CANCELURL 100 결제 중지 시 리다이렉트 url 선택 웰컴페이/키움페이
PRODUCTCODE 10 상품 코드 선택
PAYMETHOD 20 결제수단 선택 CARD(카드), KAKAOPAY(카카오페이)
NAVERPAY(네이버페이), BANK(계좌이체)
VACCT(가상계좌), MOBILE(휴대폰)

(KAKAOPAY,NAVERPAY : 키움페이만 사용)
(그외 PG사의 카카오페이, 네이버페이 이용시
PAYMETHOD : CARD 로 요청바랍니다.)
PAY_TYPE 1 해외결제 사용 선택 원화결제 : 7, 달러결제 : 5
키움(원화결제 사용가능), 모빌(원화, 달러결제 사용가능)
BUYERID 20 고객 ID 선택
BUYERADDRESS 100 고객 주소 선택
BUYERPHONE 20 고객 휴대폰번호 선택 웰컴페이 PG는 필수값
TAXYN 1 과세/비과세 선택 키움페이 PG만 사용(Y:과세, N:비과세, M:복합과세) - default : 과세
└ 복합과세는 키움페이만 사용가능
CLOSEURL 100 취소 후 이동할 URL 선택 카카오페이 결제만 사용
FAILURL 100 실패 후 이동할 URL 선택 카카오페이 결제만 사용
ESCROW 1 에스크로 결제여부 선택 에스크로 결제 사용: Y (키움페이:계좌이체 이용시)
ENG_FLAG 1 해외 원화 결제창 영문 출력여부 선택 영문출력: Y (키움페이:해외원화 결제 이용시)
CARDLIST 50 해외 원화 이용할 카드종류 선택 피시 > CCXX
모바일 > CVSF:CMCF:CJCF 값을 넣어주십시요.
비자, 마스터, JCB 카드 종류만 노출
ETC1 100 사용자 추가 필드1 선택 입력시 응답파라미터에 값을 전달합니다
ETC2 100 사용자 추가 필드2 선택 입력시 응답파라미터에 값을 전달합니다
ETC3 100 사용자 추가 필드3 선택 입력시 응답파라미터에 값을 전달합니다
ETC4 100 사용자 추가 필드4 선택 입력시 응답파라미터에 값을 전달합니다
ETC5 100 사용자 추가 필드5 선택 입력시 응답파라미터에 값을 전달합니다

인증결제 응답전문

응답 전문 파라미터

결과값은 Form Data로 전송됩니다.

항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수 PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메세지 필수 PG사 응답 메시지 ("성공" 또는 오류 메세지)
ORDERNO 50 주문번호 필수 주문번호
AMOUNT 10 결제 된 금액 필수
TID 20 PG 거래 고유번호 필수 PG사 결제 거래고유번호 (전표출력 및 결제취소에 사용됩니다)
ACCEPTDATE 20 승인일시 필수 PG사 결제 승인일시
ACCEPTNO 10 승인번호 필수 PG사 결제 승인번호
CASH_BILL_NO 10 현금영수증일련번호 필수 가상계좌 및 계좌이체 시 현금영수증 일련번호
CARDNAME 10 입금할 은행명 필수 가상계좌 및 계좌이체 시 입금할 은행명
ACCOUNTNO 10 입금할 계좌번호 필수 가상계좌 시 입금할 계좌번호
RECEIVERNAME 10 입금할 예금주 필수 가상계좌 시 입금할 예금주
DEPOSITENDDATE 10 입금마감일 필수 가상계좌 시 입금마감일
CARDCODE 10 입금할 은행코드 필수 가상계좌 시 입금할 은행코드
QUOTA 2 할부기간 필수 카드 할부결제시 할부기간 (00:일시불, 01:1개월)
ETC1 100 사용자 추가 필드1 선택 결제 요청시 입력한 값
ETC2 100 사용자 추가 필드2 선택 결제 요청시 입력한 값
ETC3 100 사용자 추가 필드3 선택 결제 요청시 입력한 값
ETC4 100 사용자 추가 필드4 선택 결제 요청시 입력한 값
ETC5 100 사용자 추가 필드5 선택 결제 요청시 입력한 값

결제 완료 통지 전문

통지 전문 파라미터

통지 전문은 JSON POST 형식으로 전송됩니다.

통지 전문은 쿠키페이먼트에서 고객사로 Server To Server로 전송됩니다.
개발한 통지 URL 입력방법 : 쿠키페이먼츠 접속 후 > API 연동 메뉴 > PG사 조회 및 연동 설정 > PG 연동 버튼 클릭 > 통지 URL 입력란에 입력 후 설정 저장하시면 됩니다.

항목명 길이 내용 구분 비고
API_ID 20 쿠키페이 결제 연동 id 필수(json) 쿠키페이에서 발급받은 결제 연동 id
ORDERNO 50 주문번호 필수(json) 주문번호
AMOUNT 10 결제 된 금액 필수(json)
TID 20 PG 거래 고유번호 필수(json) PG사 결제 거래고유번호 (전표출력 및 결제취소에 사용됩니다)
BUYEREMAIL 50 구매자 이메일 필수(json)
BUYERNAME 20 구매자 이름 필수(json)
USERID 20 고객 ID 선택(json) 고객아이디
PRODUCTCODE 10 상품 코드 필수(json)
PRODUCTNAME 40 상품명 필수(json)
ACCEPT_DATE 10 승인일시 필수(json) PG사 결제 승인일시
ACCEPT_NO 10 승인번호 필수(json) PG사 결제 승인번호
CARDCODE 10 카드 코드 필수(json) 사용 카드 카드번호/가상계좌 시 입금할 은행코드
CARDNAME 10 카드사명 필수(json) 사용 카드사명/가상계좌시 입금할 은행명
CARDNO 20 카드번호 필수(json) 예) **000111
QUOTA 2 할부기간 필수(json) 카드 할부결제시 할부기간 (00:일시불, 01:1개월)
ACCOUNTNO 10 입금할 계좌번호 필수(json) 가상계좌 시 입금할 계좌번호
RECEIVERNAME 10 입금할 예금주 필수(json) 가상계좌 시 입금할 예금주
DEPOSITENDDATE 10 입금마감일 필수(json) 가상계좌 시 입금마감일
DEPOSITNAME 30 입금자 선택(json) 가상계좌 > 입금자명 (지원 PG사 : 모빌페이, 이지페이, 토스페이)
SMS_INPUT 30 청구서 URLKEY 값 선택(json) 청구서 생성시 리턴받은 URLKEY 값
ETC1 100 사용자 추가 필드1 선택 결제 요청시 입력한 값
ETC2 100 사용자 추가 필드2 선택 결제 요청시 입력한 값
ETC3 100 사용자 추가 필드3 선택 결제 요청시 입력한 값
ETC4 100 사용자 추가 필드4 선택 결제 요청시 입력한 값
ETC5 100 사용자 추가 필드5 선택 결제 요청시 입력한 값
PHP

// 결제정보 수신 후 데이터베이스에 입력되는 필드값은 고객님의 홈페이지 결제 테이블에 맞게 입력하셔야 합니다. 
// 결제요청시 결제시도 데이터는 디비에 우선 저장하신후 [결제완료 통지전문] 신호를 받으신후 결제완료 정보를 업데이트합니다.

$params = json_decode(file_get_contents('php://input'), true); 

if( !empty($params['ACCEPT_NO']) && !empty($params['TID']) && !empty($params['ORDERNO']) ) {

    /*
    [API_ID] => xxxxxxx
    [ORDERNO] => 20230206020000000
    [AMOUNT] => 100
    [TID] => CEH11111111111111111
    [USERID] => guest
    [BUYERNAME] => test
    [BUYEREMAIL] => 
    [PRODUCTCODE] => test
    [PRODUCTNAME] => test
    [ACCEPT_DATE] => 20230206110242
    [ACCEPT_NO] => 11111111
    [CARDCODE] => CCBC
    [CARDNAME] => 케이뱅크체크
    [CARDNO] => **********002163
    [QUOTA] => 00
    [ETC1] => 사용자 추가 필드1
    [ETC2] => 사용자 추가 필드2
    [ETC3] => 사용자 추가 필드3
    [ETC4] => 사용자 추가 필드4
    [ETC5] => 사용자 추가 필드5
    [PAY_METHOD] => CARD
    */

    /* 전달받은 결제정보로 결제완료 처리 예제코드 */
    $SQL = "UPDATE '결제테이블' set ";
    $SQL .= "ACCEPT_DATE    = '".$params['ACCEPT_DATE']."', ";
    $SQL .= "ACCEPT_NO      = '".$params['ACCEPT_NO']."', ";
    $SQL .= "TID            = '".$params['TID']."',";
    $SQL .= "CARDCODE       = '".$params['CARDNO']."',";
    $SQL .= "CARDNAME       = '".$params['CARDNAME']."',";
    $SQL .= "QUOTA          = '".$params['QUOTA']."',";
    $SQL .= "PAY_STATUS     = '결제성공' ";

    $SQL .= "WHERE ORDERNO  = '".$params['ORDERNO']."' ";
    $SQL .= "AND AMOUNT     = '".$params['AMOUNT']."' ";
    $SQL .= "AND PAY_STATUS = '결제대기' ";
    $SQL .= "LIMIT 1 ";

    $result = mysql_query($SQL, 'Connect_Info');

}
C#
// 결제정보 수신 후 데이터베이스에 입력되는 필드값은 고객님의 홈페이지 결제 테이블에 맞게 입력하셔야 합니다. 
// 결제요청시 결제시도 데이터는 디비에 우선 저장하신후 [결제완료 통지전문] 신호를 받으신후 결제완료 정보를 업데이트합니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.Text;
using System.IO;
using System.Text.Json;
using Newtonsoft.Json.Linq;
using System.Web.Mvc;
using MySql.Data.MySqlClient;
using System.Data.SqlClient;

namespace pay.Controllers
{
    public class HomeController : Controller
    {

        //인증결제 완료전문 MS-SQL DB 입력
        public void CompleteMssql(ResponseVo param)
        {
            //데이터 DB 입력            
            using (SqlConnection connection = new SqlConnection("Server=localhost; Uid=; Pwd =; database=;"))
            {
                SqlCommand command = new SqlCommand();
                command.Connection = connection;
                command.CommandText = @"UPDATE '결제 테이블'
                                           SET ACCEPT_DATE = @ACCEPT_DATE
                                              ,ACCEPT_NO = @ACCEPT_NO
                                              ,TID = @TID
                                              ,CARDCODE = @CARDCODE
                                              ,CARDNAME = @CARDNAME
                                              ,QUOTA = @QUOTA
                                              ,PAY_STATUS = @PAY_STATUS
                                         WHERE ORDERNO = @ORDERNO
                                           AND AMOUNT = @AMOUNT
                                           AND PAY_STATUS = @PAY_STATUS2";

                command.Parameters.AddWithValue("@ACCEPT_DATE", param.ACCEPTDATE);
                command.Parameters.AddWithValue("@ACCEPT_NO", param.ACCEPTNO);
                command.Parameters.AddWithValue("@TID", param.TID);
                command.Parameters.AddWithValue("@CARDCODE", param.CARDCODE);
                command.Parameters.AddWithValue("@CARDNAME", param.CARDNAME);
                command.Parameters.AddWithValue("@QUOTA", param.QUOTA);
                command.Parameters.AddWithValue("@PAY_STATUS", "결제성공");
                command.Parameters.AddWithValue("@ORDERNO", param.ORDERNO);
                command.Parameters.AddWithValue("@AMOUNT", param.AMOUNT);
                command.Parameters.AddWithValue("@PAY_STATUS2", "결제대기");

                connection.Open();
                int result = command.ExecuteNonQuery();
                connection.Close();
            }

            Response.Redirect("/Home/Index");
        }
    }
}

결제정보 검증

결제정보 검증

최종 결제 요청이 브라우저에서 이루어지는 경우 결제 금액을 위변조하여 결제요청을 할 수 있습니다. 이 경우 결제 완료 후 처음 요청했던 금액과 실제로 결제된 금액이 일치하는지 확인하는 과정이 필요합니다.

기본도메인(요청도메인)
라이브 : https://www.cookiepayments.com [POST] 
테스트 : https://sandbox.cookiepayments.com [POST] 
URL
{요청도메인}/api/paycert [POST] 
TOKEN 발행 URL
{요청도메인}/payAuth/token [POST]
TOKEN 요청 전문 파라미터
항목명 길이 내용 구문 비고
pay2_id 30 cookiepayments에서 발급받은 ID 필수 cookiepayments사에서 부여
pay2_key 50 cookiepayments에서 발급받은 연동키 필수 cookiepayments사에서 부여
결제검증 요청 전문 파라미터
항목명 길이 내용 구문 비고
tid 50 PG사 거래 고유번호 필수 PG사에서 부여
CURL
/* 토큰 발급 API */
curl -H "Content-Type: application/json" \
     -d '{
         "pay2_id": "{쿠키페이 결제 연동 id}",
         "pay2_key": "{쿠키페이 결제 연동 key}"
         }' \
     -X POST "{요청도메인}/payAuth/token"

/* 발급 받은 TOKEN으로 결제 취소 API 통신 */
curl -H "Content-Type: application/json" \
     -H "TOKEN: {TOKEN API통해 발행된 TOKEN 값}" \
     -d '{"tid": "{결제 후 응답받은 PG 거래 고유번호}"}' \
     -X POST "{요청도메인}/api/paycert"
PHP
/* 토큰 발행 API */
$headers = array(
    'Content-Type: application/json; charset=utf-8',
);

$token_url = "{요청도메인}payAuth/token";

$request_data = array(
    'pay2_id' => '{쿠키페이 결제 연동 id}',
    'pay2_key'=> '{쿠키페이 결제 연동 key}',
);

$request_data = json_encode($request_data, JSON_UNESCAPED_UNICODE);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $token_url);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result, true);

if($result['RTN_CD'] == '0000') {

    $paycert_url = "{요청도메인}/api/paycert";

    $headers = array(
        'content-type: application/json; charset=utf-8',
        'TOKEN: ' . $result['TOKEN'],
    );

    $request_data = array(
        'tid' => '{결제 후 응답받은 PG사 거래 고유번호}',
    );

    $request_data = json_encode($request_data, JSON_UNESCAPED_UNICODE);

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $paycert_url);
    curl_setopt($ch, CURLOPT_POST, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request_data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 20);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $response = curl_exec($ch);
    curl_close($ch);

    // 결과 처리
    var_dump($response);
}
C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.Text;
using System.IO;
using System.Text.Json;
using Newtonsoft.Json.Linq;
using System.Web.Mvc;
using MySql.Data.MySqlClient;
using System.Data.SqlClient;

namespace pay.Controllers
{
    public class HomeController : Controller
    {

        string API_ID = "쿠키페이 결제 연동 key";
        string API_KEY = "쿠키페이 결제 연동 key";

        public ActionResult Paycert()
        {
            //토큰 발행 요청
            string TOKEN_URL = "{요청도메인}/payAuth/token";

            //전송 데이터 JSON 형식 만들기
            var token_json = new JObject();
            token_json.Add("pay2_id", API_ID);     //쿠키페이 결제 연동 ID
            token_json.Add("pay2_key", API_KEY);   //쿠키페이 연동 키

            //요청 HEADER 세팅
            HttpWebRequest token_request = (HttpWebRequest)WebRequest.Create(TOKEN_URL);
            token_request.Method = "POST";
            token_request.ContentType = "application/json";

            //데이터 전송
            byte[] token_bytes = Encoding.UTF8.GetBytes(token_json.ToString());
            token_request.ContentLength = token_bytes.Length;
            Stream token_reqStream = token_request.GetRequestStream();
            token_reqStream.Write(token_bytes, 0, token_bytes.Length);
            token_reqStream.Flush();
            token_reqStream.Close();

            //응답
            HttpWebResponse token_response = (HttpWebResponse)token_request.GetResponse();
            HttpStatusCode status = token_response.StatusCode;
            Stream token_res_stream = token_response.GetResponseStream();
            StreamReader token_read_stream = new StreamReader(token_res_stream);
            string token_resp_data = token_read_stream.ReadToEnd();
            //응답 토근 정보
            var token_result = JObject.Parse(token_resp_data);
            System.Diagnostics.Trace.WriteLine(token_result["TOKEN"]);
            token_read_stream.Close();
            token_res_stream.Close();
            token_response.Close();

            //0000: 성공
            string rtn_cd = Convert.ToString(token_result["RTN_CD"]);
            if (rtn_cd == "0000")
            {
                //결제 검증 요청
                string CERT_URL = "{요청도메인}/api/paycert";
                string TOKEN = Convert.ToString(token_result["TOKEN"]);
                HttpWebRequest cert_request = (HttpWebRequest)WebRequest.Create(CERT_URL);
                cert_request.Method = "POST";
                cert_request.ContentType = "application/json";
                cert_request.Headers.Add("TOKEN", TOKEN);

                var cert_json = new JObject();
                cert_json.Add("tid", "tid 값");     //결제 후 응답받은 PG사 거래 고유번호

                byte[] cert_bytes = Encoding.UTF8.GetBytes(cert_json.ToString());
                cert_request.ContentLength = cert_bytes.Length;
                Stream cert_stream = cert_request.GetRequestStream();
                cert_stream.Write(cert_bytes, 0, cert_bytes.Length);
                cert_stream.Flush();
                cert_stream.Close();

                //응답
                HttpWebResponse cert_response = (HttpWebResponse)cert_request.GetResponse();
                HttpStatusCode cert_status = cert_response.StatusCode;
                Stream cert_rep_stream = cert_response.GetResponseStream();
                StreamReader cert_read_stream = new StreamReader(cert_rep_stream);
                //결과처리
                string cert_result = cert_read_stream.ReadToEnd();
                System.Diagnostics.Trace.WriteLine(cert_result);
                cert_read_stream.Close();
                cert_rep_stream.Close();
                cert_response.Close();
            }

            return View();
        }

    }
}
결제검증 응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 PG 사 응답코드 필수(json) 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 PG 사 응답메시지 필수(json) 응답 메시지 ("성공" 또는 오류 메세지)
ORDERNO 50 주문번호 필수(json) 결제한 주문번호
AMOUNT 10 결제 된 금액 필수(json) 문자 및 특수문자 허용 불가
BUYERNAME 20 고객명 필수(json)
BUYEREMAIL 50 고객 e-mail 필수(json)
PRODUCTNAME 40 상품명 필수(json) '&' 문자 포함시 오류 발생
PRODUCTCODE 10 상품코드 필수(json)
PAYMETHOD 20 결제수단 필수(json) CARD(카드), KAKAOPAY(카카오페이), BANK(계좌이체)
VACCT(가상계좌), MOBILE(휴대폰)
BUYERID 20 고객 ID 필수(json)
TID 50 PG 거래 고유번호 필수(json) PG사 결제 거래고유번호 (전표출력 및 결제취소에 사용됩니다)
ACCEPTNO 10 승인번호 필수(json) PG사 결제 승인번호
ACCEPTDATE 20 승인일시 필수(json) PG사 결제 승인일시
CANCELDATE 20 취소날짜 필수(json) 결제 취소한 경우 취소일시
CANCELMSG 50 취소메시지 필수(json) 결제 취소한 경우 취소메세지
ACCOUNTNO 50 가상계좌번호 (json) 가상계좌 이용 시 리턴 값
RECEIVERNAME 50 예금주성명 (json) 가상계좌 이용 시 리턴 값
DEPOSITENDDATE 50 계좌사용만료일 (json) 가상계좌 이용 시 리턴 값
CARDNAME 50 은행명 (json) 가상계좌 이용 시 리턴 값
CARDCODE 50 은행코드 (json) 가상계좌 이용 시 리턴 값