CookiePay API 매뉴얼

정기결제

카드 정기결제 시작하기

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

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

진행 순서

  1. 빌링키 발급(채번)/결제를 요청합니다.
       1-1. 비인증방식 - 개발사의 UI에서 지불수단을 입력받아 PG사에 전달 (클라이언트/서버사이드)
       1-2. 인증방식 - PG사 결제창을 통해 지불수단 정보 전달 (클라이언트)
             * 빌링키 발급(채번)/결제를 요청할 때, 반복결제 등록 요청하기를 바로 할 수 있습니다.
  2. 빌링키로 결제 요청하기/응답받기
  3. 반복결제 구현하기
       3-1. 빌링키로 반복결제 등록 요청하기 / 응답전문
       3-2. 등록된 반복결제 지정일에 결제 결과 통지 전문
             반복결제시 결제성공, 결제실패 , 약정조건 등 통지전문(Noti)으로 고객사에 통지합니다.
       3-3. 등록된 반복결제 취소하기
       3-4. 반복결제 등록정보내역 조회
       3-5. 반복결제 즉시결제 요청 하기
            
    등록된 반복 결제를 즉시 결제를 할 수 있습니다.
  4. 빌링키 폐기하기
  5. 빌링키 조회하기
    • API를 통한 빌링키의 정보를 확인 할 수 있습니다.
  6. 통지전문


1. 빌링키 발급(채번)/결제를 요청합니다.

1-1. 빌링키 발급/결제 하기 - 비인증방식

1-1-1. 기본도메인(요청도메인)
라이브 : https://www.cookiepayments.com [POST] 
테스트 : https://sandbox.cookiepayments.com [POST] 
1-1-2. TOKEN 발행 URL
{요청도메인}/payAuth/token [POST]
1-1-3. TOKEN 요청 전문 파라미터
항목명 길이 내용 구분 비고
pay2_id 30 cookiepayments에서 발급받은 연동ID 필수 cookiepayments사에서 부여
pay2_key 50 cookiepayments에서 발급받은 연동 시크릿키 필수 로그인 후 API연동>PG사조회및 연동설정 페이지의
"결제수단"이 '비인증_정기'인 "PG연동" [보기]에서 확인
1-1-4. 샘플예제
1-1-4-1. CURL
/* 토큰 발급 API */
curl -H "Content-Type: application/json" \
     -d '{
         "pay2_id": "cookiepayments에서 발급받은 연동ID",
         "pay2_key": "cookiepayments에서 발급받은 연동 시크릿키"
         }' \
     -X POST "{요청도메인}/payAuth/token"
1-1-4-2. PHP
/* 토큰 발행 API */
$tokenheaders = array(); 
array_push($tokenheaders, "content-type: application/json; charset=utf-8");

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

$token_request_data = array(
    'pay2_id' => 'cookiepayments에서 발급받은 연동ID',
    'pay2_key'=> 'cookiepayments에서 발급받은 연동 시크릿키',
);

$req_json = json_encode($token_request_data, TRUE);

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

curl_setopt($ch,CURLOPT_URL, $token_url);
curl_setopt($ch,CURLOPT_POST, false);
curl_setopt($ch,CURLOPT_POSTFIELDS, $req_json);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $tokenheaders);
$RES_STR = curl_exec($ch);
curl_close($ch);
$RES_STR = json_decode($RES_STR,TRUE);
1-1-5. TOKEN 요청 응답 전문 파라미터
항목명 길이 내용 구분 비고
RTN_CD 4 결과 코드 필수(JSON) 응답 코드 (성공시 "0000", 그외 에러)
RTN_MSG 100 결과 메시지 필수(JSON) 응답 메시지 ("성공" 또는 오류 메세지)
TOKEN 200 인증 TOKEN 필수(JSON) 결제요청에 필요한 토큰
1-1-6. 응답데이터 예
{
    "RTN_CD": "0000",
    "RTN_MSG": "성공",
    "TOKEN": "암호화된코드"
}


1-1-7. 빌링키 발급 URL
{요청도메인}/Subscribe/billkeygen [POST]
1-1-8. 요청 전문 파라미터
항목명 길이 내용 구분 비고
ApiKey 제한없음 쿠키페이 결제 연동 시크릿키 필수(헤더) 쿠키페이에서 발급받은 결제 연동 시크릿키
TOKEN 제한없음 인증 TOKEN 필수(헤더) TOKEN 발급 API통해 발급 TOKEN 값
API_ID 20 쿠키페이 결제 연동ID 필수 쿠키페이에서 발급받은 결제 연동ID
ORDERNO 50 주문번호 필수 각 주문마다 유니크해야 합니다
PRODUCTNAME 40 상품명 필수 & 문자 포함시 오류 발생
PRODUCTCODE 10 상품코드 필수
AMOUNT 10 결제 금액 필수 숫자만 사용합니다, 100원이상일경우 첫결제가 진행됩니다.
CARDNO 16 카드번호 필수 숫자만입력
EXPIREDT 4 카드유효기간 (YYMM) 필수 유효기간 년월순
CARDPWD 2 카드비밀번호 앞 2자리 필수 카드 비밀번호 앞 2자리
CARDAUTH 6 카드소유자 생년월일(YYMMDD) 필수 생년월일 YYMMDD 혹은 사업자번호 10자리
QUOTA 2 할부개월 필수 일시불:00, 2개월:02, ... 12개월:12 (최대12개월)
TAXFREECD 1 과세여부 필수 과세:Y, 비과세:N
BUYERNAME 20 고객명 필수 결제자 이름
BUYERID 20 고객 ID 선택
BUYERADDRESS 100 고객 주소 선택
BUYERPHONE 20 고객 휴대폰번호 선택
BUYEREMAIL 50 고객 e-mail 선택
USEHANACARD 1 하나카드로 빌링키 발급시 필요 선택 키움페이 가맹점 중 하나카드로 빌링키 발급 'Y'
* 2024년10월15일 이후 가입 가맹점은 해당사항 없음
ETC1 100 사용자 추가 필드1 선택 입력시 응답파라미터에 값을 전달합니다
ETC2 100 사용자 추가 필드2 선택 입력시 응답파라미터에 값을 전달합니다
ETC3 100 사용자 추가 필드3 선택 입력시 응답파라미터에 값을 전달합니다
ETC4 100 사용자 추가 필드4 선택 입력시 응답파라미터에 값을 전달합니다
ETC5 100 사용자 추가 필드5 선택 입력시 응답파라미터에 값을 전달합니다
RECURRENCE_PAY 1 반복결제 여부 선택 반복결제 등록을 원할 때 : Y
RECURRENCE_TYPE 1 반복 주기
RECURRENCE_PAY=Y 일때 "필수"
선택/필수 M: 월간, W: 주간
PAY_DAY 2 결제일 / 결제요일

RECURRENCE_PAY=Y 일때 "필수"
• RECURRENCE_TYPE=M 일때
원하는 결제일을 입력 : 1,2,......31

• RECURRENCE_TYPE=W 일때 원하는 결제일을 입력 : 0,1,2,3,4,5,6
(0:일,1:월,2:화,3:수,4:목,5:금,6:토)
선택/필수 • RECURRENCE_TYPE=M 인경우
- 원하는 결제일이 등록당시 일자보다 작거나 같으면 다음달로 결제일이 설정됩니다.
예1) 등록일 : 2025-03-15,
       요청 결제일 : 10일,
       다음 결제일 : 2025-04-10
예2) 등록일 : 2025-03-15,
       요청 결제일 : 15일,
       다음 결제일 : 2025-04-15
- 원하는 결제일이 등록당시 일자보다 크면 등록 월의 결제일이 설정됩니다.
예3) 등록일 : 2025-03-15,
       요청 결제일 : 16일,
       다음 결제일 : 2025-03-16

• RECURRENCE_TYPE=W 인 경우
- 원하는 결제일이 등록당시 요일 보다 작거나 같으면 다음 주로 결제일이 설정됩니다.
예1) 등록일 : 2025-03-12 (수)
       요청 결제일 : 2 (화요일)
       다음 결제일 : 2025-03-18 (화)
예2) 등록일 : 2025-03-12 (수)
       요청 결제일 : 3 (수요일)
       다음 결제일 : 2025-03-19 (수)

- 원하는 결제일이 등록당시 요일보다 크면 등록 주의 결제일이 설정됩니다.
예3) 등록일 : 2025-03-12 (수)
       요청 결제일 : 4 (목요일)
       다음 결제일 : 2025-03-13 (목)
