CookiePay API 매뉴얼

정기결제

카드 정기결제 시작하기

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

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

진행 순서

  1. 빌링키 발급 요청합니다.
    • 비인증방식 - 개발사의 UI에서 지불수단을 입력받아 PG사에 전달 (클라이언트/서버사이드)
  2. 빌링키로 결제 요청하기
  3. 빌링키 조회하기
    • API를 통한 빌링키의 정보를 확인 할 수 있습니다.
빌링키를 발급받는 것이 시작이며, 발급된 빌링키로 결제를 요청하거나, 예약하거나, 결제 반복을 구현할 수 있습니다.


빌링키 발급받기

기본도메인(요청도메인)
라이브 : https://www.cookiepayments.com [POST] 
테스트 : https://sandbox.cookiepayments.com [POST] 
TOKEN 발행 URL
{요청도메인}/payAuth/token [POST]
TOKEN 요청 전문 파라미터
항목명 길이 내용 구분 비고
pay2_id 30 cookiepayments에서 발급받은 ID 필수 cookiepayments사에서 부여
pay2_key 50 cookiepayments에서 발급받은 연동키 필수 cookiepayments사에서 부여
샘플예제
CURL
/* 토큰 발급 API */
curl -H "Content-Type: application/json" \
     -d '{
         "pay2_id": "cookiepayments에서 발급받은 ID",
         "pay2_key": "cookiepayments에서 발급받은 연동키"
         }' \
     -X POST "{요청도메인}/payAuth/token"
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);
TOKEN 요청 응답 전문 파라미터
항목명 길이 내용 구분 비고
RTN_CD 4 결과 코드 필수(JSON) 응답 코드 (성공시 "0000", 그외 에러)
RTN_MSG 100 결과 메시지 필수(JSON) 응답 메시지 ("성공" 또는 오류 메세지)
TOKEN 200 인증 TOKEN 필수(JSON) 결제요청에 필요한 토큰
응답데이터 예
{
    "RTN_CD": "0000",
    "RTN_MSG": "성공",
    "TOKEN": "암호화된코드"
}


빌링키 발행 URL
{요청도메인}/Subscribe/billkeygen [POST]
요청 전문 파라미터
항목명 길이 내용 구분 비고
ApiKey 제한없음 쿠키페이 결제 연동 key 필수(헤더) 쿠키페이에서 발급받은 결제 연동 key
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 고객명 필수 결제자 이름
PRODUCTTYPE 1 상품구분 필수 상품구분(1: 디지털, 2: 실물)
BUYERID 20 고객 ID 선택
BUYERADDRESS 100 고객 주소 선택
BUYERPHONE 20 고객 휴대폰번호 선택
BUYEREMAIL 50 고객 e-mail 선택
USEHANACARD 1 하나카드로 빌링키 발행시 필요 선택 하나카드로 빌링키 발행 'Y'
샘플예제
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",
            "PRODUCTTYPE":"2",
        }' \
     -X POST "{요청도메인}/Subscribe/billkeygen"
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',
                                'PRODUCTTYPE' => '2',
                        );

$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);


응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
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'일때만 값이 존재)
응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "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"
}


빌링키 조회하기

TOKEN 발행 URL
{요청도메인}/payAuth/token [POST]
2-2 빌링키 조회 URL
{요청도메인}/Subscribe/billingkeylookup [POST]
요청 전문 파라미터
항목명 길이 내용 구분 비고
ApiKey 제한없음 쿠키페이 결제 연동 key 필수(헤더) 쿠키페이에서 발급받은 결제 연동 key
TOKEN 제한없음 인증 TOKEN 필수(헤더) TOKEN 발급 API통해 발급 TOKEN 값
API_ID 20 쿠키페이 결제 연동 id 필수 쿠키페이에서 발급받은 결제 연동 id
BILLKEY 20 빌링키 필수 빌링키 발급받기에서 받은 BILLKEY
샘플예제
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"
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);
응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
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-mail 필수(JSON) 빌링키 발급시 등록한 고객 e-mail
CARDCODE 4 카드사코드 (JSON) PG사가 제공해주는 카드사 코드
(AMOUNT가 '0'인상태로 빌링키 발급시 값이 존재)
KEY_STATUS 4 상태 필수(JSON) 사용가능, 사용불가
응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "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": "사용가능"
}


빌링키 발급 취소하기

