CookiePay API 매뉴얼

입금후 취소 API(키움페이만 이용가능)

결제 취소 API 로 취소요청 > 응답코드 : 9029 발생시 > "입금후 취소 API"를 호출하시기 바랍니다.

입금후 취소 안내사항

"입금 후 취소" 정의
이미 기 입금된 승인 건 or 정산 예정(확정)된 승인 건의 "승인 취소"는 가상 계좌로 입금해야 승인 취소가 된다는 의미입니다.
그리고 가상 계좌로 입금한 금액은 정산 예정(확정)일에 정상적으로 가맹점의 정산 계좌로 지급됩니다.

■ 입금하실 은행 계좌 정보를 리턴 받아 > 입금하시면 통지전문(Noti)으로 결제취소 응답전문이 자동 전송됩니다.(1회)

통지 전문(Noti) : [확인하기]

입금후 취소 요청전문

결제 취소 요청은 먼저 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": "취소사유",
            "amount": "취소금액",
         }' \
     -X POST "{요청도메인}/api/get_cancel_bank_account"
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/get_cancel_bank_account";

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

    $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/get_cancel_bank_account";  //요청 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", "전체취소");
                cancel_json.Add("amount", "취소금액");

                //데이터 전송
                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사에서 부여
reason 50 취소사유 필수
amount 10 취소 요청 금액 필수 취소 요청 금액

입금후 취소 응답전문

응답 전문 파라미터
항목명 길이 내용 구분 비고
RESULTCODE 4 결과 코드 필수 PG사 응답 코드 (성공시 "0000", 그외 에러)
RESULTMSG 50 결과 메세지 필수 PG사 응답 메시지 ("성공" 또는 오류 메세지)
TID 50 PG사 거래 고유번호 필수
BANKNAME 20 입금은행 필수 입금은행
ACCOUNTNO 20 입금계좌번호 필수 입금계좌번호
CANCELAMT 10 취소 요청 금액 필수 취소 요청 금액
DEPOSITAMT 10 입금하실 금액 필수 입금하실 금액
DEPOSITENDDATE 10 입금유효기간 필수 입금유효기간