START_PAY_CNT 3 시작 회차 (숫자)
RECURRENCE_PAY=Y 일때 "필수"
선택/필수 등록 후 처음 결제에 적용되는 회차 1 이상을 입력
LAST_PAY_CNT 3 종료 회차 (숫자)
RECURRENCE_PAY=Y 일때 "필수"
선택/필수 종료회차 결제 후 반복결제가 종료됨 0 : 제한없음, 그외의 숫자
1-1-9. 샘플예제
1-1-9-1. CURL
/* 토큰 발급 API */
curl -H "Content-Type: application/json" \
     -d '{
         "pay2_id": "cookiepayments에서 발급받은 연동ID",
         "pay2_key": "cookiepayments에서 발급받은 연동 시크릿키"
         }' \
     -X POST "{요청도메인}/payAuth/token"

/* 정기결제 API */
curl -H "Content-Type: application/json" \
     -H "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키" \
     -H "TOKEN: TOKEN API통해 발행된 TOKEN 값" \
     -d '{
            "API_ID": "COOKIEPAY에서 발급받은 가맹점 연동ID",
            "ORDERNO": "주문번호",
            "PRODUCTNAME": "상품명",
            "PRODUCTCODE": "상품코드",
            "AMOUNT": "결제금액",
            "CARDNO": "카드번호",
            "EXPIREDT": "카드유효기간 (YYMM)",
            "CARDPWD": "카드비밀번호 앞 2자리",
            "CARDAUTH": "카드소유자 생년월일(YYMMDD)",
            "QUOTA":"할부개월",
            "BUYERNAME": "고객명",
            "BUYERID": "고객 ID",
            "BUYERPHONE":"고객 휴대폰번호",
            "BUYEREMAIL":"고객 E-MAIL",
        }' \
     -X POST "{요청도메인}/Subscribe/billkeygen"
1-1-9-2. PHP
/* 토큰 발행 API */
$tokenheaders = array(); 
array_push($tokenheaders, "content-type: application/json; charset=utf-8");

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

$token_request_data = array(
    'pay2_id' => 'cookiepayments에서 발급받은 연동ID',
    'pay2_key'=> 'cookiepayments에서 발급받은 연동 시크릿키',
);

$req_json = json_encode($token_request_data, TRUE);

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

curl_setopt($ch,CURLOPT_URL, $token_url);
curl_setopt($ch,CURLOPT_POST, false);
curl_setopt($ch,CURLOPT_POSTFIELDS, $req_json);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $tokenheaders);
$RES_STR = curl_exec($ch);
curl_close($ch);
$RES_STR = json_decode($RES_STR,TRUE);
/* 여기 까지 */
if($RES_STR['RTN_CD'] == '0000'){

$headers = array(); 
array_push($headers, "content-type: application/json; charset=utf-8");
array_push($headers, "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키");
array_push($headers, "TOKEN: TOKEN API통해 발행된 TOKEN 값");

$cookiepayments_url = "{요청도메인}/Subscribe/billkeygen";

$request_data_array = array(
                                'API_ID' => 'COOKIEPAY에서 발급받은 가맹점연동ID',
                                'ORDERNO' => '주문번호',
                                'PRODUCTNAME' => '상품명',
                                'PRODUCTCODE' => '상품코드',
                                'AMOUNT' => '결제금액',
                                'CARDNO' => '카드번호',
                                'EXPIREDT' => '카드유효기간 (YYMM)',
                                'CARDPWD' => '카드비밀번호 앞 2자리',
                                'CARDAUTH' => '카드소유자 생년월일(YYMMDD)',
                                'QUOTA' => '할부개월',
                                'BUYERNAME' => '고객명',
                                'BUYERID' => '고객 ID',
                                'BUYERPHONE' => '고객 휴대폰번호',
                                'BUYEREMAIL' => '고객 E-MAIL',
                        );

$cookiepayments_json = json_encode($request_data_array, TRUE);

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

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 ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);


1-1-10. 응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
ENC_DATA 암호호된 리턴값 선택 암호회된 리턴값 (성공시 존재)
1-1-11. 응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "ENC_DATA": "uCAMEsaW+tdhYKcIvzbezan137Igm4u0dEMawS93EhwaaoLE+lAgiMH07ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}
1-1-12. 응답전문 파라미터 > 복호화 응답 파라미터 ( 암호화 전문 복호화하기 참조)
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) 복호화 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) 복호화 응답 메시지 ("성공" 또는 오류 메세지)
decryptData 복호화된 데이터 필수(JSON)
    BILLKEY 20 빌링키 필수(JSON) 정기결제에 사용될 빌링키
    GENDATE 50 빌링키 생성일자 필수(JSON) 빌링키 생성일자
    ORDERNO 50 주문번호 필수(JSON) 결제한 주문번호
    AMOUNT 10 결제 된 금액 필수(JSON) 결제요청시 결제된 금액
    TID 50 PG 거래 고유번호 필수(JSON) PG사 결제 거래고유번호
(전표출력 및 결제취소에 사용됩니다)
    ACCEPTDATE 20 승인일시 필수(JSON) PG사 결제 승인일시
    ACCEPTNO 10 승인번호 필수(JSON) PG사 결제 승인번호
    BUYERNAME 20 고객명 필수(JSON)
    BUYERID 20 고객 ID 필수(JSON)
    BUYERADDRESS 100 고객 주소 필수(JSON)
    BUYERPHONE 20 고객 휴대폰번호 필수(JSON)
    BUYEREMAIL 50 고객 e-mail 선택(JSON)
    CARDCODE 4 카드사코드 선택(JSON) PG사가 제공해주는 카드사 코드
(AMOUNT가 '0'일때만 값이 존재)
    RESERVE_RESULTCODE 4 반복결제 등록 결과 코드 선택(JSON) RECURRENCE_PAY=Y 일때만 존재
    RESERVE_RESULTMSG 100 반복결제 등록 결과 메시지 선택(JSON) RECURRENCE_PAY=Y 일때만 존재
    RESERVE_ID 36 반복결제 등록ID 선택(JSON) RECURRENCE_PAY=Y 일때만 존재
반복결제 등록시에 생성되는 키값입니다.
    RESERVE_ORDERNO 50 반복결제 등록 주문번호 선택(JSON) RECURRENCE_PAY=Y 일때만 존재
    RESERVE_RECURRENCE_TYPE 1 반복결제 주기 선택(JSON) RECURRENCE_PAY=Y 일때만 존재
    RESERVE_PAY_DAY 2 반복결제 일/요일 선택(JSON) RECURRENCE_PAY=Y 일때만 존재
    RESERVE_NOW_PAY_CNT 3 반복결제 현재 회차 선택(JSON) RECURRENCE_PAY=Y 일때만 존재
    RESERVE_START_PAY_CNT 3 반복결제 시작 회차 선택(JSON) RECURRENCE_PAY=Y 일때만 존재
    RESERVE_LAST_PAY_CNT 3 반복결제 종료 회차 선택(JSON) RECURRENCE_PAY=Y 일때만 존재
    RESERVE_NEXT_PAY_DATE 10 반복결제 다음 결제일 선택(JSON) RECURRENCE_PAY=Y 일때만 존재
1-1-13. 복호화 응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "decryptData": {
      "BILLKEY": "발급된BILLKEY",
      "GENDATE": "20220920135340",
      "ORDERNO": "TEST-ORDER-220920-094625",
      "AMOUNT": "0",
      "TID": "",
      "ACCEPTDATE": "",
      "ACCEPTNO": "",
      "BUYERNAME": "홍길동",
      "BUYERID": "BUYERID",
      "BUYERADDRESS": "BUYERADDRESS",
      "BUYERPHONE": "010-1234-5678",
      "BUYEREMAIL": "ufound@gmail.com"
      "CARDCODE": "CCLG"
  }
}


1-2. 빌링키 발급/결제 하기 - 인증방식 (모빌페이만 가능)

1-2-1.기본도메인(요청도메인)
라이브 : https://www.cookiepayments.com [POST] 
테스트 : https://sandbox.cookiepayments.com [POST] 
1-2-2. URL
{요청도메인}/pay/ready [POST]
1-2-3. 요청 전문 파라미터

요청 시 주의사항 (필독)

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

항목명 길이 내용 구분 비고
API_ID 20 쿠키페이 결제 연동ID 필수 쿠키페이에서 발급받은 결제 연동ID
ORDERNO 50 주문번호 필수 각 주문마다 유니크해야 합니다
PRODUCTNAME 40 상품명 필수 & 문자 포함시 오류 발생
AMOUNT 10 결제 금액 필수 숫자만 사용합니다. 반복결게 등록 할때는 100원이상 입니다.
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 선택 입력시 응답파라미터에 값을 전달합니다
RECURRENCE_PAY 1 반복결제 여부 선택 반복결제 등록을 원할 때 : Y
RECURRENCE_TYPE 1 반복 주기
RECURRENCE_PAY=Y 일때 "필수"
선택/필수 M: 월간, W: 주간
PAY_DAY 2 결제일 / 결제요일

