결제요청한 URL는 결제완료 이후에는 재사용 할 수 없습니다(1회만 사용)
발송수단 : SMS,이메일,카카오 (1개만 선택)
라이브 : https://www.cookiepayments.com [POST]
테스트 : https://sandbox.cookiepayments.com [POST]
{요청도메인}/urlpay/request [POST]
샘플 예제
curl -H "Content-Type: application/json" \
-H "ApiKey": "COOKIEPAY에서 발급받은 연동키" \
-d '{ "API_ID": "COOKIEPAY에서 발급받은 가맹점연동 ID", \
"PRODUCTNAME": "상품명", \
"AMOUNT": "결제금액", \
"BUYERNAME": "고객명", \
"BUYERHP": "고객 휴대폰번호", \
"BUYEREMAIL":"고객 E-MAIL", \
"REQ_TYPE":"발송타입", \
"PAYMENT_TYPE_USE":"사용할 결제타입", \ // 요청 전문 파라미터 참조
}' \
-X POST "{요청도메인}/urlpay/request"
샘플 예제
$headers = array();
array_push($headers, "content-type: application/json; charset=utf-8");
array_push($headers, "ApiKey: COOKIEPAY에서 발급받은 연동키 ");
$cookiepayments_url = "{요청도메인}/urlpay/request";
$request_data_array = array(
'API_ID' => 'COOKIEPAY에서 발급받은 가맹점연동 ID',
'PRODUCTNAME'=> '상품명',
'AMOUNT'=> '결제금액',
'BUYERNAME'=> '고객명',
'BUYERHP'=> '고객 휴대폰번호',
'BUYEREMAIL'=> '고객 E-MAIL',
'REQ_TYPE'=> '발송타입',
'PAYMENT_TYPE_USE'=> '사용할 결제타입', // 요청 전문 파라미터 참조
);
$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);
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| ApiKey | 제한없음 | COOKIEPAY PG설정 연동 key | 필수 (헤더) |
COOKIEPAY에서 부여 |
| API_ID | 20 | COOKIEPAY에서 발급받은 ID | 필수 | COOKIEPAY에서 부여 |
| PRODUCTNAME | 40 | 상품명 | 필수 | & 문자를 입력하시면 오류 발생 |
| AMOUNT | 10 | 결제금액 | 필수 | 문자 및 특수문자 허용 불가 |
| BUYERNAME | 20 | 고객명 | 필수 | |
| BUYERHP | 11 | 고객 휴대폰번호 | 필수 | |
| TAXYN | 1 | 과세/비과세 | 선택 | Y:과세, N:비과세 |
| BUYEREMAIL | 50 | 고객 E-MAIL | EMAIL:필수 KAKAO,SMS:선택 |
REQ_TYPE : EMAIL 사용시 > 청구서를 발송할 이메일 주소 |
| BILL_NO | 20 | 청구서 고유 번호 | 선택 | 청구서 고유 번호 └ 청구서 고유번호 입력시 └ 같은 청구서 주소로 재발송 가능합니다. |
| MEMO | 100 | 발송타입 | 선택 | 비고 혹은 메시지 |
| REQ_TYPE | 10 | 발송타입 | 선택 | 발송타입 SMS: sms발송, EMAIL: email발송 KAKAO: KAKAO발송, 빈값이면 URL 결제창만 생성 |
| PAYMENT_TYPE_USE | 10 | 사용할 결제타입 | 선택 | 3.인증_일반(신용카드), 4. 비인증_수기(수기결제), 7.인증_해외원화 요청값 없을시 3.인증_일반(신용카드), 4.수기결제(키인) 이 노출됩니다. 단 원하는 결제수단 노출을 원할 경우에는 번호를 기입해주시면 됩니다. -예시1 : 7.인증_해외원화 노출 : 7 -예시2 : 3.인증_일반(신용카드), 7.인증_해외원화 노출 : 3,7 -예시3 : 3.인증_일반(신용카드), 4.비인증_수기(수기결제), 7.인증_해외원화 노출 : 3,4,7 |
| RETURNURL | 100 | 결제 결과 값 받는 주소 | 선택 | 결제 완료 후 리다이렉트 할 URL └ 상품결제 완료후 고객사 홈페이지로 이동이 필요하실경우 이용하시기 바랍니다. └ 사용시 RETURNURL 응답전문 항목이 POST 값으로 전송됩니다. 아래의 'RETURNURL 응답전문(암호화 리턴)', 'RETURNURL 응답전문 > 복호화' 개발이 필요합니다. |
| ETC1 | 100 | 추가 필드1 | 선택 | 결제URL 통지전문으로 리턴 받으실수 있습니다. |
| ETC2 | 100 | 추가 필드2 | 선택 | 결제URL 통지전문으로 리턴 받으실수 있습니다. |
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| RESULTCODE | 4 | 응답코드 | 필수 | 응답코드 정상 : 0000, 그외 에러 |
| RESULTMSG | 100 | 응답메시지 | 필수 | 응답메시지 |
| URLKEY | 20 | 생성된 결제창 URL KEY | 필수 | 결제창 생성된 KEY 값 |
| PAYURL | 50 | 생성된 결제창 URL 주소 | 필수 | 고객에서 전송된 결제 창 URL 주소 |
| BILL_NO | 20 | 청구서 고유 번호 | 선택 | 청구서 고유 번호 |
| ETC1 | 100 | 추가 필드1 | 선택 | |
| ETC2 | 100 | 추가 필드2 | 선택 | |
| PAYMENT_TYPE_USE | 10 | 사용할 결제타입 | 선택 | 사용할 결제타입 |
| RETURNURL | 199 | 결제 결과 값 받는 주소 | 선택 | 결제 완료 후 리다이렉트 할 URL |
결과값은 Form Data로 전송됩니다.
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| RESULTCODE | 4 | 결과 코드 | 필수 | 암호화 리턴 응답 코드 (성공시 "0000", 그외 에러) |
| RESULTMSG | 100 | 결과 메세지 | 필수 | 암호화 리턴 응답 메시지 ("성공" 또는 오류 메세지) |
| ENC_DATA | 암호호된 리턴값 | 필수 | 암호회된 리턴값 |
결과값은 Form Data로 전송됩니다.
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| decryptData | 복호화된 데이터 | 필수 | ||
| PAYMETHOD | 10 | 결과 수단 | 필수 | CARD, VACCT, BANK, NAVERPAY(키움만해당), KAKAOPAY(키움만해당) |
| RESULTCODE | 4 | 결과 코드 | 필수 | PG사 응답 코드 (성공시 "0000", 그외 에러) |
| RESULTMSG | 100 | 결과 메세지 | 필수 | PG사 응답 메시지 ("성공" 또는 오류 메세지) |
| ORDERNO | 50 | 주문번호 | 필수 | 주문번호 |
| AMOUNT | 10 | 결제 된 금액 | 필수 | |
| TID | 20 | PG 거래 고유번호 | 필수 | PG사 결제 거래고유번호 (전표출력 및 결제취소에 사용됩니다) |
| ACCEPTDATE | 20 | 승인일시 | 필수 | PG사 결제 승인일시 |
| ACCEPTNO | 10 | 승인번호 | 필수 | PG사 결제 승인번호 |
| CASH_BILL_NO | 10 | 현금영수증일련번호 | 필수 | 가상계좌 및 계좌이체 시 현금영수증 일련번호 |
| CARDNAME | 10 | 입금할 은행명 | 필수 | 가상계좌 및 계좌이체 시 입금할 은행명 |
| ACCOUNTNO | 10 | 입금할 계좌번호 | 필수 | 가상계좌 시 입금할 계좌번호 |
| RECEIVERNAME | 10 | 입금할 예금주 | 필수 | 가상계좌 시 입금할 예금주 |
| DEPOSITENDDATE | 10 | 입금마감일 | 필수 | 가상계좌 시 입금마감일 |
| CARDCODE | 10 | 입금할 은행코드 | 필수 | 가상계좌 시 입금할 은행코드 |
| QUOTA | 2 | 할부기간 | 필수 | 카드 할부결제시 할부기간 (00:일시불, 01:1개월) |
| ETC1 | 100 | 사용자 추가 필드1 | 선택 | 결제 요청시 입력한 값 |
| ETC2 | 100 | 사용자 추가 필드2 | 선택 | 결제 요청시 입력한 값 |
{
"RESULTCODE": "0000", // 복호화 응답 코드
"RESULTMSG": "성공", // 복호화 응답 메시지
"decryptData": {
"PAYMETHOD": "CARD", // CARD, NAVERPAY, KAKAOPAY
"RESULTCODE": "0000", // PG사 응답 코드 (성공시 "0000", 그외 에러)
"RESULTMSG": "성공", // PG사 응답 메시지 ("성공" 또는 오류 메세지)
"ORDERNO": "주문번호",
"AMOUNT": "1004",
"TID": "PG 거래 고유번호",
"ACCEPTDATE": "승인일시",
"ACCEPTNO": "승인번호",
"CASH_BILL_NO": "현금영수증일련번호",
"CARDNAME": "결제카드사 이름",
"ACCOUNTNO": "계좌번호",
"RECEIVERNAME": "입금할 예금주",
"DEPOSITENDDATE": "입금마감일",
"CARDCODE": "입금할 은행코드 OR 결제카드코드",
"QUOTA": "할부기간",
"ETC1": "사용자 추가 필드1",
"ETC2": "사용자 추가 필드2",
}
}
// 결제정보 수신 후 데이터베이스에 입력되는 필드값은 고객님의 홈페이지 결제 테이블에 맞게 입력하셔야 합니다.
// 결제요청시 결제시도 데이터는 디비에 우선 저장하신후 [인증 결제 응답 전문] 신호를 받으신후 결제완료 정보를 업데이트합니다.
// 계좌이체, 가상계좌의 경우 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
[PAY_METHOD] => CARD
*/
/* 전달받은 결제정보로 결제완료 처리 예제코드 */
$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 .= "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');
}
통지 전문(Noti)은 JSON POST 형식으로 전송됩니다.
결제URL 통지 전문(Noti)은 결제승인 파라미터에 대하여 쿠키페이먼트에서 고객사로 Server To Server로 전송됩니다.
개발한 통지 URL 입력방법 : 쿠키페이먼츠 접속 후 > API 연동 메뉴 > PG사 조회 및 연동 설정 > PG 연동 버튼 클릭 > 통지 URL 입력란에 입력 후 설정 저장하시면 됩니다.
| 항목명 | 길이 | 내용 | 구분 | 비고 |
|---|---|---|---|---|
| API_ID | 20 | 쿠키페이 결제 연동 id | 필수(json) | 쿠키페이에서 발급받은 결제 연동 id |
| ORDERNO | 50 | 주문번호 | 필수(json) | 주문번호 |
| AMOUNT | 10 | 결제 된 금액 | 필수(json) | |
| TID | 20 | PG 거래 고유번호 | 필수(json) | PG사 결제 거래고유번호 (전표출력 및 결제취소에 사용됩니다) |
| BUYEREMAIL | 50 | 고객 이메일 | 선택(json) | |
| BUYERNAME | 20 | 고객 이름 | 필수(json) | |
| USERID | 20 | 고객 ID | 선택(json) | 고객아이디 |
| PRODUCTCODE | 10 | 상품 코드 | 필수(json) | |
| PRODUCTNAME | 40 | 상품명 | 필수(json) | |
| ACCEPT_DATE | 10 | 승인일시 | 필수(json) | PG사 결제 승인일시 |
| ACCEPT_NO | 10 | 승인번호 | 필수(json) | PG사 결제 승인번호 |
| CARDCODE | 10 | 카드 코드 | 필수(json) | 사용 카드 카드번호/가상계좌 시 입금할 은행코드 |
| CARDNAME | 10 | 카드사명 | 필수(json) | 사용 카드사명/가상계좌시 입금할 은행명 |
| CARDNO | 20 | 카드번호 | 필수(json) | 예) **000111 |
| QUOTA | 2 | 할부기간 | 필수(json) | 카드 할부결제시 할부기간 (00:일시불, 01:1개월) |
| ACCOUNTNO | 10 | 입금할 계좌번호 | 필수(json) | 가상계좌 시 입금할 계좌번호 |
| RECEIVERNAME | 10 | 입금할 예금주 | 필수(json) | 가상계좌 시 입금할 예금주 |
| DEPOSITENDDATE | 10 | 입금마감일 | 필수(json) | 가상계좌 시 입금마감일 |
| DEPOSITNAME | 30 | 입금자 | 선택(json) | 가상계좌 > 입금자명 (지원 PG사 : 모빌페이, 이지페이, 토스페이) |
| SMS_INPUT | 30 | 청구서 URLKEY 값 | 선택(json) | 청구서 생성시 리턴받은 URLKEY 값 |
| ETC1 | 100 | 사용자 추가 필드1 | 선택 | 결제 요청시 입력한 값 (결제URL 발송요청시 입력한값) |
| ETC2 | 100 | 사용자 추가 필드2 | 선택 | 결제 요청시 입력한 값 (결제URL 발송요청시 입력한값) |
| ETC3 | 100 | 사용자 추가 필드3 | 선택 | 결제 요청시 입력한 값 |
| ETC4 | 100 | 사용자 추가 필드4 | 선택 | 결제 요청시 입력한 값 |
| ETC5 | 100 | 사용자 추가 필드5 | 선택 | 결제 요청시 입력한 값 |
URL 결제 생성 후 고객이 결제를 하였는지 확인 하는 API 입니다. 고객님이 결제를 정상적으로 하였다면 결제 데이터를 리턴해주며, 결제가 실행 안된 경우에는 결제가 이루어지지 않았다는 데이터를 리턴해줍니다.
{요청도메인}/payAuth/token [POST]
| 항목명 | 길이 | 내용 | 구문 | 비고 |
|---|---|---|---|---|
| pay2_id | 30 | cookiepayments에서 발급받은 ID | 필수 | cookiepayments사에서 부여 |
| pay2_key | 50 | cookiepayments에서 발급받은 연동키 | 필수 | cookiepayments사에서 부여 |
{요청도메인}/api/urlcert [POST]
| 항목명 | 길이 | 내용 | 구문 | 비고 |
|---|---|---|---|---|
| URLKEY | 50 | 생성된 결제창 URL KEY | 필수 | URL결제창 생성 키 |
/* 토큰 발급 API */
curl -H "Content-Type: application/json" \
-d '{"pay2_id": "cookiepayments에서 발급받은 ID", \
"pay2_key": "cookiepayments에서 발급받은 연동키" \
}' \
-X POST "{요청도메인}/payAuth/token"
/* 발급 받은 TOKEN으로 결제 취소 API 통신 */
curl -H "Content-Type: application/json" \
-H "TOKEN: TOKEN API통해 발행된 TOKEN 값" \
-d '{"URLKEY": "생성된 결제창 URL KEY"}' \
-X POST "{요청도메인}/api/urlcert"
/* 토큰 발행 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, "TOKEN: TOKEN API통해 발행된 TOKEN 값");
$cookiepayments_url = "{요청도메인}/api/urlcert";
$request_data_array = array(
'URLKEY' => '생성된 결제창 URL KEY',
);
$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 | PG 사 응답코드 | 필수(json) | 정상 : 0000, 그외 에러 EA01: 결제 미진행 에러코드 |
| RESULTMSG | 100 | PG 사 응답메시지 | 필수(json) | |
| ORDERNO | 50 | 주문번호 | 필수(json) | 결제한 주문번호 |
| AMOUNT | 10 | 결제 된 금액 | 필수(json) | 문자 및 특수문자 허용 불가 |
| BUYERNAME | 20 | 고객명 | 필수(json) | |
| BUYEREMAIL | 50 | 고객 E-MAIL | EMAIL:필수 KAKAO,SMS:선택 (json) |
REQ_TYPE : EMAIL 사용시 > 청구서를 발송할 이메일 주소 |
| PRODUCTNAME | 40 | 상품명 | 필수(json) | & 문자를 입력하시면 오류 발생 |
| PRODUCTCODE | 10 | 상품코드 | 필수(json) | |
| PAYMETHOD | 20 | 결제수단 | 필수(json) | CARD(카드),BANK(계좌이체),VACCT(가상계좌),MOBILE(휴대폰) default: CARD BANK(계좌이체), VACCT(가상계좌), MOBILE(휴대폰) 결제는 PG사 등록 시 사용신청을 하셔야합니다. |
| BUYERID | 20 | 고객 ID | 필수(json) | |
| TID | 50 | PG 거래 고유번호 | 필수(json) | 전표출력 및 결제취소에 반드시 필요한 값 |
| ACCEPTNO | 10 | 승인번호 | 필수(json) | |
| ACCEPTDATE | 20 | 승인일시 | 필수(json) | |
| CANCELDATE | 20 | 취소날짜 | 필수(json) | |
| CANCELMSG | 50 | 취소메시지 | 필수(json) | |
| ACCOUNTNO | 50 | 가상계좌번호 | (JSON) | 가상계좌 이용 시 리턴 값 |
| RECEIVERNAME | 50 | 예금주성명 | (JSON) | 가상계좌 이용 시 리턴 값 |
| DEPOSITENDDATE | 50 | 계좌사용만료일 | (JSON) | 가상계좌 이용 시 리턴 값 |
| CARDNAME | 50 | 은행명 | (JSON) | 가상계좌 이용 시 리턴 값 |
| CARDCODE | 50 | 은행코드 | (JSON) | 가상계좌 이용 시 리턴 값 |