카드 자동 결제는 Billing 정기결제로 카유생비(카드번호, 유효기간, 생년월일, 비밀번호)를 보내 빌링키를 취득 한 후, 원하는 결제시점에 API로 빌링키 + 결제금액을 보내 결제하는 방식입니다.
특성상 빌링키 발급받는 과정만 클라이언트 작업이 필요하며 , 해당 빌링키로 결제를 요청, 예약, 취소하는 작업은 서버사이드에서 이루어집니다.
빌링키란?
구독형 정기결제, 종량제 과금결제 등 원하는 시점에 재 결제를 진행할 수 있는 결제용 암호화 키 입니다. 가맹점이 고객의 카드정보를 소유할 수 없기 때문에 카드사로부터 해당 카드에 대응하는 빌링키 발급 받아 저장하고 원하는 시점에 해당 빌링키로 결제를 청구할 수 있습니다.
라이브 : https://www.cookiepayments.com [POST]
테스트 : https://sandbox.cookiepayments.com [POST]
{요청도메인}/payAuth/token [POST]
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| pay2_id | 30 | cookiepayments에서 발급받은 연동ID | 필수 | cookiepayments사에서 부여 |
| pay2_key | 50 | cookiepayments에서 발급받은 연동 시크릿키 | 필수 | 로그인 후 API연동>PG사조회및 연동설정 페이지의 "결제수단"이 '비인증_정기'인 "PG연동" [보기]에서 확인 |
/* 토큰 발급 API */
curl -H "Content-Type: application/json" \
-d '{
"pay2_id": "cookiepayments에서 발급받은 연동ID",
"pay2_key": "cookiepayments에서 발급받은 연동 시크릿키"
}' \
-X POST "{요청도메인}/payAuth/token"
/* 토큰 발행 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);
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| RTN_CD | 4 | 결과 코드 | 필수(JSON) | 응답 코드 (성공시 "0000", 그외 에러) |
| RTN_MSG | 100 | 결과 메시지 | 필수(JSON) | 응답 메시지 ("성공" 또는 오류 메세지) |
| TOKEN | 200 | 인증 TOKEN | 필수(JSON) | 결제요청에 필요한 토큰 |
{
"RTN_CD": "0000",
"RTN_MSG": "성공",
"TOKEN": "암호화된코드"
}
{요청도메인}/Subscribe/billkeygen [POST]
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| 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 : 제한없음, 그외의 숫자 |
/* 토큰 발급 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"
/* 토큰 발행 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);
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| RESULTCODE | 4 | 결과 코드 | 필수(JSON) | PG사 응답 코드 (성공시 "0000", 그외 에러) |
| RESULTMSG | 100 | 결과 메시지 | 필수(JSON) | PG사 응답 메시지 ("성공" 또는 오류 메세지) |
| ENC_DATA | 암호호된 리턴값 | 선택 | 암호회된 리턴값 (성공시 존재) |
{
"RESULTCODE": "0000",
"RESULTMSG": "성공",
"ENC_DATA": "uCAMEsaW+tdhYKcIvzbezan137Igm4u0dEMawS93EhwaaoLE+lAgiMH07ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| 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 일때만 존재 |
{
"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"
}
}
라이브 : https://www.cookiepayments.com [POST]
테스트 : https://sandbox.cookiepayments.com [POST]
{요청도메인}/pay/ready [POST]
요청 시 주의사항 (필독)
요청 시 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-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>
샘플 예제
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"
샘플 예제
$headers = array();
array_push($headers, "Content-Type: application/json; charset=utf-8");
$cookiepayments_url = "{요청도메인}/pay/ready";
$request_data_array = array(
'API_ID' => '{쿠키페이 결제 연동ID}',
'ORDERNO' => '{주문번호}',
'PRODUCTNAME' => '{상품명}',
'AMOUNT' => '{결제 금액}',
'BUYERNAME' => '{고객명}',
'BUYEREMAIL' => '{고객 e-mail}',
'PRODUCTCODE' => '{상품 코드}',
'PAYMETHOD' => '{결제 수단}',
'BUYERID' => '{고객 ID}',
'BUYERADDRESS' => '{고객 주소}',
'BUYERPHONE' => '{고객 휴대폰번호}',
'RETURNURL' => '' //결제 완료 후 리다이렉트 url
'ETC1' => '{사용자 추가필드 1}',
'ETC2' => '{사용자 추가필드 2}',
'ETC3' => '{사용자 추가필드 3}',
'ETC4' => '{사용자 추가필드 4}',
'ETC5' => '{사용자 추가필드 5}',
);
$cookiepayments_json = json_encode($request_data_array, JSON_UNESCAPED_UNICODE);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $cookiepayments_url);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $cookiepayments_json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);
var_dump($response);
C#샘플 예제
// 인증요청 서버통신 CALL
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.Text;
using System.IO;
using System.Text.Json;
using Newtonsoft.Json.Linq;
using System.Web.Mvc;
using MySql.Data.MySqlClient;
using System.Data.SqlClient;
namespace pay.Controllers
{
public class HomeController : Controller
{
string API_ID = "쿠키페이 결제 연동ID";
public ContentResult ReadyCall()
{
string URL = "{요청도메인}/pay/ready";
//전송 데이터 JSON 형식 만들기
var json = new JObject();
json.Add("API_ID", API_ID); //쿠키페이 결제 연동ID
json.Add("ORDERNO", ""); //주문번호
json.Add("PRODUCTNAME", ""); //상품명
json.Add("AMOUNT", 100); //결제 금액
json.Add("BUYERNAME", ""); //고객명
json.Add("BUYEREMAIL", ""); //고객 E-MAIL
json.Add("PRODUCTCODE", ""); //상품 코드
json.Add("PAYMETHOD", ""); //결제 수단
json.Add("BUYERID", ""); //고객 ID
json.Add("BUYERADDRESS", "");//고객 주소
json.Add("BUYERPHONE", ""); //고객 휴대폰번호
json.Add("RETURNURL", ""); //결제 완료 후 리다이렉트 url
json.Add("ETC1", ""); //사용자 추가필드 1
json.Add("ETC2", ""); //사용자 추가필드 2
json.Add("ETC3", ""); //사용자 추가필드 3
json.Add("ETC4", ""); //사용자 추가필드 4
json.Add("ETC5", ""); //사용자 추가필드 5
//요청 HEADER 세팅
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "application/json";
request.Headers.Add("ApiKey", API_KEY);
//데이터 전송
byte[] bytes = Encoding.UTF8.GetBytes(json.ToString());
request.ContentLength = bytes.Length;
Stream reqStream = request.GetRequestStream();
reqStream.Write(bytes, 0, bytes.Length);
reqStream.Flush();
reqStream.Close();
//응답
string response_data = "";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
HttpStatusCode status = response.StatusCode;
Stream response_stream = response.GetResponseStream();
using (StreamReader read_stream = new StreamReader(response_stream))
{
response_data = read_stream.ReadToEnd();
System.Diagnostics.Trace.WriteLine(response_data);
read_stream.Close();
response_stream.Close();
response.Close();
}
return Content(response_data);
}
}
}
JSP샘플 예제
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.security.MessageDigest" %>
<%
String ORDERNO = "1234"; //주문번호
String PRODUCTNAME = "상품명"; //상품명
int AMOUNT = 1004; //결제 금액
String BUYERNAME = "고객명"; //고객명
String BUYEREMAIL = "id@email.com"; //이메일
String PAYMETHOD = "CARD"; //결제 수단
String PRODUCTCODE = ""; //상품코드
String BUYERID = "guest"; //고객 ID
String BUYERADDRESS = "인천 남동구..."; //고객주소
String BUYERPHONE = "0100001234"; //고객 연락처
String RETURNURL = "https://결제완료 결과값을 받을 주소"; // 결제 완료 후 리다이렉트 url
String ETC1 = ""; //사용자 추가필드 1
String ETC2 = ""; //사용자 추가필드 2
String ETC3 = ""; //사용자 추가필드 3
String ETC4 = ""; //사용자 추가필드 4
String ETC5 = ""; //사용자 추가필드 5
%>
<!DOCTYPE html>
<html>
<head>
<title>Cookiepayments JSP CARD_AUTH API</title>
<meta charset="utf-8">
<style>
html,body {height: 100%;}
form {overflow: hidden;}
</style>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="{요청도메인}/js/cookiepayments-1.1.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>
결과값은 Form Data로 전송됩니다.
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| API_ID | 20 | 쿠키페이 결제 연동ID | 필수 | 쿠키페이에서 발급받은 결제 연동ID |
| RESULTCODE | 4 | 결과 코드 | 필수 | 암호화 리턴 응답 코드 (성공시 "0000", 그외 에러) |
| RESULTMSG | 100 | 결과 메세지 | 필수 | 암호화 리턴 응답 메시지 ("성공" 또는 오류 메세지) |
| ENC_DATA | 암호호된 리턴값 | 필수 | 암호회된 리턴값 |
결과값은 Form Data로 전송됩니다.
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| decryptData | 복호화된 데이터 | 필수 | ||
| RESULTCODE | 4 | 결과 코드 | 필수 | PG사 응답 코드 (성공시 "0000", 그외 에러) |
| RESULTMSG | 100 | 결과 메세지 | 필수 | PG사 응답 메시지 ("성공" 또는 오류 메세지) |
| ORDERNO | 50 | 주문번호 | 필수 | 주문번호 |
| AMOUNT | 10 | 결제 된 금액 | 필수 | |
| TID | 20 | PG 거래 고유번호 | 필수 | PG사 결제 거래고유번호 (전표출력 및 결제취소에 사용됩니다) |
| ACCEPTDATE | 20 | 승인일시 | 필수 | PG사 결제 승인일시 |
| ACCEPTNO | 10 | 승인번호 | 필수 | PG사 결제 승인번호 |
| CARDNAME | 10 | 입금할 은행명 | 필수 | 가상계좌 및 계좌이체 시 입금할 은행명 |
| CARDCODE | 10 | 입금할 은행코드 | 필수 | 가상계좌 시 입금할 은행코드 |
| QUOTA | 2 | 할부기간 | 필수 | 카드 할부결제시 할부기간 (00:일시불, 01:1개월) |
| ETC1 | 100 | 사용자 추가 필드1 | 선택 | 결제 요청시 입력한 값 |
| ETC2 | 100 | 사용자 추가 필드2 | 선택 | 결제 요청시 입력한 값 |
| ETC3 | 100 | 사용자 추가 필드3 | 선택 | 결제 요청시 입력한 값 |
| ETC4 | 100 | 사용자 추가 필드4 | 선택 | 결제 요청시 입력한 값 |
| ETC5 | 100 | 사용자 추가 필드5 | 선택 | 결제 요청시 입력한 값 |
| BILLKEY | 20 | 빌링키 | 필수 | 정기결제에 사용될 빌링키 |
| GENDATE | 50 | 빌링키 생성일자 | 필수 | 빌링키 생성일자 |
| 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 일때만 존재 |
{
"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",
}
}
// 결제정보 수신 후 데이터베이스에 입력되는 필드값은 고객님의 홈페이지 결제 테이블에 맞게 입력하셔야 합니다.
// 결제요청시 결제시도 데이터는 디비에 우선 저장하신후 [인증 결제 응답 전문] 신호를 받으신후 결제완료 정보를 업데이트합니다.
// 계좌이체, 가상계좌의 경우 ACCEPT_NO 승인번호의 리턴 값이 없으므로 예외 처리하여 주시기 바랍니다.
// 결제 테이블 설계의 경우 비즈니스 로직에 때라 상이하므로 아래 예제 코드는 참조만 하여 주시기 바랍니다.
// 응답전문의 경우 기본 암호화 되어 리턴되므로 > 암호화 전문 복호화하기 api(전문)을 사용하시어 복호화후 디비처리하여 주십시요.
$headers = array();
array_push($headers, "content-type: application/json; charset=utf-8");
array_push($headers, "ApiKey: COOKIEPAY에서 발급받은 연동 시크릿키");
$cookiepay_api_url = "{요청도메인}/EdiAuth/cookiepay_edi_decrypt";
$edi_date = date('YmdHis');
$request_data_array = array(
'API_ID' => 'cookiepayments에서 발급받은 연동ID', // 쿠키페이 결제 연동ID
'ENC_DATA' => '암호화된 응답값',
);
$cookiepay_api_json = json_encode($request_data_array, TRUE);
$ch = curl_init(); // curl 초기화
curl_setopt($ch,CURLOPT_URL, $cookiepay_api_url);
curl_setopt($ch,CURLOPT_POST, false);
curl_setopt($ch,CURLOPT_POSTFIELDS, $cookiepay_api_json);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
curl_setopt($ch,CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch); // 응답값을 $response 변수 넣는다.
curl_close($ch);
$result_array = json_decode($response, true);
$params_decode = $result_array['decryptData'];
if( !empty($params_decode['ACCEPT_NO']) && !empty($params_decode['TID']) && !empty($params_decode['ORDERNO']) ) {
/*
[API_ID] => xxxxxxx
[ORDERNO] => 20230206020000000
[AMOUNT] => 100
[TID] => CEH11111111111111111
[USERID] => guest
[BUYERNAME] => test
[BUYEREMAIL] =>
[PRODUCTCODE] => test
[PRODUCTNAME] => test
[ACCEPT_DATE] => 20230206110242
[ACCEPT_NO] => 11111111
[CARDCODE] => CCBC
[CARDNAME] => 케이뱅크체크
[CARDNO] => **********002163
[QUOTA] => 00
[ETC1] => 사용자 추가 필드1
[ETC2] => 사용자 추가 필드2
[ETC3] => 사용자 추가 필드3
[ETC4] => 사용자 추가 필드4
[ETC5] => 사용자 추가 필드5
[BILLKEY] => k0a04cjfiysqtfcg2hfe
[GENDATE] => 20240910152739
*/
/* 전달받은 결제정보로 결제완료 처리 예제코드 */
$SQL = "UPDATE '결제테이블' set ";
$SQL .= "ACCEPT_DATE = '".$params_decode['ACCEPT_DATE']."', ";
$SQL .= "ACCEPT_NO = '".$params_decode['ACCEPT_NO']."', ";
$SQL .= "TID = '".$params_decode['TID']."',";
$SQL .= "CARDCODE = '".$params_decode['CARDNO']."',";
$SQL .= "CARDNAME = '".$params_decode['CARDNAME']."',";
$SQL .= "QUOTA = '".$params_decode['QUOTA']."',";
$SQL .= "BILLKEY = '".$params_decode['BILLKEY']."',";
$SQL .= "GENDATE = '".$params_decode['GENDATE']."',";
$SQL .= "PAY_STATUS = '결제성공' ";
$SQL .= "WHERE ORDERNO = '".$params_decode['ORDERNO']."' ";
$SQL .= "AND AMOUNT = '".$params_decode['AMOUNT']."' ";
$SQL .= "AND PAY_STATUS = '결제대기' ";
$SQL .= "LIMIT 1 ";
$result = mysql_query($SQL, 'Connect_Info');
}
라이브 : https://www.cookiepayments.com [POST]
테스트 : https://sandbox.cookiepayments.com [POST]
{요청도메인}/payAuth/token [POST]
{요청도메인}/Subscribe/payments [POST]
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| 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 | 고객 주소 | 선택 |
/* 토큰 발급 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"
/* 토큰 발행 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);
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| RESULTCODE | 4 | 결과 코드 | 필수(JSON) | PG사 응답 코드 (성공시 "0000", 그외 에러) |
| RESULTMSG | 100 | 결과 메시지 | 필수(JSON) | PG사 응답 메시지 ("성공" 또는 오류 메세지) |
| ENC_DATA | 암호호된 리턴값 | 선택 | 암호회된 리턴값 (성공시 존재) |
{
"RESULTCODE": "0000",
"RESULTMSG": "성공",
"ENC_DATA": "uCAMEsaW+tdhYKcIvzbezan137Igm4u0dEMawS93EhwaaoLE+lAgiMH07ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| 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) |
{
"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": ""
}
}
라이브 : https://www.cookiepayments.com [POST]
테스트 : https://sandbox.cookiepayments.com [POST]
{요청도메인}/payAuth/token [POST]
{요청도메인}/Subscribe/recurrence_schedule_reserve [POST]
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| 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 | 선택 | 입력시 응답파라미터에 값을 전달합니다 |
/* 토큰 발급 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"
/* 토큰 발행 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);
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| RESULTCODE | 4 | 결과 코드 | 필수(JSON) | PG사 응답 코드 (성공시 "0000", 그외 에러) |
| RESULTMSG | 100 | 결과 메시지 | 필수(JSON) | PG사 응답 메시지 ("성공" 또는 오류 메세지) |
| ENC_DATA | 암호호된 리턴값 | 선택 | 암호회된 리턴값 (성공시 존재) |
{
"RESULTCODE": "0000",
"RESULTMSG": "성공",
"ENC_DATA": "uCAMEsaW+tdhYKcIvzbezan137Igm4u0dEMawS93EhwaaoLE+lAgiMH07ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| 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) |
{
"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": "",
}
}
※ 통지 전문(Noti)은 결제승인 또는 승인취소 응답 파라미터에 대하여 쿠키페이먼트에서 고객사로 Server To Server로 전송됩니다.
※ 개발한 통지 URL 입력방법 : 쿠키페이먼츠 접속 후 > API 연동 메뉴 > PG사 조회 및 연동 설정 > PG 연동 버튼 클릭 > 통지 URL 입력란에 입력 후 설정 저장하시면 됩니다.
(https://www.cookiepayments.com/iroboard/view?bId=API_Devolper&wr_id=2129)
※ 보다 자세한 내용에 대해서는 통지전문(Noti) 매뉴얼에서 확인 하시기 바랍니다.
{요청도메인}/payAuth/token [POST]
{요청도메인}/Subscribe/recurrence_schedule_cancel [POST]
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| ApiKey | 제한없음 | 쿠키페이 결제 연동 시크릿키 | 필수(헤더) | 쿠키페이에서 발급받은 결제 연동 시크릿키 |
| TOKEN | 제한없음 | 인증 TOKEN | 필수(헤더) | TOKEN 발급 API통해 발급 TOKEN 값 |
| API_ID | 20 | 쿠키페이 결제 연동ID | 필수 | 쿠키페이에서 발급받은 결제 연동ID |
| RESERVE_ID | 36 | 등록ID | 필수(JSON) | 반복결제 등록에서 받은 등록ID |
/* 토큰 발급 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"
/* 토큰 발행 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);
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| RESULTCODE | 4 | 결과 코드 | 필수(JSON) | PG사 응답 코드 (성공시 "0000", 그외 에러) |
| RESULTMSG | 100 | 결과 메시지 | 필수(JSON) | PG사 응답 메시지 ("성공" 또는 오류 메세지) |
| ENC_DATA | 암호호된 리턴값 | 선택 | 암호회된 리턴값 (성공시 존재) |
{
"RESULTCODE": "0000",
"RESULTMSG": "성공",
"ENC_DATA": "uCAMEsaW+tdhYKcIvzbezan137Igm4u0dEMawS93EhwaaoLE+lAgiMH07ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| RESULTCODE | 4 | 결과 코드 | 필수(JSON) | PG사 응답 코드 (성공시 "0000", 그외 에러) |
| RESULTMSG | 100 | 결과 메시지 | 필수(JSON) | PG사 응답 메시지 ("성공" 또는 오류 메세지) |
| decryptData | 복호화된 데이터 | 필수(JSON) | ||
| RESERVE_ID | 36 | 반복결제 등록ID | 필수(JSON) | 반복결제 등록ID |
{
"RESULTCODE": "0000",
"RESULTMSG": "성공",
"decryptData": {
"RESERVE_ID": "9jm1ksbcqjxog8kzg4o01xewv5q1"
}
}
{요청도메인}/payAuth/token [POST]
{요청도메인}/Subscribe/recurrence_schedule_info [POST]
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| ApiKey | 제한없음 | 쿠키페이 결제 연동 시크릿키 | 필수(헤더) | 쿠키페이에서 발급받은 결제 연동 시크릿키 |
| TOKEN | 제한없음 | 인증 TOKEN | 필수(헤더) | TOKEN 발급 API통해 발급 TOKEN 값 |
| API_ID | 20 | 쿠키페이 결제 연동ID | 필수 | 쿠키페이에서 발급받은 결제 연동ID |
| RESERVE_ID | 36 | 반복결제 등록ID | 필수 | RESERVE_ID로 검색 |
/* 토큰 발급 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"
/* 토큰 발행 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);
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| RESULTCODE | 4 | 결과 코드 | 필수(JSON) | PG사 응답 코드 (성공시 "0000", 그외 에러) |
| RESULTMSG | 100 | 결과 메시지 | 필수(JSON) | PG사 응답 메시지 ("성공" 또는 오류 메세지) |
| ENC_DATA | 암호호된 리턴값 | 선택 | 암호회된 리턴값 (성공시 존재) |
{
"RESULTCODE": "0000",
"RESULTMSG": "정상",
"ENC_DATA": "uCAMEsaW+tdhYKcIvzbezan137Igm4u0dEMawS93EhwaaoLE+lAgiMH07ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| 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:등록취소 |
{
"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"
}
]
}
라이브 : https://www.cookiepayments.com [POST]
테스트 : https://sandbox.cookiepayments.com [POST]
{요청도메인}/payAuth/token [POST]
{요청도메인}/Subscribe/recurrence_request_payment [POST]
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| ApiKey | 제한없음 | 쿠키페이 결제 연동 시크릿키 | 필수(헤더) | 쿠키페이에서 발급받은 결제 연동 시크릿키 |
| TOKEN | 제한없음 | 인증 TOKEN | 필수(헤더) | TOKEN 발급 API통해 발급 TOKEN 값 |
| API_ID | 20 | 쿠키페이 결제 연동ID | 필수(JSON) | 쿠키페이에서 발급받은 결제 연동ID |
| RESERVE_ID | 36 | 반복결제 등록ID | 필수(JSON) | 반복결제 등록시 받은 키값 |
| BILLKEY | 20 | 빌링키 | 필수(JSON) | 반복결제 등록시 사용한 빌링키 |
/* 토큰 발급 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"
/* 토큰 발행 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);
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| RESULTCODE | 64 | 결과 코드 | 필수(JSON) | PG사 응답 코드 (성공시 "0000", 그외 에러) |
| RESULTMSG | 100 | 결과 메시지 | 필수(JSON) | PG사 응답 메시지 ("성공" 또는 오류 메세지) |
| ENC_DATA | 암호호된 리턴값 | 선택 | 암호회된 리턴값 (성공시 존재) |
{
"RESULTCODE": "0000",
"RESULTMSG": "성공",
"ENC_DATA": "AMbS3lkWNqTluTo5D4uziA6ijoQGq6vx6T40CRBmCtfER1QiZR...7ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| 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) | 결제 요청시 입력한 값 |
{
"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"
}
}
{요청도메인}/payAuth/token [POST]
{요청도메인}/Subscribe/billingkeycancel [POST]
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| ApiKey | 제한없음 | 쿠키페이 결제 연동 시크릿키 | 필수(헤더) | 쿠키페이에서 발급받은 결제 연동 시크릿키 |
| TOKEN | 제한없음 | 인증 TOKEN | 필수(헤더) | TOKEN 발급 API통해 발급 TOKEN 값 |
| API_ID | 20 | 쿠키페이 결제 연동ID | 필수 | 쿠키페이에서 발급받은 결제 연동ID |
| BILLKEY | 20 | 폐기할 빌링키 | 필수 | 빌링키 발급받기에서 받은 BILLKEY |
/* 토큰 발급 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"
/* 토큰 발행 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사 응답 메시지 ("성공" 또는 오류 메세지) |
| ENC_DATA | 암호호된 리턴값 | 선택 | 암호회된 리턴값 (성공시 존재) |
{
"RESULTCODE": "0000",
"RESULTMSG": "성공",
"ENC_DATA": "uCAMEsaW+tdhYKcIvzbezan137Igm4u0dEMawS93EhwaaoLE+lAgiMH07ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| RESULTCODE | 4 | 결과 코드 | 필수(JSON) | PG사 응답 코드 (성공시 "0000", 그외 에러) |
| RESULTMSG | 100 | 결과 메시지 | 필수(JSON) | PG사 응답 메시지 ("성공" 또는 오류 메세지) |
| decryptData | 복호화된 데이터 | 필수(JSON) | ||
| BILLKEY | 20 | 취소된 BILLKEY | 필수(JSON) | 취소된 BILLKEY, 성공시 사용 못함. |
{
"RESULTCODE": "0000",
"RESULTMSG": "성공",
"decryptData": {
"BILLKEY": "취소된 BILLKEY",
}
}
{요청도메인}/payAuth/token [POST]
{요청도메인}/Subscribe/billingkeylookup [POST]
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| ApiKey | 제한없음 | 쿠키페이 결제 연동 시크릿키 | 필수(헤더) | 쿠키페이에서 발급받은 결제 연동 시크릿키 |
| TOKEN | 제한없음 | 인증 TOKEN | 필수(헤더) | TOKEN 발급 API통해 발급 TOKEN 값 |
| API_ID | 20 | 쿠키페이 결제 연동ID | 필수 | 쿠키페이에서 발급받은 결제 연동ID |
| BILLKEY | 20 | 빌링키 | 필수 | 빌링키 발급받기에서 받은 BILLKEY |
/* 토큰 발급 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"
/* 토큰 발행 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사 응답 메시지 ("성공" 또는 오류 메세지) |
| ENC_DATA | 암호호된 리턴값 | 선택 | 암호회된 리턴값 (성공시 존재) |
{
"RESULTCODE": "0000",
"RESULTMSG": "성공",
"ENC_DATA": "uCAMEsaW+tdhYKcIvzbezan137Igm4u0dEMawS93EhwaaoLE+lAgiMH07ysmVI/q3Ky7X1LOIZ3WuSsGgGkyvQ=="
}
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| 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) | 사용가능, 사용불가 |
{
"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": "사용가능"
}
}
※ 통지 전문(Noti)은 결제승인 또는 승인취소 응답 파라미터에 대하여 쿠키페이먼트에서 고객사로 Server To Server로 전송됩니다.
※ 개발한 통지 URL 입력방법 : 쿠키페이먼츠 접속 후 > API 연동 메뉴 > PG사 조회 및 연동 설정 > PG 연동 버튼 클릭 > 통지 URL 입력란에 입력 후 설정 저장하시면 됩니다.
(https://www.cookiepayments.com/iroboard/view?bId=API_Devolper&wr_id=2129)
※ 보다 자세한 내용에 대해서는 통지전문(Noti) 매뉴얼에서 확인 하시기 바랍니다.
최종 결제 요청이 브라우저에서 이루어지는 경우 결제 금액을 위변조하여 결제요청을 할 수 있습니다. 이 경우 결제 완료 후 처음 요청했던 금액과 실제로 결제된 금액이 일치하는지 확인하는 과정이 필요합니다.
※ 보자 자세한 내용에 대해서는 결제정보 검증 매뉴얼에서 확인 하시기 바랍니다.