RECURRENCE_PAY=Y 일때 "필수"
• RECURRENCE_TYPE=M 일때
원하는 결제일을 입력 : 1,2,......31

• RECURRENCE_TYPE=W 일때 원하는 결제일을 입력 : 0,1,2,3,4,5,6
(0:일,1:월,2:화,3:수,4:목,5:금,6:토)
선택/필수 • RECURRENCE_TYPE=M 인경우
- 원하는 결제일이 등록당시 일자보다 작거나 같으면 다음달로 결제일이 설정됩니다.
예1) 등록일 : 2025-03-15,
       요청 결제일 : 10일,
       다음 결제일 : 2025-04-10
예2) 등록일 : 2025-03-15,
       요청 결제일 : 15일,
       다음 결제일 : 2025-04-15
- 원하는 결제일이 등록당시 일자보다 크면 등록 월의 결제일이 설정됩니다.
예3) 등록일 : 2025-03-15,
       요청 결제일 : 16일,
       다음 결제일 : 2025-03-16

• RECURRENCE_TYPE=W 인 경우
- 원하는 결제일이 등록당시 요일 보다 작거나 같으면 다음 주로 결제일이 설정됩니다.
예1) 등록일 : 2025-03-12 (수)
       요청 결제일 : 2 (화요일)
       다음 결제일 : 2025-03-18 (화)
예2) 등록일 : 2025-03-12 (수)
       요청 결제일 : 3 (수요일)
       다음 결제일 : 2025-03-19 (수)

- 원하는 결제일이 등록당시 요일보다 크면 등록 주의 결제일이 설정됩니다.
예3) 등록일 : 2025-03-12 (수)
       요청 결제일 : 4 (목요일)
       다음 결제일 : 2025-03-13 (목)
START_PAY_CNT 3 시작 회차 (숫자)
RECURRENCE_PAY=Y 일때 "필수"
선택/필수 등록 후 처음 결제에 적용되는 회차 1 이상을 입력
LAST_PAY_CNT 3 종료 회차 (숫자)
RECURRENCE_PAY=Y 일때 "필수"
선택/필수 종료회차 결제 후 반복결제가 종료됨 0 : 제한없음, 그외의 숫자
RECURRENCE_RETURNURL 200 반복결제 결과 값 받는 주소 선택 반복결제 후 결과를 보내주는 URL, 없을시 "PG사 조회및 연동설정"의 "PG연동설정"에 설정된 "통지URL"로 보내집니다.
1-2-4. JAVASCRIPT

1-2-3-1. 쿠키페이 라이브러리 추가

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

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

1-2-3-2. 빌링키 발급/결제 준비하기

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

1-2-3-3. 빌링키 발급/결제 요청하기

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 (선택)
});

1-2-3-4. 샘플 예제

<!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.4.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>
1-2-5. CURL

샘플 예제

curl -H "Content-Type: application/json" \
     -H "User-Agent: User-Agent 값(모바일, 피시 구분에 사용됨)" \
     -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"
1-2-6. 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);
1-2-7. 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);
        }
    }

}
1-2-8. 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.4.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>
1-2-9. 빌링키 발급/결제 응답 전문 파라미터(암호화 리턴)

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

항목명 길이 내용 구분 비고
API_ID 20 쿠키페이 결제 연동ID 필수 쿠키페이에서 발급받은 결제 연동ID
RESULTCODE 4 결과 코드 필수 암호화 리턴 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메세지 필수 암호화 리턴 응답 메시지 ("성공" 또는 오류 메세지)
ENC_DATA 암호호된 리턴값 필수 암호회된 리턴값
1-2-10. 응답 전문 파라미터 > 복호화 (암호화 전문 복호화하기 참조)

결과값은 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 빌링키 생성일자 필수 빌링키 생성일자
    RESERVE_RESULTCODE 4 반복결제 등록 결과 코드 선택 RECURRENCE_PAY=Y 일때만 존재
    RESERVE_RESULTMSG 100 반복결제 등록 결과 메시지 선택 RECURRENCE_PAY=Y 일때만 존재
    RESERVE_ID 36 반복결제 등록ID 선택 RECURRENCE_PAY=Y 일때만 존재
    RESERVE_ORDERNO 50 반복결제 등록 주문번호 선택 RECURRENCE_PAY=Y 일때만 존재
    RESERVE_RECURRENCE_TYPE 1 반복결제 주기 선택 RECURRENCE_PAY=Y 일때만 존재
    RESERVE_PAY_DAY 2 반복결제 일/요일 선택 RECURRENCE_PAY=Y 일때만 존재
    RESERVE_NOW_PAY_CNT 3 반복결제 현재 회차 선택 RECURRENCE_PAY=Y 일때만 존재
    RESERVE_START_PAY_CNT 3 반복결제 시작 회차 선택 RECURRENCE_PAY=Y 일때만 존재
    RESERVE_LAST_PAY_CNT 3 반복결제 종료 회차 선택 RECURRENCE_PAY=Y 일때만 존재
    RESERVE_NEXT_PAY_DATE 10 반복결제 다음 결제일 선택 RECURRENCE_PAY=Y 일때만 존재
1-2-11. 복호화 응답데이터 예2
{
  "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",
  }
}


1-2-12. 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');

}


2. 빌링키로 결제 요청하기/응답받기

2-1. 빌링키로 결제 요청하기

2-1-1. 기본도메인(요청도메인)
라이브 : https://www.cookiepayments.com [POST] 
테스트 : https://sandbox.cookiepayments.com [POST] 
2-1-2. TOKEN 발행 URL
{요청도메인}/payAuth/token [POST]
2-1-3. 빌링키로 결제 요청 URL
{요청도메인}/Subscribe/payments [POST]
2-1-4. 요청 전문 파라미터
항목명 길이 내용 구분 비고
ApiKey 제한없음 쿠키페이 결제 연동 시크릿키 필수(헤더) 쿠키페이에서 발급받은 결제 연동 시크릿키
TOKEN 제한없음 인증 TOKEN 필수(헤더) TOKEN 발급 API통해 발급 TOKEN 값
API_ID 20 쿠키페이 결제 연동ID 필수 쿠키페이에서 발급받은 결제 연동ID
BILLKEY 20 빌링키 필수(JSON) 발급받은 빌링키
ORDERNO 50 주문번호 필수 각 주문마다 유니크해야 합니다
PRODUCTNAME 40 상품명 필수 & 문자 포함시 오류 발생
PRODUCTCODE 10 상품코드 필수
AMOUNT 10 결제 금액 필수 숫자만 사용합니다, 100원이상일경우 첫결제가 진행됩니다.
TAXFREECD 1 과세여부 필수 과세:Y, 비과세:N
QUOTA 2 할부개월 필수 일시불:00, 2개월:02, ... 12개월:12 (최대12개월)
BUYERNAME 20 고객명 필수 결제자 이름
BUYERID 20 고객 ID 선택
BUYERPHONE 20 고객 휴대폰번호 선택
BUYEREMAIL 50 고객 e-mail 선택
BUYERADDRESS 100 고객 주소 선택
2-1-5. 샘플예제
2-1-5-1. CURL
/* 토큰 발급 API */
curl -H "Content-Type: application/json" \
     -d '{
         "pay2_id": "cookiepayments에서 발급받은 연동ID",
         "pay2_key": "cookiepayments에서 발급받은 연동 시크릿키"
         }' \
     -X POST "{요청도메인}/payAuth/token"

/* 정기결제 API */
curl -H "Content-Type: application/json" \
     -H "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키" \
     -H "TOKEN: TOKEN API통해 발행된 TOKEN 값" \
     -d '{
            "API_ID": "COOKIEPAY에서 발급받은 가맹점연동ID",
            "BILLKEY": "빌링키",
            "ORDERNO": "주문번호",
            "PRODUCTNAME": "상품명",
            "PRODUCTCODE": "상품코드",
            "AMOUNT": "결제금액",
            "TAXFREECD":"과세여부",
            "QUOTA":"할부개월",
            "BUYERID": "고객 ID",
            "BUYERNAME": "고객명",
            "BUYERPHONE":"고객 휴대폰번호",
            "BUYEREMAIL":"고객 E-MAIL",
            "BUYERADDRESS":"고객 주소",
        }' \
     -X POST "{요청도메인}/Subscribe/payments"