TOKEN 발행 URL
{요청도메인}/payAuth/token [POST]
3-2 빌링키 취소 URL
{요청도메인}/Subscribe/billingkeycancel [POST]
요청 전문 파라미터
항목명 길이 내용 구분 비고
ApiKey 제한없음 쿠키페이 결제 연동 key 필수(헤더) 쿠키페이에서 발급받은 결제 연동 key
TOKEN 제한없음 인증 TOKEN 필수(헤더) TOKEN 발급 API통해 발급 TOKEN 값
API_ID 20 쿠키페이 결제 연동 id 필수 쿠키페이에서 발급받은 결제 연동 id
BILLKEY 20 취소할 빌링키 필수 빌링키 발급받기에서 받은 BILLKEY
샘플예제
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"
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);
응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
BILLKEY 20 취소된 빌링키 필수(JSON) 취소된 빌링키, 성공시 사용 못함.
응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "BILLKEY": "취소된 BILLKEY"
}


빌링키로 결제 요청하기

기본도메인(요청도메인)
라이브 : https://www.cookiepayments.com [POST] 
테스트 : https://sandbox.cookiepayments.com [POST] 
TOKEN 발행 URL
{요청도메인}/payAuth/token [POST]
빌링키로 결제 요청 URL
{요청도메인}/Subscribe/payments [POST]
요청 전문 파라미터
항목명 길이 내용 구분 비고
ApiKey 제한없음 쿠키페이 결제 연동 key 필수(헤더) 쿠키페이에서 발급받은 결제 연동 key
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 고객명 필수 결제자 이름
PRODUCTTYPE 1 상품구분 필수 상품구분(1: 디지털, 2: 실물)
BUYERID 20 고객 ID 선택
BUYERPHONE 20 고객 휴대폰번호 선택
BUYEREMAIL 50 고객 e-mail 선택
BUYERADDRESS 100 고객 주소 선택
샘플예제
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":"고객 주소",
            "PRODUCTTYPE":"2"
        }' \
     -X POST "{요청도메인}/Subscribe/payments"
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'=>'고객 주소',
                                'PRODUCTTYPE'=>'2'
                        );

$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);



응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
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)
응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "BILLKEY": "구매에사용한BILLKEY",
  "ORDERNO": "TEST-ORDER-220920-094625",
  "AMOUNT": "100",
  "TID": "결제ID",
  "ACCEPTDATE": "20220920134914",
  "ACCEPTNO": "39104501",
  "BUYERNAME": "홍길동",
  "BUYERID": "BUYERID",
  "BUYERADDRESS": "구매자주소",
  "BUYERPHONE": "010-1234-5678",
  "BUYEREMAIL": "ufound@gmail.com"
}


결제정보 검증

결제정보 검증

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

기본도메인(요청도메인)
라이브 : https://www.cookiepayments.com [POST] 
테스트 : https://sandbox.cookiepayments.com [POST] 
TOKEN 발행 URL
{요청도메인}/payAuth/token [POST]
TOKEN 요청 전문 파라미터
항목명 길이 내용 구문 비고
pay2_id 30 cookiepayments에서 발급받은 ID 필수 cookiepayments사에서 부여
pay2_key 50 cookiepayments에서 발급받은 연동키 필수 cookiepayments사에서 부여
결제 검증 URL
{요청도메인}/api/paycert [POST]
결제검증 요청 전문 파라미터
항목명 길이 내용 구문 비고
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);
}
결제검증 응답 전문 파라미터
항목명 길이 내용 구분 비고
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 4 카드사코드 (json) PG사가 제공해주는 카드사 코드

결제 예약 시작하기

결제 요청하기는해당 시점(유저 액션 또는 개발사에서 구현한 스케쥴러)에 결제를 요청하는 것이라면,
이와 다르게 미리 결제를 예약하는 방법을 소개하고자 합니다.

결제 예약은 주로 반복결제(subscription)를 구현하고자 하는 개발사에서 많이 이용합니다.
쿠키페이 정책상주기적인 반복결제(periodic)기능은 제공하지 않고 있습니다.
개발사에서 반복결제를 쉽게 구현하는 방법으로는 결제 예약 이후 해당 건 결제 결과 서버 통지시 개발사가 다음 결제를 연계하여 예약건다면, 반복결제가 쉽게 구현 가능합니다.


반복결제를 위한 예약 절차

1) 결제정보 및 예약 실행시간을 포함해 결제 예약 API로 요청합니다.

2) 예약이 성공적으로 되었다면, RESERVE_ID를 저장합니다. 예약 취소시 반드시 필요한 값 입니다.

3) 쿠키페이 서버에서 예약된 시간(매시 0분, 20분, 40분)에 결제를 실행합니다.

4) 쿠키페이 서버에서 결제 성공결과를 서버로 통지합니다.

