결제 취소 API 로 취소요청 > 응답코드 : 9029 발생시 > "입금후 취소 API"를 호출하시기 바랍니다.
■ "입금 후 취소" 정의
이미 기 입금된 승인 건 or 정산 예정(확정)된 승인 건의 "승인 취소"는 가상 계좌로 입금해야 승인 취소가 된다는 의미입니다.
그리고 가상 계좌로 입금한 금액은 정산 예정(확정)일에 정상적으로 가맹점의 정산 계좌로 지급됩니다.■ 입금하실 은행 계좌 정보를 리턴 받아 > 입금하시면 통지전문(Noti)으로 결제취소 응답전문이 자동 전송됩니다.(1회)
※ 통지 전문(Noti) : [확인하기]
결제 취소 요청은 먼저 TOKEN 발행 API를 통해 TOKEN을 발급 받은 후 발행된 TOKEN을 가지고 결제취소 API와 통신하게 되어 있습니다.
라이브 : https://www.cookiepayments.com [POST]
테스트 : https://sandbox.cookiepayments.com [POST]
{요청도메인}/payAuth/token [POST]
항목명 | 길이 | 내용 | 구분 | 비고 |
---|---|---|---|---|
pay2_id | 30 | cookiepayments에서 발급받은 ID | 필수 | cookiepayments사에서 부여 |
pay2_key | 50 | cookiepayments에서 발급받은 연동키 | 필수 | cookiepayments사에서 부여 |
{요청도메인}/api/cancel [POST]
/* 토큰 발급 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"
/* 토큰 발행 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 | 입금유효기간 | 필수 | 입금유효기간 |