2-1-5-2. PHP
/* 토큰 발행 API */
$tokenheaders = array(); 
array_push($tokenheaders, "content-type: application/json; charset=utf-8");

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

$token_request_data = array(
    'pay2_id' => 'cookiepayments에서 발급받은 연동ID',
    'pay2_key'=> 'cookiepayments에서 발급받은 연동 시크릿키',
);

$req_json = json_encode($token_request_data, TRUE);

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

curl_setopt($ch,CURLOPT_URL, $token_url);
curl_setopt($ch,CURLOPT_POST, false);
curl_setopt($ch,CURLOPT_POSTFIELDS, $req_json);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $tokenheaders);
$RES_STR = curl_exec($ch);
curl_close($ch);
$RES_STR = json_decode($RES_STR,TRUE);
/* 여기 까지 */
if($RES_STR['RTN_CD'] == '0000'){

$headers = array(); 
array_push($headers, "content-type: application/json; charset=utf-8");
array_push($headers, "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키");
array_push($headers, "TOKEN: TOKEN API통해 발행된 TOKEN 값");

$cookiepayments_url = "{요청도메인}/Subscribe/payments";

$request_data_array = array(
                                'API_ID' => 'COOKIEPAY에서 발급받은 가맹점연동ID',
                                'BILLKEY' => '빌링키',
                                'ORDERNO' => '주문번호',
                                'PRODUCTNAME' => '상품명',
                                'PRODUCTCODE' => '상품코드',
                                'AMOUNT' => '결제금액',
                                'TAXFREECD' => '과세여부',
                                'QUOTA' => '할부개월',
                                'BUYERID' => '고객 ID',
                                'BUYERNAME' => '고객명',
                                'BUYERPHONE' => '고객 휴대폰번호',
                                'BUYEREMAIL' => '고객 E-MAIL',
                                'BUYERADDRESS'=>'고객 주소',
                        );

$cookiepayments_json = json_encode($request_data_array, TRUE);

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

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 ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

2-2. 빌링키로 결제 요청결과 응답받기

2-2-1. 응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
ENC_DATA 암호호된 리턴값 선택 암호회된 리턴값 (성공시 존재)
2-2-2. 응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "ENC_DATA": "uCAMEsaW+tdhYKcIvzbezan137Igm4u0dEMawS93EhwaaoLE+lAgiMH07ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}
2-2-3. 응답전문 파라미터 > 복호화 응답 파라미터 (암호화 전문 복호화하기 참조)
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) 복호화 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) 복호화 응답 메시지 ("성공" 또는 오류 메세지)
decryptData 복호화 데이터 필수(JSON)
    BILLKEY 20 빌링키 필수(JSON) 정기결제에 사용될 빌링키
    ORDERNO 50 주문번호 필수(JSON) 결제한 주문번호
    AMOUNT 10 결제 된 금액 필수(JSON) 결제요청시 결제된 금액
    TID 50 PG 거래 고유번호 필수(JSON) PG사 결제 거래고유번호 (전표출력 및 결제취소에 사용됩니다)
    ACCEPTDATE 20 승인일시 필수(JSON) PG사 결제 승인일시
    ACCEPTNO 10 승인번호 필수(JSON) PG사 결제 승인번호
    BUYERNAME 20 고객명 필수(JSON)
    BUYERID 20 고객 ID 필수(JSON)
    BUYERADDRESS 100 고객 주소 필수(JSON)
    BUYERPHONE 20 고객 휴대폰번호 필수(JSON)
    BUYEREMAIL 50 고객 e-mail 선택(JSON)
2-2-4. 복호화 응답데이터 예
{
    "RESULTCODE": "0000",
    "RESULTMSG": "성공",
    "decryptData": {
        "BILLKEY": "결제요청한BILLKEY",
        "ORDERNO": "TEST-ORDER-220920-094625",
        "AMOUNT": "100",
        "TID": "cEH000000000000000",
        "ACCEPTDATE": "20220528133047",
        "ACCEPTNO": "00000000",
        "BUYERNAME": "홍길동",
        "BUYERID": "guest",
        "BUYERADDRESS": "",
        "BUYERPHONE": "",
        "BUYEREMAIL": ""
    }
}


3. 반복결제 구현하기

3-1. 반복결제 등록하기

3-1-1. 기본도메인(요청도메인)
라이브 : https://www.cookiepayments.com [POST] 
테스트 : https://sandbox.cookiepayments.com [POST] 
3-1-2. TOKEN 발행 URL
{요청도메인}/payAuth/token [POST]
3-1-3. 반복결제 요청 URL
{요청도메인}/Subscribe/recurrence_schedule_reserve [POST]
3-1-4. 요청 전문 파라미터
항목명 길이 내용 구분 비고
ApiKey 제한없음 쿠키페이 결제 연동 시크릿키 필수(헤더) 쿠키페이에서 발급받은 결제 연동 시크릿키
TOKEN 제한없음 인증 TOKEN 필수(헤더) TOKEN 발급 API통해 발급 TOKEN 값
API_ID 20 쿠키페이 결제 연동ID 필수 쿠키페이에서 발급받은 결제 연동ID
BILLKEY 20 빌링키 필수(JSON) 발급받은 빌링키
ORDERNO 50 주문번호 필수 각 주문마다 유니크해야 합니다
PRODUCTNAME 40 상품명 필수 & 문자 포함시 오류 발생
PRODUCTCODE 10 상품코드 필수
AMOUNT 10 결제 금액 필수 숫자만 사용합니다, 100원이상일경우 첫결제가 진행됩니다.
TAXFREECD 1 과세여부 필수 과세:Y, 비과세:N
QUOTA 2 할부개월 필수 일시불:00, 2개월:02, ... 12개월:12 (최대12개월)
BUYERNAME 20 고객명 필수 결제자 이름
RECURRENCE_TYPE 1 반복 주기 필수 M: 월간, W: 주간
PAY_DAY 1 결제일 / 결제요일

• RECURRENCE_TYPE=M 일때
원하는 결제일을 입력 : 1,2,......31

• RECURRENCE_TYPE=W 일때 원하는 결제일을 입력 : 0,1,2,3,4,5,6
(0:일,1:월,2:화,3:수,4:목,5:금,6:토)
필수 • RECURRENCE_TYPE=M 인경우
- 원하는 결제일이 등록당시 일자보다 작거나 같으면 다음달로 결제일이 설정됩니다.
예1) 등록일 : 2025-03-15,
       요청 결제일 : 10일,
       다음 결제일 : 2025-04-10
예2) 등록일 : 2025-03-15,
       요청 결제일 : 15일,
       다음 결제일 : 2025-04-15
- 원하는 결제일이 등록당시 일자보다 크면 등록 월의 결제일이 설정됩니다.
예3) 등록일 : 2025-03-15,
       요청 결제일 : 16일,
       다음 결제일 : 2025-03-16

• RECURRENCE_TYPE=W 인 경우
- 원하는 결제일이 등록당시 요일 보다 작거나 같으면 다음 주로 결제일이 설정됩니다.
예1) 등록일 : 2025-03-12 (수)
       요청 결제일 : 2 (화요일)
       다음 결제일 : 2025-03-18 (화)
예2) 등록일 : 2025-03-12 (수)
       요청 결제일 : 3 (수요일)
       다음 결제일 : 2025-03-19 (수)

- 원하는 결제일이 등록당시 요일보다 크면 등록 주의 결제일이 설정됩니다.
예3) 등록일 : 2025-03-12 (수)
       요청 결제일 : 4 (목요일)
       다음 결제일 : 2025-03-13 (목)
START_PAY_CNT 3 시작 회차 (숫자) 필수 등록 후 처음 결제에 적용되는 회차 1 이상을 입력
LAST_PAY_CNT 3 종료 회차 (숫자) 필수 종료회차 결제 후 반복결제가 종료됨 0 : 제한없음, 그외의 숫자
BUYERID 3 고객 ID 선택
BUYERPHONE 3 고객 휴대폰번호 선택
BUYEREMAIL 3 고객 e-mail 선택
BUYERADDRESS 3 고객 주소 선택
ETC1 100 사용자 추가 필드1 선택 입력시 응답파라미터에 값을 전달합니다
ETC2 100 사용자 추가 필드2 선택 입력시 응답파라미터에 값을 전달합니다
ETC3 100 사용자 추가 필드3 선택 입력시 응답파라미터에 값을 전달합니다
ETC4 100 사용자 추가 필드4 선택 입력시 응답파라미터에 값을 전달합니다
ETC5 100 사용자 추가 필드5 선택 입력시 응답파라미터에 값을 전달합니다
3-1-5. 샘플예제
3-1-5-1. CURL
/* 토큰 발급 API */
curl -H "Content-Type: application/json" \
     -d '{
         "pay2_id": "cookiepayments에서 발급받은 연동ID",
         "pay2_key": "cookiepayments에서 발급받은 연동 시크릿키"
         }' \
     -X POST "{요청도메인}/payAuth/token"

