CookiePay API 매뉴얼

정기결제

카드 정기결제 시작하기

카드 자동 결제는 Billing 정기결제로 카유생비(카드번호, 유효기간, 생년월일, 비밀번호)를 보내 빌링키를 취득 한 후, 원하는 결제시점에 API로 빌링키 + 결제금액을 보내 결제하는 방식입니다.
특성상 빌링키 발급받는 과정만 클라이언트 작업이 필요하며 , 해당 빌링키로 결제를 요청, 예약, 취소하는 작업은 서버사이드에서 이루어집니다.

빌링키란?
구독형 정기결제, 종량제 과금결제 등 원하는 시점에 재 결제를 진행할 수 있는 결제용 암호화 키 입니다. 가맹점이 고객의 카드정보를 소유할 수 없기 때문에 카드사로부터 해당 카드에 대응하는 빌링키 발급 받아 저장하고 원하는 시점에 해당 빌링키로 결제를 청구할 수 있습니다.

진행 순서

  1. 빌링키 발급 요청합니다.
    • 인증방식 - PG사 결제창을 통해 지불수단 정보 전달 (클라이언트), PG사별로 상이할 수 있습니다.
    • 비인증방식 - 개발사의 UI에서 지불수단을 입력받아 PG사에 전달 (클라이언트/서버사이드)
  2. 빌링키로 결제 요청하기
  3. 빌링키 조회하기
    • 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}",
           "PRODUCTCODE":"{상품 코드}",
           "PAYMETHOD":"{결제 수단}",
           "BUYERID":"{고객 ID}",
           "BUYERADDRESS":"{고객 주소}",
           "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}',
    'PRODUCTCODE' => '{상품 코드}',
    'PAYMETHOD' => '{결제 수단}',
    'BUYERID' => '{고객 ID}',
    'BUYERADDRESS' => '{고객 주소}',
    'BUYERPHONE' => '{고객 휴대폰번호}',
    'RETURNURL' => '' //결제 완료 후 리다이렉트 url
    '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("PRODUCTCODE", ""); //상품 코드
            json.Add("PAYMETHOD", "");   //결제 수단
            json.Add("BUYERID", "");     //고객 ID
            json.Add("BUYERADDRESS", "");//고객 주소
            json.Add("BUYERPHONE", "");  //고객 휴대폰번호
            json.Add("RETURNURL", "");   //결제 완료 후 리다이렉트 url
            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"; //고객 ID  
String BUYERADDRESS     = "인천 남동구..."; //고객주소
String BUYERPHONE       = "0100001234"; //고객 연락처
String RETURNURL        = "https://결제완료 결과값을 받을 주소"; // 결제 완료 후 리다이렉트 url
String ETC1             = ""; //사용자 추가필드 1
String ETC2             = ""; //사용자 추가필드 2
String ETC3             = ""; //사용자 추가필드 3
String ETC4             = ""; //사용자 추가필드 4
String ETC5             = ""; //사용자 추가필드 5

%>

<!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(), //고객 휴대폰번호 (선택, 웰컴페이는 필수)
        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>
</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="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="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>
    </form>

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

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

요청 시 주의사항 (필독)

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

항목명 길이 내용 구분 비고
API_ID 20 쿠키페이 결제 연동 id 필수 쿠키페이에서 발급받은 결제 연동 id
ORDERNO 50 주문번호 필수 각 주문마다 유니크해야 합니다
PRODUCTNAME 40 상품명 필수 & 문자 포함시 오류 발생
AMOUNT 10 결제 금액 필수 숫자만 사용합니다
BUYERNAME 20 고객명 필수 결제자 이름
TAXYN 1 과세/비과세 필수 Y:과세, N:비과세 - default : Y
RETURNURL 100 결제 결과 값 받는 주소 필수 결제 완료 후 리다이렉트 할 URL(새창)
BUYEREMAIL 50 고객 e-mail 선택
PRODUCTCODE 10 상품 코드 선택
BUYERID 20 고객 ID 선택
BUYERADDRESS 100 고객 주소 선택
BUYERPHONE 20 고객 휴대폰번호 선택 웰컴페이 PG는 필수값
ETC1 100 사용자 추가 필드1 선택 입력시 응답파라미터에 값을 전달합니다
ETC2 100 사용자 추가 필드2 선택 입력시 응답파라미터에 값을 전달합니다
ETC3 100 사용자 추가 필드3 선택 입력시 응답파라미터에 값을 전달합니다
ETC4 100 사용자 추가 필드4 선택 입력시 응답파라미터에 값을 전달합니다
ETC5 100 사용자 추가 필드5 선택 입력시 응답파라미터에 값을 전달합니다

빌링키 발급 및 첫 결제 응답전문(암호화 리턴)

응답 전문 파라미터(암호화 리턴)

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

항목명 길이 내용 구분 비고
API_ID 20 쿠키페이 결제 연동 id 필수 쿠키페이에서 발급받은 결제 연동 id
RESULTCODE 4 결과 코드 필수 암호화 리턴 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메세지 필수 암호화 리턴 응답 메시지 ("성공" 또는 오류 메세지)
ENC_DATA 암호호된 리턴값 필수 암호회된 리턴값

빌링키 발급 및 첫 결제 응답전문 > 복호화