5) 예약결제 완료 이후 다음 예약결제를 진행하려면 다시 1)번 자동결제 예약 API를 진행합니다.

결제예약 요청하기

기본도메인(요청도메인)
라이브 : https://www.cookiepayments.com [POST] 
테스트 : https://sandbox.cookiepayments.com [POST] 
TOKEN 발행 URL
{요청도메인}/payAuth/token [POST]
5-1-2 결제예약 요청 URL
{요청도메인}/Subscribe/schedule_reserve [POST]
요청 전문 파라미터
항목명 길이 내용 구분 비고
ApiKey 제한없음 쿠키페이 결제 연동 key 필수(헤더) 쿠키페이에서 발급받은 결제 연동 key
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개월)
SCHEDULE_AT 12 결제요청시간 필수 YYYYMMDDHHIISS (예:202209310612)
BUYERNAME 20 고객명 필수 결제자 이름
PRODUCTTYPE 1 상품구분 필수 상품구분(1: 디지털, 2: 실물)
BUYERID 20 고객 ID 선택
BUYERPHONE 20 고객 휴대폰번호 선택
BUYEREMAIL 50 고객 e-mail 선택
BUYERADDRESS 100 고객 주소 선택
NOTICE_URL 200 진행결과 수신할 통보 URL 선택 https://도메인/...
샘플예제
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":"할부개월",
            "SCHEDULE_AT":"결제시간(202201010101)",
            "BUYERNAME": "고객명",
            "PRODUCTTYPE": "2",
            "BUYERID": "고객 ID",
            "BUYERPHONE":"고객 휴대폰번호",
            "BUYEREMAIL":"고객 E-MAIL",
            "BUYERADDRESS":"고객 주소",
            "NOTICE_URL":"진행결과 수신할 통보 URL"
        }' \
     -X POST "{요청도메인}/Subscribe/schedule_reserve"
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/schedule_reserve";

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

$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);


응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
RESERVE_ID 28 예약ID 필수(JSON) 정기결제 예약ID
RESERVE_EXECUTE_AT 12 결제요청 시간 필수(JSON)
NOTICE_URL 200 진행결과 통보 URL 필수(JSON) http, https
응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "RESERVE_ID": "9jm1ksbzqjwog8kzg40o1xewv6q1",
  "RESERVE_EXECUTE_AT": "202209210910",
  "NOTICE_URL": "http://localhost:8080/Subscribe/noti_test"
}


통보URL 응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
RESERVE_ID 28 예약ID 필수(JSON) 정기결제 예약ID
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) 예약시 입력한 고객ID
BUYERADDRESS 100 고객 주소 필수(JSON) 예약시 입력한 고객 주소
BUYERPHONE 20 고객 휴대폰번호 필수(JSON) 예약시 입력한 고객 휴대폰번호
BUYEREMAIL 50 고객 e-mail 필수(JSON) 예약시 입력한 고객 e-mail
응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "RESERVE_ID": "9jm1ksbzqjwog8kzg40o1xewv6q1",
  "BILLKEY": "celgydqdplt4skc8e9ie",
  "ORDERNO": "TEST-ORDER-220921-1112071",
  "AMOUNT": "100",
  "TID": "cTS22092112400490628",
  "ACCEPTDATE": "20220921124003",
  "ACCEPTNO": "01002110",
  "BUYERNAME": "홍길동",
  "BUYERID": "user_id",
  "BUYERADDRESS": "",
  "BUYERPHONE": "010-1234-5678",
  "BUYEREMAIL": "ufound@gmail.com"
}


결제예약 취소하기

TOKEN 발행 URL
{요청도메인}/payAuth/token [POST]
결제예약 취소 요청 URL
{요청도메인}/Subscribe/schedule_cancel [POST]
요청 전문 파라미터
항목명 길이 내용 구분 비고
ApiKey 제한없음 쿠키페이 결제 연동 key 필수(헤더) 쿠키페이에서 발급받은 결제 연동 key
TOKEN 제한없음 인증 TOKEN 필수(헤더) TOKEN 발급 API통해 발급 TOKEN 값
API_ID 20 쿠키페이 결제 연동 id 필수 쿠키페이에서 발급받은 결제 연동 id
RESERVE_ID 28 예약ID 필수(JSON) 예약하기에서 받은 예약ID
샘플예제
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/schedule_cancel"
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/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);


응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
RESERVE_ID 28 예약ID 필수(JSON) 정기결제 예약ID
응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "성공",
  "RESERVE_ID": "9jm1ksbcqjxog8kzg4o01xewv5q1"
}


결제예약 목록요청