/* 정기결제 API */
curl -H "Content-Type: application/json" \
     -H "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키" \
     -H "TOKEN: TOKEN API통해 발행된 TOKEN 값" \
     -d '{
            "API_ID": "COOKIEPAY에서 발급받은 가맹점연동ID",
            "BILLKEY": "발급받은 빌링키",
            "ORDERNO": "주문번호",
            "BUYERNAME": "고객명",
            "PRODUCTNAME": "상품명",
            "PRODUCTCODE": "상품코드",
            "AMOUNT": "결제금액",
            "RECURRENCE_TYPE":"M",  // 매월
            "PAY_DAY":"15",         // 15일
            "START_PAY_CNT":"1",    // 1회부터 시작
            "LAST_PAY_CNT":"24"     // 24회까지 결제후 종료
            "TAXFREECD":"과세여부",
            "QUOTA":"할부개월",
            "BUYERID": "고객 ID",
            "BUYERPHONE":"고객 휴대폰번호",
            "BUYEREMAIL":"고객 E-MAIL",
            "BUYERADDRESS":"고객 주소",
        }' \
     -X POST "{요청도메인}/Subscribe/recurrence_schedule_reserve"
3-1-5-2. PHP
/* 토큰 발행 API */
$tokenheaders = array(); 
array_push($tokenheaders, "content-type: application/json; charset=utf-8");

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

$token_request_data = array(
    'pay2_id' => 'cookiepayments에서 발급받은 연동ID',
    'pay2_key'=> 'cookiepayments에서 발급받은 연동 시크릿키',
);

$req_json = json_encode($token_request_data, TRUE);

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

curl_setopt($ch,CURLOPT_URL, $token_url);
curl_setopt($ch,CURLOPT_POST, false);
curl_setopt($ch,CURLOPT_POSTFIELDS, $req_json);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $tokenheaders);
$RES_STR = curl_exec($ch);
curl_close($ch);
$RES_STR = json_decode($RES_STR,TRUE);
/* 여기 까지 */
if($RES_STR['RTN_CD'] == '0000'){

$headers = array(); 
array_push($headers, "content-type: application/json; charset=utf-8");
array_push($headers, "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키");
array_push($headers, "TOKEN: TOKEN API통해 발행된 TOKEN 값");

$cookiepayments_url = "{요청도메인}/Subscribe/recurrence_schedule_reserve";

$request_data_array = array(
                                "API_ID"=>"COOKIEPAY에서 발급받은 가맹점연동ID",
                                "BILLKEY"=>"빌링키",
                                "ORDERNO"=>"주문번호",
                                "BUYERNAME"=>"고객명",
                                "PRODUCTNAME"=>"상품명",
                                "PRODUCTCODE"=>"상품코드",
                                "AMOUNT"=>"100",
                                "RECURRENCE_TYPE"=>"M", // 매월
                                "PAY_DAY"=>"15",        // 15일
                                "START_PAY_CNT"=>"1",   // 1회부터 시작
                                "LAST_PAY_CNT"=>"24",   // 24회까지 결제 후 종료
                                "TAXFREECD"=>"Y",
                                "QUOTA"=>"00",
                                "BUYERID"=>"고객 ID",
                                "BUYERPHONE"=>"고객 휴대폰번호",
                                "BUYEREMAIL"=>"고객 이메일",
                                "BUYERADDRESS"=>"고객 주소"
                        );

$cookiepayments_json = json_encode($request_data_array, TRUE);

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

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 ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
3-1-6. 응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
ENC_DATA 암호호된 리턴값 선택 암호회된 리턴값 (성공시 존재)
3-1-7. 응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "ENC_DATA": "uCAMEsaW+tdhYKcIvzbezan137Igm4u0dEMawS93EhwaaoLE+lAgiMH07ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}
3-1-8. 응답전문 파라미터 > 복호화 응답 파라미터 (암호화 전문 복호화하기 참조)
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) 복호화 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) 복호화 응답 메시지 ("성공" 또는 오류 메세지)
decryptData 복호화 데이터 필수(JSON)
    BILLKEY 20 등록된 빌링키 필수(JSON)
    RESERVE_ID 36 반복결제 등록ID 필수(JSON) 반복결제 등록시에 생성되는 키값입니다.
    RESERVE_ORDERNO 50 등록 요청 주문번호 필수(JSON)
    RESERVE_AMOUNT 10 결제금액 필수(JSON)
    RESERVE_RECURRENCE_TYPE 1 반복 주기 필수(JSON) M / W
    RESERVE_PAY_DAY 2 결제일 / 요일 필수(JSON)
    RESERVE_START_PAY_CNT 3 시작회차 필수(JSON)
    RESERVE_LAST_PAY_CNT 3 종료회차 필수(JSON)
    RESERVE_NEXT_PAY_DATE 10 다음결제일 필수(JSON) 예 : 2025-03-15
    ETC1 100 사용자입력1 필수(JSON)
    ETC2 100 사용자입력2 필수(JSON)
    ETC3 100 사용자입력3 필수(JSON)
    ETC4 100 사용자입력4 필수(JSON)
    ETC5 100 사용자입력5 필수(JSON)
3-1-9, 복호화 응답데이터 예
{
    "RESULTCODE": "0000",
    "RESULTMSG": "성공",
    "decryptData": {
      "RESERVE_ID": "9jm1kkbzqjwog8kzg40o1zewv6q1",
      "RESERVE_ORDERNO": "202405060709",
      "RESERVE_AMOUNT": "100",
      "RESERVE_RECURRENCE_TYPE": "M",
      "RESERVE_PAY_DAY": "15",
      "RESERVE_START_PAY_CNT": "1",
      "RESERVE_LAST_PAY_CNT": "24",
      "RESERVE_NEXT_PAY_DATE": "2025-03-15",
      "ETC1": "",
      "ETC2": "",
      "ETC3": "",
      "ETC4": "",
      "ETC5": "",
    }
}


3-2. 등록된 반복결제 지정일에 결제 결과 통지 전문

- 반복결제시 결제성공, 결제실패, 약정조건 등 정보내역을 고객사에 통지전문(Noti)으로 통지합니다.

통지 전문(Noti)은 결제승인 또는 승인취소 응답 파라미터에 대하여 쿠키페이먼트에서 고객사로 Server To Server로 전송됩니다.
개발한 통지 URL 입력방법 : 쿠키페이먼츠 접속 후 > API 연동 메뉴 > PG사 조회 및 연동 설정 > PG 연동 버튼 클릭 > 통지 URL 입력란에 입력 후 설정 저장하시면 됩니다.
(https://www.cookiepayments.com/iroboard/view?bId=API_Devolper&wr_id=2129)

※ 보다 자세한 내용에 대해서는 통지전문(Noti) 매뉴얼에서 확인 하시기 바랍니다.



3-3. 등록된 반복결제 취소하기

3-3-1. TOKEN 발행 URL
{요청도메인}/payAuth/token [POST]
3-3-2. 반복결제 취소 요청 URL
{요청도메인}/Subscribe/recurrence_schedule_cancel [POST]
3-3-3. 요청 전문 파라미터
항목명 길이 내용 구분 비고
ApiKey 제한없음 쿠키페이 결제 연동 시크릿키 필수(헤더) 쿠키페이에서 발급받은 결제 연동 시크릿키
TOKEN 제한없음 인증 TOKEN 필수(헤더) TOKEN 발급 API통해 발급 TOKEN 값
API_ID 20 쿠키페이 결제 연동ID 필수 쿠키페이에서 발급받은 결제 연동ID
RESERVE_ID 36 등록ID 필수(JSON) 반복결제 등록에서 받은 등록ID
3-3-4. 샘플예제
3-3-4-1. CURL
/* 토큰 발급 API */
curl -H "Content-Type: application/json" \
     -d '{
         "pay2_id": "cookiepayments에서 발급받은 연동ID",
         "pay2_key": "cookiepayments에서 발급받은 연동 시크릿키"
         }' \
     -X POST "{요청도메인}/payAuth/token"

/* 정기결제 API */
curl -H "Content-Type: application/json" \
     -H "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키" \
     -H "TOKEN: TOKEN API통해 발행된 TOKEN 값" \
     -d '{
            "API_ID": "COOKIEPAY에서 발급받은 가맹점연동ID",
            "RESERVE_ID": "등록ID",
        }' \
     -X POST "{요청도메인}/Subscribe/recurrence_schedule_cancel"
