CookiePay API 매뉴얼

결제취소 API

결제취소 시 주의사항

결제취소는 신용카드 결제, 계좌이체에 한해서만 취소 가능합니다.
가상계좌(토스제외), 휴대폰결제는 해당 API를 이용하실 수 없습니다.

결제취소 요청전문

결제 취소 요청은 먼저 TOKEN 발행 API를 통해 TOKEN을 발급 받은 후 발행된 TOKEN을 가지고 결제취소 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사에서 부여
URL
{요청도메인}/api/cancel [POST]
CURL
/* 토큰 발급 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 값" \
     -H "ApiKey: cookiepayments에서 발급받은 연동키" \
     -d '{
            "tid": "결제 후 응답받은 PG사 거래 고유번호",
            "reason": "취소사유"
         }' \
     -X POST "{요청도메인}/api/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, "TOKEN: TOKEN API통해 발행된 TOKEN 값");
    array_push($headers, "ApiKey: cookiepayments에서 발급받은 연동키");

    $cookiepayments_url = "{요청도메인}/api/cancel";

    $request_data_array = array(
        'tid' => '결제 후 응답받은 PG사 거래 고유번호',
        'reason'=> '취소사유',
    );

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

    $result_array = json_decode($response,TRUE);
    print_r($result_array);
}
C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.Text;
using System.IO;
using System.Text.Json;
using Newtonsoft.Json.Linq;
using System.Web.Mvc;
using MySql.Data.MySqlClient;
using System.Data.SqlClient;

namespace pay.Controllers
{
    public class HomeController : Controller
    {

        string API_ID = "쿠키페이 결제 연동 key";
        string API_KEY = "쿠키페이 결제 연동 key";

        //결제 취소 요청 전문
        public ActionResult Cancel()
        {
            //토큰 발행 요청
            string TOKEN_URL = "{요청도메인}/payAuth/token";

            //전송 데이터 JSON 형식 만들기
            var token_json = new JObject();
            token_json.Add("pay2_id", API_ID);     //쿠키페이 결제 연동 ID
            token_json.Add("pay2_key", API_KEY);   //쿠키페이 연동 키

            //요청 HEADER 세팅
            HttpWebRequest token_request = (HttpWebRequest)WebRequest.Create(TOKEN_URL);
            token_request.Method = "POST";
            token_request.ContentType = "application/json";

            //데이터 전송
            byte[] token_bytes = Encoding.UTF8.GetBytes(token_json.ToString());
            token_request.ContentLength = token_bytes.Length;
            Stream token_reqStream = token_request.GetRequestStream();
            token_reqStream.Write(token_bytes, 0, token_bytes.Length);
            token_reqStream.Flush();
            token_reqStream.Close();

            //응답
            HttpWebResponse token_response = (HttpWebResponse)token_request.GetResponse();
            HttpStatusCode status = token_response.StatusCode;
            Stream token_res_stream = token_response.GetResponseStream();
            StreamReader token_read_stream = new StreamReader(token_res_stream);
            string token_resp_data = token_read_stream.ReadToEnd();
            //응답 토근 정보
            var token_result = JObject.Parse(token_resp_data);
            token_read_stream.Close();
            token_res_stream.Close();
            token_response.Close();

            //0000: 성공
            string rtn_cd = Convert.ToString(token_result["RTN_CD"]);
            if (rtn_cd == "0000")
            {
                //결제 취소 요청
                string CANCEL_URL = "{요청도메인}/api/cancel";  //요청 URL
                string TOKEN = Convert.ToString(token_result["TOKEN"]);               //응답 받은 토큰 값
                //요청 HEADER 세팅
                HttpWebRequest cancel_request = (HttpWebRequest)WebRequest.Create(CANCEL_URL);
                cancel_request.Method = "POST";
                cancel_request.ContentType = "application/json";
                cancel_request.Headers.Add("ApiKey", API_KEY);
                cancel_request.Headers.Add("TOKEN", TOKEN);

                //전송 데이터 JSON 형식 만들기
                var cancel_json = new JObject();
                cancel_json.Add("tid", "");
                cancel_json.Add("reason", "고객변심");

                //데이터 전송
                byte[] cancel_bytes = Encoding.UTF8.GetBytes(cancel_json.ToString());
                cancel_request.ContentLength = cancel_bytes.Length;
                Stream cancel_reqStream = cancel_request.GetRequestStream();
                cancel_reqStream.Write(cancel_bytes, 0, cancel_bytes.Length);
                cancel_reqStream.Flush();
                cancel_reqStream.Close();

                //응답
                HttpWebResponse cancel_response = (HttpWebResponse)cancel_request.GetResponse();
                HttpStatusCode cancel_status = cancel_response.StatusCode;
                Stream cancel_res_stream = cancel_response.GetResponseStream();
                StreamReader cancel_read_stream = new StreamReader(cancel_res_stream);
                string cancel_resp_data = cancel_read_stream.ReadToEnd();

                //응답 정보
                var cancel_result = JObject.Parse(cancel_resp_data);
                System.Diagnostics.Trace.WriteLine(cancel_result);
                cancel_read_stream.Close();
                cancel_res_stream.Close();
                cancel_response.Close();
            }
            return View();
        }
    }
}
요청 전문 파라미터
항목명 길이 내용 구분 비고
TOKEN 제한없음 TOKEN API통해 발행된 TOKEN 값 필수(헤더) cookiepayments사에서 부여
ApiKey 제한없음 cookiepayments에서 발급받은 연동키 필수(헤더) cookiepayments사에서 부여
tid 50 PG사 거래 고유번호 필수 PG사에서 부여
amount 10 취소금액 전체 취소 : 선택
부분 취소 : 필수
부분 취소 시 전체 금액 보다 작은 값 입력
※ 부분 취소는 신용카드 : 인증/수기(키인)
결제 수단만 가능합니다.
taxfree_amt 10 비과세 취소금액 선택 비과세 취소금액
└ 요청 시 비과세 취소금액은 취소금액보다
큰 값을 입력할 수 없습니다.
└ Ex) 결제금액 1천원(과세 500원, 비과세 500원)인 경우

(총)취소금액 400원, 비과세 200원을 전송하면
(amount 400, taxfree_amt 200)
[과세 200원, 비과세 200원이 취소 됩니다.]

(총)취소금액 100원, 비과세 200원을 전송하면
(amount 100, taxfree_amt 200을 전송하면)
[취소되지 않습니다.]
※ 키움페이 > 복합과세 가맹점만 사용가능합니다.
reason 50 취소사유 필수
bank 30 환불계좌 은행코드 (토스) 선택 가상계좌시 필수
account_no 30 환불계좌 계좌번호 선택 가상계좌시 필수
account_name 30 환불계좌 예금주이름 선택 가상계좌시 필수

결제취소 응답전문

응답 전문 파라미터
항목명 길이 내용 구분 비고
cancel_tid 50 PG사 취소 고유 거래번호 필수
cancel_code 4 취소 응답코드 필수 정상 : 0000, 그외 에러
- 취소 응답코드 : 9029 발생시 > 입금후 취소 API 호출(키움페이만 이용가능)
cancel_msg 100 취소 응답메시지 필수
cancel_date 50 취소날자 필수
cancel_amt 10 취소 된 금액 필수