TOKEN 발행
{요청도메인}/payAuth/token [POST]
결제예약 목록요청 URL
{요청도메인}/Subscribe/schedule_list [POST]
요청 전문 파라미터
항목명 길이 내용 구분 비고
ApiKey 제한없음 쿠키페이 결제 연동 key 필수(헤더) 쿠키페이에서 발급받은 결제 연동 key
TOKEN 제한없음 인증 TOKEN 필수(헤더) TOKEN 발급 API통해 발급 TOKEN 값
API_ID 20 쿠키페이 결제 연동 id 필수 쿠키페이에서 발급받은 결제 연동 id
REQUEST_DATE 8 조회를 원하는 등록일 필수 YYYYMMDD (예: 20220901 )
RESERVE_ID 28 예약ID 선택 RESERVE_ID 만으로 검색 (REQUEST_DATE 무시)
샘플예제
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/schedule_list"
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/schedule_list";

$request_data_array = array(
                                'API_ID' => 'COOKIEPAY에서 발급받은 가맹점연동 ID',
                                'STD_DT' => '시작일',
                                'END_DT' => '마감일',
                                '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);


응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수(JSON) PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 100 결과 메시지 필수(JSON) PG사 응답 메시지 ("성공" 또는 오류 메세지)
DATA 제한없음 예약데이터 필수(JSON) 정기결제 예약 목록의 배열
DATA[n]['RESERVE_ID'] 예약ID 필수(JSON)
DATA[n]['BILLKEY'] 빌링키 필수(JSON)
DATA[n]['ORDERNO'] 주문번호 필수(JSON)
DATA[n]['AMOUNT'] 결제금액 필수(JSON)
DATA[n]['BUYERNAME'] 구매자이름 필수(JSON)
DATA[n]['PRODUCTNAME'] 상품명 필수(JSON)
DATA[n]['PRODUCTCODE'] 상품코드 필수(JSON)
DATA[n]['TAXFREECD'] 과세여부 필수(JSON) Y: 과세, N: 비과세
DATA[n]['QUOTA'] 할부개월수 필수(JSON) 00
DATA[n]['NOTICE_URL'] 진행결과 통보 URL 필수(JSON)
DATA[n]['SCHEDULE_AT'] 예약 결제시간 필수(JSON)
DATA[n]['REGDATE'] 등록일 필수(JSON)
DATA[n]['STATUSDATE'] 상태변경일 필수(JSON) STATUS 상태 변경일 (예: STATUS=9 면 예약취소일이됨)
DATA[n]['STATUS'] 상태 필수(JSON) 1:예약등록, 2:결제 진행, 3:결제실패, 4:결제성공, 9:예약취소
응답데이터 예
{
  "RESULTCODE": "0000",
  "RESULTMSG": "정상",
  "DATA": [
    {
      "RESERVE_ID": "9jn1ksbcqjwog8kgg4001xxwv5q1",
      "BILLKEY": "jnjben1txbwo0oko28j1",
      "ORDERNO": "TEST-ORDER-220920-094625",
      "AMOUNT": "100",
      "BUYERNAME": "홍길동",
      "PRODUCTNAME": "테스트상품100",
      "PRODUCTCODE": "TP-100",
      "TAXFREECD": "Y",
      "QUOTA": "00",
      "NOTICE_URL": "https://domain.com/noti",
      "SCHEDULE_AT": "2022-09-21 09:10:00",
      "REGDATE": "2022-09-20 10:59:18",
      "STATUSDATE": "2022-09-20 11:17:53",
      "STATUS": "9"
    }
  ]
}


자동결제 반복하기

쿠피페이에서는cron과 같이 주기적인(periodic) 결제 방식은 지원하고 있지 않습니다. 그래서 자동결제 예약 반복을 하기 위해서는 2가지 방식으로 진행해야합니다.

방법1. 가맹점 서버에서 cron과 같은 주기적인 실행 프로그램으로 반복하기

가맹점 서버 내에서 cron과 같이 주기적인 스케쥴러 프로그램을 통해 결제를 진행해야합니다. 발급받은 빌링키를 데이터베이스에 저장한 후에 스케쥴러에서 빌링키로 결제하기를 통해서 주기적으로 결제할 수 있도록 구현합니다.

방법2. 자동결제 예약 실행 이후 리턴되는 통지URL 처리에서 다음 자동결제 예약을 수행하기

① 결제 이후 통지가 오면 결제완료/결제실패를 분리하여 처리를 진행합니다.
② 결제가 완료가 되었다면, 다음 결제 일자를 정해서 결제 예약 API를 통해 예약을 추가로 진행하면 반복적인 결제를 구현할 수 있습니다.