3-3-4-2. PHP
/* 토큰 발행 API */
$tokenheaders = array(); 
array_push($tokenheaders, "content-type: application/json; charset=utf-8");

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

$token_request_data = array(
    'pay2_id' => 'cookiepayments에서 발급받은 연동ID',
    'pay2_key'=> 'cookiepayments에서 발급받은 연동 시크릿키',
);

$req_json = json_encode($token_request_data, TRUE);

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

curl_setopt($ch,CURLOPT_URL, $token_url);
curl_setopt($ch,CURLOPT_POST, false);
curl_setopt($ch,CURLOPT_POSTFIELDS, $req_json);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $tokenheaders);
$RES_STR = curl_exec($ch);
curl_close($ch);
$RES_STR = json_decode($RES_STR,TRUE);
/* 여기 까지 */
if($RES_STR['RTN_CD'] == '0000'){

$headers = array(); 
array_push($headers, "content-type: application/json; charset=utf-8");
array_push($headers, "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키");
array_push($headers, "TOKEN: TOKEN API통해 발행된 TOKEN 값");

$cookiepayments_url = "{요청도메인}/Subscribe/recurrence_schedule_cancel";

$request_data_array = array(
                                'API_ID' => 'COOKIEPAY에서 발급받은 가맹점연동ID',
                                'RESERVE_ID' => '등록ID',
                        );

$cookiepayments_json = json_encode($request_data_array, TRUE);

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

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 ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);


3-3-5. 응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
ENC_DATA 암호호된 리턴값 선택 암호회된 리턴값 (성공시 존재)
3-3-6. 응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "ENC_DATA": "uCAMEsaW+tdhYKcIvzbezan137Igm4u0dEMawS93EhwaaoLE+lAgiMH07ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}


3-3-7. 응답전문 파라미터 > 복호화 응답 파라미터 (암호화 전문 복호화하기 참조)
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
decryptData 복호화된 데이터 필수(JSON)
    RESERVE_ID 36 반복결제 등록ID 필수(JSON) 반복결제 등록ID
3-3-8. 복호화 응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "decryptData": {
     "RESERVE_ID": "9jm1ksbcqjxog8kzg4o01xewv5q1"
  }
}


3-4. 반복결제 등록정보내역 조회

3-4-1. TOKEN 발행
{요청도메인}/payAuth/token [POST]
3-4-2. 등록된 반복결제 정보요청 URL
{요청도메인}/Subscribe/recurrence_schedule_info [POST]
3-4-3. 요청 전문 파라미터
항목명 길이 내용 구분 비고
ApiKey 제한없음 쿠키페이 결제 연동 시크릿키 필수(헤더) 쿠키페이에서 발급받은 결제 연동 시크릿키
TOKEN 제한없음 인증 TOKEN 필수(헤더) TOKEN 발급 API통해 발급 TOKEN 값
API_ID 20 쿠키페이 결제 연동ID 필수 쿠키페이에서 발급받은 결제 연동ID
RESERVE_ID 36 반복결제 등록ID 필수 RESERVE_ID로 검색
3-4-4. 샘플예제
3-4-4-1. CURL
/* 토큰 발급 API */
curl -H "Content-Type: application/json" \
     -d '{
         "pay2_id": "cookiepayments에서 발급받은 연동ID",
         "pay2_key": "cookiepayments에서 발급받은 연동 시크릿키"
         }' \
     -X POST "{요청도메인}/payAuth/token"

/* 정기결제 API */
curl -H "Content-Type: application/json" \
     -H "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키" \
     -H "TOKEN: TOKEN API통해 발행된 TOKEN 값" \
     -d '{
            "API_ID": "COOKIEPAY에서 발급받은 가맹점연동ID",
            "RESERVE_ID": "등록ID",
        }' \
     -X POST "{요청도메인}/Subscribe/recurrence_schedule_info"
3-4-4-2. PHP
/* 토큰 발행 API */
$tokenheaders = array(); 
array_push($tokenheaders, "content-type: application/json; charset=utf-8");

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

$token_request_data = array(
    'pay2_id' => 'cookiepayments에서 발급받은 연동ID',
    'pay2_key'=> 'cookiepayments에서 발급받은 연동 시크릿키',
);

$req_json = json_encode($token_request_data, TRUE);

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

curl_setopt($ch,CURLOPT_URL, $token_url);
curl_setopt($ch,CURLOPT_POST, false);
curl_setopt($ch,CURLOPT_POSTFIELDS, $req_json);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $tokenheaders);
$RES_STR = curl_exec($ch);
curl_close($ch);
$RES_STR = json_decode($RES_STR,TRUE);
/* 여기 까지 */
if($RES_STR['RTN_CD'] == '0000'){

$headers = array(); 
array_push($headers, "content-type: application/json; charset=utf-8");
array_push($headers, "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키");
array_push($headers, "TOKEN: TOKEN API통해 발행된 TOKEN 값");

$cookiepayments_url = "{요청도메인}/Subscribe/recurrence_schedule_info";

$request_data_array = array(
                                'API_ID' => 'COOKIEPAY에서 발급받은 가맹점연동ID',
                                'RESERVE_ID' => '등록ID',
                        );

$cookiepayments_json = json_encode($request_data_array, TRUE);

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

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 ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
3-4-5. 응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
ENC_DATA 암호호된 리턴값 선택 암호회된 리턴값 (성공시 존재)
3-4-6. 응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "정상",
  "ENC_DATA": "uCAMEsaW+tdhYKcIvzbezan137Igm4u0dEMawS93EhwaaoLE+lAgiMH07ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}
3-4-7. 응답전문 파라미터 > 복호화 응답 파라미터 (암호화 전문 복호화하기 참조)
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) 복호화 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) 복호화 응답 메시지 ("성공" 또는 오류 메세지)
decryptData 복호화된 데이터 필수(JSON)
decryptData[n]['RESERVE_ID'] 등록ID 필수(JSON)
decryptData[n]['BILLKEY'] 빌링키 필수(JSON)
decryptData[n]['ORDERNO'] 주문번호 필수(JSON)
decryptData[n]['AMOUNT'] 결제금액 필수(JSON)
decryptData[n]['BUYERNAME'] 고객명 필수(JSON)
decryptData[n]['PRODUCTNAME'] 상품명 필수(JSON)
decryptData[n]['PRODUCTCODE'] 상품코드 필수(JSON)
decryptData[n]['TAXFREECD'] 과세여부 필수(JSON) Y: 과세, N: 비과세
decryptData[n]['QUOTA'] 할부개월수 필수(JSON) 00
decryptData[n]['RECURRENCE_TYPE'] 반복 주기 필수(JSON) M: 월간, W: 주간
decryptData[n]['PAY_DAY'] 결제일 / 결제요일 필수(JSON) RECURRENCE_TYPE:W 일대
(0:일,1,2,3,4,5,6:토)
decryptData[n]['NOW_PAY_CNT'] 현재 회차 필수(JSON)
decryptData[n]['NOW_PAY_STATUS'] 현재 결제 상태 필수(JSON) N:첫 결제대기, S:현재회차 결제성공,
F:현재회차 결제실패
decryptData[n]['NEXT_PAY_DATE'] 다음 결제일 필수(JSON)
decryptData[n]['LAST_PAY_CNT'] 종료 회차 필수(JSON)
decryptData[n]['REGDATE'] 등록일 필수(JSON)
decryptData[n]['STATUSDATE'] 상태변경일 필수(JSON) STATUS 상태 변경일
(예: STATUS=9 면 등록취소일이됨)
decryptData[n]['STATUS'] 상태 필수(JSON) 1:결제가능, 2:결제 진행, 7:만기종료, 9:등록취소
3-4-8. 복호화 응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "정상",
  "decryptData": [
    {
      "RESERVE_ID": "9jn1ksbcqjwog8kgg4001xxwv5q1",
      "BILLKEY": "jnjben1txbwo0oko28j1",
    "ORDERNO": "R20250320002",
    "AMOUNT": "100",
    "BUYERNAME": "홍길동",
    "PRODUCTNAME": "테스트상품1",
    "PRODUCTCODE": "PROC-001",
    "TAXFREECD": "Y",
    "QUOTA": "00",
    "RECURRENCE_TYPE": "M",
    "PAY_DAY": "19",
    "NOW_PAY_CNT": "2",
    "NOW_PAY_STATUS": "N",
    "NEXT_PAY_DATE": "2025-04-19",
    "LAST_PAY_CNT": "4",
    "REGDATE": "2025-03-20 14:33:51",
    "STATUSDATE": "2025-03-20 14:33:51",
    "STATUS": "1"
    }
  ]
}