응답 전문 파라미터 > 복호화 (암호화 전문 복호화하기 참조)

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

항목명 길이 내용 구분 비고
decryptData 복호화된 데이터 필수
   RESULTCODE 4 결과 코드 필수 PG사 응답 코드 (성공시 "0000", 그외 에러)
   RESULTMSG 100 결과 메세지 필수 PG사 응답 메시지 ("성공" 또는 오류 메세지)
   ORDERNO 50 주문번호 필수 주문번호
   AMOUNT 10 결제 된 금액 필수
   TID 20 PG 거래 고유번호 필수 PG사 결제 거래고유번호 (전표출력 및 결제취소에 사용됩니다)
   ACCEPTDATE 20 승인일시 필수 PG사 결제 승인일시
   ACCEPTNO 10 승인번호 필수 PG사 결제 승인번호
   CARDNAME 10 입금할 은행명 필수 가상계좌 및 계좌이체 시 입금할 은행명
   CARDCODE 10 입금할 은행코드 필수 가상계좌 시 입금할 은행코드
   QUOTA 2 할부기간 필수 카드 할부결제시 할부기간 (00:일시불, 01:1개월)
   ETC1 100 사용자 추가 필드1 선택 결제 요청시 입력한 값
   ETC2 100 사용자 추가 필드2 선택 결제 요청시 입력한 값
   ETC3 100 사용자 추가 필드3 선택 결제 요청시 입력한 값
   ETC4 100 사용자 추가 필드4 선택 결제 요청시 입력한 값
   ETC5 100 사용자 추가 필드5 선택 결제 요청시 입력한 값
   BILLKEY 20 빌링키 필수 정기결제에 사용될 빌링키
   GENDATE 50 빌링키 생성일자 필수 빌링키 생성일자
복호화 응답데이터 예
{
  "RESULTCODE": "0000",         // 복호화 응답 코드
  "RESULTMSG": "성공",            // 복호화 응답 메시지
  "decryptData": {
      "RESULTCODE": "0000",     // PG사 응답 코드 (성공시 "0000", 그외 에러)
      "RESULTMSG": "성공",        //  PG사 응답 메시지 ("성공" 또는 오류 메세지)
      "ORDERNO": "주문번호",
      "AMOUNT": "1004",
      "TID": "PG 거래 고유번호",
      "ACCEPTDATE": "승인일시",
      "ACCEPTNO": "승인번호",
      "CARDNAME": "결제카드사 이름",
      "CARDCODE": "결제카드코드",
      "QUOTA": "할부기간",
      "ETC1": "사용자 추가 필드1",
      "ETC2": "사용자 추가 필드2",
      "ETC3": "사용자 추가 필드3",
      "ETC4": "사용자 추가 필드4",
      "ETC5": "사용자 추가 필드5",
      "BILLKEY": "k0a04cjfiysqtfcg2hfe", // 결제용 빌링키
      "GENDATE": "20240910152739",
  }
}


PHP (인증결제응답) > 복호화후 응답필드 값으로 디비처리하기

// 결제정보 수신 후 데이터베이스에 입력되는 필드값은 고객님의 홈페이지 결제 테이블에 맞게 입력하셔야 합니다. 
// 결제요청시 결제시도 데이터는 디비에 우선 저장하신후 [인증 결제 응답 전문] 신호를 받으신후 결제완료 정보를 업데이트합니다.
// 계좌이체, 가상계좌의 경우 ACCEPT_NO 승인번호의 리턴 값이 없으므로 예외 처리하여 주시기 바랍니다.
// 결제 테이블 설계의 경우 비즈니스 로직에 때라 상이하므로 아래 예제 코드는 참조만 하여 주시기 바랍니다.
// 응답전문의 경우 기본 암호화 되어 리턴되므로 > 암호화 전문 복호화하기 api(전문)을 사용하시어 복호화후 디비처리하여 주십시요.

$headers = array(); 
array_push($headers, "content-type: application/json; charset=utf-8");
array_push($headers, "ApiKey: COOKIEPAY에서 발급받은 연동키");

$cookiepay_api_url = "{요청도메인}/EdiAuth/cookiepay_edi_decrypt";

$edi_date = date('YmdHis');
$request_data_array = array(
    'API_ID' => 'cookiepayments에서 발급받은 ID', // 쿠키페이 결제 연동 id
    'ENC_DATA' => '암호화된 응답값',
);

$cookiepay_api_json = json_encode($request_data_array, TRUE);

$ch = curl_init(); // curl 초기화

curl_setopt($ch,CURLOPT_URL, $cookiepay_api_url);
curl_setopt($ch,CURLOPT_POST, false);
curl_setopt($ch,CURLOPT_POSTFIELDS, $cookiepay_api_json);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch,CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch); // 응답값을 $response 변수 넣는다.
curl_close($ch);

$result_array = json_decode($response, true);
$params_decode = $result_array['decryptData'];

if( !empty($params_decode['ACCEPT_NO']) && !empty($params_decode['TID']) && !empty($params_decode['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
    [BILLKEY] => k0a04cjfiysqtfcg2hfe
    [GENDATE] => 20240910152739
    */

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

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

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

}

결제정보 검증

결제정보 검증

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

기본도메인(요청도메인)
라이브 : 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) 가상계좌 이용 시 리턴 값