3-5. 반복결제 즉시결제 요청 하기

3-5-1. 기본도메인(요청도메인)
라이브 : https://www.cookiepayments.com [POST] 
테스트 : https://sandbox.cookiepayments.com [POST] 
3-5-2. TOKEN 발행 URL
{요청도메인}/payAuth/token [POST]
3-5-3. 반복결제 즉시결제 요청 URL
{요청도메인}/Subscribe/recurrence_request_payment [POST]
3-5-4. 요청 전문 파라미터
항목명 길이 내용 구분 비고
ApiKey 제한없음 쿠키페이 결제 연동 시크릿키 필수(헤더) 쿠키페이에서 발급받은 결제 연동 시크릿키
TOKEN 제한없음 인증 TOKEN 필수(헤더) TOKEN 발급 API통해 발급 TOKEN 값
API_ID 20 쿠키페이 결제 연동ID 필수(JSON) 쿠키페이에서 발급받은 결제 연동ID
RESERVE_ID 36 반복결제 등록ID 필수(JSON) 반복결제 등록시 받은 키값
BILLKEY 20 빌링키 필수(JSON) 반복결제 등록시 사용한 빌링키
3-5-5. 샘플예제
3-5-5-1. CURL
/* 토큰 발급 API */
curl -H "Content-Type: application/json" \
     -d '{
         "pay2_id": "cookiepayments에서 발급받은 연동ID",
         "pay2_key": "cookiepayments에서 발급받은 연동 시크릿키"
         }' \
     -X POST "{요청도메인}/payAuth/token"

/* 정기결제 API */
curl -H "Content-Type: application/json" \
     -H "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키" \
     -H "TOKEN: TOKEN API통해 발행된 TOKEN 값" \
     -d '{
            "API_ID": "COOKIEPAY에서 발급받은 가맹점연동ID",
            "RESERVE_ID": "반복결제 등록ID",
            "BILLKEY": "발급받은 빌링키"
        }' \
     -X POST "{요청도메인}/Subscribe/recurrence_request_payment"
3-5-5-2. PHP
/* 토큰 발행 API */
$tokenheaders = array(); 
array_push($tokenheaders, "content-type: application/json; charset=utf-8");

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

$token_request_data = array(
    'pay2_id' => 'cookiepayments에서 발급받은 연동ID',
    'pay2_key'=> 'cookiepayments에서 발급받은 연동 시크릿키',
);

$req_json = json_encode($token_request_data, TRUE);

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

curl_setopt($ch,CURLOPT_URL, $token_url);
curl_setopt($ch,CURLOPT_POST, false);
curl_setopt($ch,CURLOPT_POSTFIELDS, $req_json);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $tokenheaders);
$RES_STR = curl_exec($ch);
curl_close($ch);
$RES_STR = json_decode($RES_STR,TRUE);
/* 여기 까지 */
if($RES_STR['RTN_CD'] == '0000'){

$headers = array(); 
array_push($headers, "content-type: application/json; charset=utf-8");
array_push($headers, "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키");
array_push($headers, "TOKEN: TOKEN API통해 발행된 TOKEN 값");

$cookiepayments_url = "{요청도메인}/Subscribe/recurrence_request_payment";

$request_data_array = array(
                                "API_ID"=>"COOKIEPAY에서 발급받은 가맹점연동ID",
                                "RESERVE_ID"=>"반복결제 등록ID",
                                "BILLKEY"=>"발급받은 빌링키"
                        );

$cookiepayments_json = json_encode($request_data_array, TRUE);

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

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 ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
3-5-6. 반복결제 즉시결제 응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 64 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
ENC_DATA 암호호된 리턴값 선택 암호회된 리턴값 (성공시 존재)
3-5-7. 반복결제 즉시결제 응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "ENC_DATA": "AMbS3lkWNqTluTo5D4uziA6ijoQGq6vx6T40CRBmCtfER1QiZR...7ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}
3-5-8. 반복결제 즉시결제 응답전문 파라미터 > 복호화 응답 파라미터 (암호화 전문 복호화하기 참조)
항목명 길이 내용 구분 비고
RESULTCODE 64 결과 코드 필수(JSON) 복호화 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) 복호화 응답 메시지 ("성공" 또는 오류 메세지)
decryptData 복호화된 데이터 필수(JSON)
    API_ID 20 쿠키페이 결제 연동 id 필수(json) 쿠키페이에서 발급받은 결제 연동 id
    RESERVE_ID 36 반복결제 등록ID 필수(json) 즉시결제 요청한 반복결제 등록ID
    BILLKEY 20 빌링키 필수(json) 반복결제 등록에 사욯한 정기결제 빌링키
    RESERVE_ORDERNO 50 등록 주문번호 필수(json) 반복결제 등록시 입력한 주문번호
    ORDERNO 50 주문번호 필수(json) 주문번호
    AMOUNT 10 결제 된 금액 필수(json)
    TID 20 PG 거래 고유번호 필수(json) PG사 결제 거래고유번호 (전표출력 및 결제취소에 사용됩니다)
    BUYEREMAIL 50 고객 이메일 선택(json)
    BUYERNAME 20 고객 이름 필수(json)
    BUYERID 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개월)
    PAY_CNT 3 결제 회차 필수(json) 즉시결재 한 회차
    LAST_PAY_CNT 3 종료 회차 필수(json)
    TRY_CNT 1 결제 시도 횟수 필수(json)
    NEXT_PAY_DATE 10 다음 결제일 필수(json)
    RESULTCODE 4 결제 결과 코드 필수(json) 결제 성공시 "0000", 그외 에러
    RESULTMSG 100 결제 결과 메시지 필수(json) 결제 "성공" 또는 오류 메세지
    ETC1 100 사용자 추가 필드1 선택(json) 결제 요청시 입력한 값
    ETC2 100 사용자 추가 필드2 선택(json) 결제 요청시 입력한 값
    ETC3 100 사용자 추가 필드3 선택(json) 결제 요청시 입력한 값
    ETC4 100 사용자 추가 필드4 선택(json) 결제 요청시 입력한 값
    ETC5 100 사용자 추가 필드5 선택(json) 결제 요청시 입력한 값
3-5-9. 복호화 응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "decryptData": {
      "BILLKEY": "발급된BILLKEY",
      "GENDATE": "20220920135340",
      "ORDERNO": "TEST-ORDER-220920-094625",
      "AMOUNT": "0",
      "TID": "",
      "ACCEPTDATE": "",
      "ACCEPTNO": "",
      "BUYERNAME": "홍길동",
      "BUYERID": "BUYERID",
      "BUYERADDRESS": "BUYERADDRESS",
      "BUYERPHONE": "010-1234-5678",
      "BUYEREMAIL": "ufound@gmail.com"
      "CARDCODE": "CCLG"
  }
}


4. 빌링키 폐기하기

4-1. TOKEN 발행 URL
{요청도메인}/payAuth/token [POST]
4-2. 빌링키 폐기 URL
{요청도메인}/Subscribe/billingkeycancel [POST]
4-3. 요청 전문 파라미터
항목명 길이 내용 구분 비고
ApiKey 제한없음 쿠키페이 결제 연동 시크릿키 필수(헤더) 쿠키페이에서 발급받은 결제 연동 시크릿키
TOKEN 제한없음 인증 TOKEN 필수(헤더) TOKEN 발급 API통해 발급 TOKEN 값
API_ID 20 쿠키페이 결제 연동ID 필수 쿠키페이에서 발급받은 결제 연동ID
BILLKEY 20 폐기할 빌링키 필수 빌링키 발급받기에서 받은 BILLKEY
4-4. 샘플예제
4-4-1. CURL
/* 토큰 발급 API */
curl -H "Content-Type: application/json" \
     -d '{
         "pay2_id": "cookiepayments에서 발급받은 연동ID",
         "pay2_key": "cookiepayments에서 발급받은 연동 시크릿키"
         }' \
     -X POST "{요청도메인}/payAuth/token"

/* 정기결제 API */
curl -H "Content-Type: application/json" \
     -H "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키" \
     -H "TOKEN: TOKEN API통해 발행된 TOKEN 값" \
     -d '{
         "API_ID": "COOKIEPAY에서 발급받은 가맹점연동ID",
         "BILLKEY": "빌링키",
         }' \
     -X POST "{요청도메인}/Subscribe/billingkeycancel"
4-4-2. PHP
/* 토큰 발행 API */
$tokenheaders = array(); 
array_push($tokenheaders, "content-type: application/json; charset=utf-8");

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

$token_request_data = array(
    'pay2_id' => 'cookiepayments에서 발급받은 연동ID',
    'pay2_key'=> 'cookiepayments에서 발급받은 연동 시크릿키',
);

$req_json = json_encode($token_request_data, TRUE);

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

curl_setopt($ch,CURLOPT_URL, $token_url);
curl_setopt($ch,CURLOPT_POST, false);
curl_setopt($ch,CURLOPT_POSTFIELDS, $req_json);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $tokenheaders);
$RES_STR = curl_exec($ch);
curl_close($ch);
$RES_STR = json_decode($RES_STR,TRUE);
/* 여기 까지 */
if($RES_STR['RTN_CD'] == '0000'){

$headers = array(); 
array_push($headers, "content-type: application/json; charset=utf-8");
array_push($headers, "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키");
array_push($headers, "TOKEN: TOKEN API통해 발행된 TOKEN 값");

$cookiepayments_url = "{요청도메인}/Subscribe/billingkeycancel";

$request_data_array = array(
    'API_ID' => 'COOKIEPAY에서 발급받은 가맹점연동ID',
    'BILLKEY'=> '빌링키',
);

$cookiepayments_json = json_encode($request_data_array, TRUE);

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

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 ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
4-5. 응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
ENC_DATA 암호호된 리턴값 선택 암호회된 리턴값 (성공시 존재)
4-6. 응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "ENC_DATA": "uCAMEsaW+tdhYKcIvzbezan137Igm4u0dEMawS93EhwaaoLE+lAgiMH07ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}
4-7. 응답전문 파라미터 > 복호화 응답 파라미터 (암호화 전문 복호화하기 참조)
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
decryptData 복호화된 데이터 필수(JSON)
    BILLKEY 20 취소된 BILLKEY 필수(JSON) 취소된 BILLKEY, 성공시 사용 못함.
4-8. 복호화 응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "decryptData":  {
      "BILLKEY": "취소된 BILLKEY",
  }
}


5. 빌링키 조회하기

5-1. TOKEN 발행 URL
{요청도메인}/payAuth/token [POST]
5-2. 빌링키 조회 URL
{요청도메인}/Subscribe/billingkeylookup [POST]
5-3. 요청 전문 파라미터
항목명 길이 내용 구분 비고
ApiKey 제한없음 쿠키페이 결제 연동 시크릿키 필수(헤더) 쿠키페이에서 발급받은 결제 연동 시크릿키
TOKEN 제한없음 인증 TOKEN 필수(헤더) TOKEN 발급 API통해 발급 TOKEN 값
API_ID 20 쿠키페이 결제 연동ID 필수 쿠키페이에서 발급받은 결제 연동ID
BILLKEY 20 빌링키 필수 빌링키 발급받기에서 받은 BILLKEY
5-4. 샘플예제
5-4-1. CURL
/* 토큰 발급 API */
curl -H "Content-Type: application/json" \
     -d '{
         "pay2_id": "cookiepayments에서 발급받은 연동ID",
         "pay2_key": "cookiepayments에서 발급받은 연동 시크릿키"
         }' \
     -X POST "{요청도메인}/payAuth/token"

/* 정기결제 API */
curl -H "Content-Type: application/json" \
     -H "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키" \
     -H "TOKEN: TOKEN API통해 발행된 TOKEN 값" \
     -d '{
         "API_ID": "COOKIEPAY에서 발급받은 가맹점연동ID",
         "BILLKEY": "빌링키",
         }' \
     -X POST "{요청도메인}/Subscribe/billingkeylookup"
5-4-2. PHP
/* 토큰 발행 API */
$tokenheaders = array(); 
array_push($tokenheaders, "content-type: application/json; charset=utf-8");

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

$token_request_data = array(
    'pay2_id' => 'cookiepayments에서 발급받은 연동ID',
    'pay2_key'=> 'cookiepayments에서 발급받은 연동 시크릿키',
);

$req_json = json_encode($token_request_data, TRUE);

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

curl_setopt($ch,CURLOPT_URL, $token_url);
curl_setopt($ch,CURLOPT_POST, false);
curl_setopt($ch,CURLOPT_POSTFIELDS, $req_json);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $tokenheaders);
$RES_STR = curl_exec($ch);
curl_close($ch);
$RES_STR = json_decode($RES_STR,TRUE);
/* 여기 까지 */
if($RES_STR['RTN_CD'] == '0000'){

$headers = array(); 
array_push($headers, "content-type: application/json; charset=utf-8");
array_push($headers, "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키");
array_push($headers, "TOKEN: TOKEN API통해 발행된 TOKEN 값");

$cookiepayments_url = "{요청도메인}/Subscribe/billingkeylookup";

$request_data_array = array(
    'API_ID' => 'COOKIEPAY에서 발급받은 가맹점연동ID',
    'BILLKEY'=> '빌링키',
);

$cookiepayments_json = json_encode($request_data_array, TRUE);

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

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 ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);


5-5. 응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
ENC_DATA 암호호된 리턴값 선택 암호회된 리턴값 (성공시 존재)
5-6. 응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "ENC_DATA": "uCAMEsaW+tdhYKcIvzbezan137Igm4u0dEMawS93EhwaaoLE+lAgiMH07ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}
5-7. 응답전문 파라미터 > 복호화 응답 파라미터 (암호화 전문 복호화하기 참조)
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
decryptData 복호화된 데이터 필수(JSON)
    BILLKEY 20 빌링키 필수(JSON) 정기결제에 사용될 빌링키
    GENDATE 14 빌링키 생성일자 필수(JSON) 빌링키 생성일자
    ORDERNO 50 주문번호 필수(JSON) 빌링키 발급시 결제한 주문번호
    PRODUCTNAME 40 상품이름 필수(JSON) 빌링키 발급시 등록한 상품명
    PRODUCTCODE 10 상품코드 필수(JSON) 빌링키 발급시 등록한 상품코드
    AMOUNT 10 결제 된 금액 필수(JSON) 빌링키 발급시 요청한 결제 금액
    TAXFREECD 1 과세여부 필수(JSON) 빌링키 발급시 등록한 과세여부 (과세:Y, 비과세:N)
    QUOTA 2 할부개월 필수(JSON) 빌링키 발급시 등록한 할부개월 (기본:00)
    BUYERNAME 20 고객명 필수(JSON) 빌링키 발급시 등록한 고객명
    BUYERID 20 고객 ID 필수(JSON) 빌링키 발급시 등록한 고객 ID
    BUYERADDRESS 100 고객 주소 필수(JSON) 빌링키 발급시 등록한 고객 주소
    BUYERPHONE 20 고객 휴대폰번호 필수(JSON) 빌링키 발급시 등록한 고객 휴대폰번호
    BUYEREMAIL 50 고객 E-MAIN 선택(JSON) 빌링키 발급시 등록한 고객 E-MAIN
    CARDCODE 4 카드사코드 (JSON) PG사가 제공해주는 카드사 코드
(AMOUNT가 '0'인상태로 빌링키 발급시 값이 존재)
    KEY_STATUS 4 상태 필수(JSON) 사용가능, 사용불가
5-8. 복호화 응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "decryptData": {
      "BILLKEY": "조회요청한BILLKEY",
      "GENDATE": "20220920135619",
      "ORDERNO": "TEST-ORDER-220920-094625",
      "PRODUCTNAME": "테스트상품100",
      "PRODUCTCODE": "TP-100",
      "AMOUNT": "0",
      "TAXFREECD": "Y",
      "QUOTA": "00",
      "BUYERNAME": "홍길동",
      "BUYERID": "BUYERID",
      "BUYERADDRESS": "BUYERADDRESS",
      "BUYERPHONE": "010-1234-5678",
      "BUYEREMAIL": "ufound@gmail.com",
      "CARDCODE": "",
      "KEY_STATUS": "사용가능"
  }
}


6. 통지전문(Noti)

통지 전문(Noti)은 결제승인 또는 승인취소 응답 파라미터에 대하여 쿠키페이먼트에서 고객사로 Server To Server로 전송됩니다.
개발한 통지 URL 입력방법 : 쿠키페이먼츠 접속 후 > API 연동 메뉴 > PG사 조회 및 연동 설정 > PG 연동 버튼 클릭 > 통지 URL 입력란에 입력 후 설정 저장하시면 됩니다.
(https://www.cookiepayments.com/iroboard/view?bId=API_Devolper&wr_id=2129)

※ 보다 자세한 내용에 대해서는 통지전문(Noti) 매뉴얼에서 확인 하시기 바랍니다.


7. 결제정보 검증

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

※ 보자 자세한 내용에 대해서는 결제정보 검증 매뉴얼에서 확인 하시기 바랍니다.