CookiePay API 매뉴얼

통지 전문(Noti)

통지 전문(Noti) 파라미터

통지 전문(Noti)은 JSON POST 형식으로 전송됩니다.

통지 전문(Noti)은 결제승인 또는 승인취소 응답 파라미터에 대하여 쿠키페이먼트에서 고객사로 Server To Server로 전송됩니다.
개발한 통지 URL 입력방법 : 쿠키페이먼츠 접속 후 > API 연동 메뉴 > PG사 조회 및 연동 설정 > PG 연동 버튼 클릭 > 통지 URL 입력란에 입력 후 설정 저장하시면 됩니다.
(https://www.cookiepayments.com/iroboard/view?bId=API_Devolper&wr_id=2129)

결제승인 전문 파라미터
항목명 길이 내용 구분 비고
PAY_METHOD 20 결제수단 필수(json) CARD:카드결제, BANK:계좌이체, VACCT:가상계좌
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 선택 결제 요청시 입력한 값
ETC2 100 사용자 추가 필드2 선택 결제 요청시 입력한 값
ETC3 100 사용자 추가 필드3 선택 결제 요청시 입력한 값
ETC4 100 사용자 추가 필드4 선택 결제 요청시 입력한 값
ETC5 100 사용자 추가 필드5 선택 결제 요청시 입력한 값
취소완료 전문 파라미터 (취소노티)

noti_type
- cancel : 쿠키페이 거래내역관리 > 거래내역 메뉴에서 취소시 전송됩니다.
- deposit_cancel : 입금후 취소완료시 전송됩니다. (키움페이만 이용가능)
취소노티 활성화 방법 : [확인]

항목명 길이 내용 구분 비고
paymethod 20 결제수단 필수(json) CARD(카드), KAKAOPAY(카카오페이), NAVERPAY(네이버페이)
BANK(계좌이체)
orderno 50 주문번호 필수(json) 주문번호
noti_type 15 통지유형 필수(json) cancel : 취소노티, deposit_cancel : 입금후 취소 노티
cancel_amount 20 취소요청 금액 필수(json)
tid 50 PG 거래 고유번호 필수(json) PG사 결제 거래고유번호 (전표출력 및 결제취소에 사용됩니다)
cancel_date 20 취소일시 필수(json) 취소완료일시(YmdHis)
PHP (결제승인 PHP 샘플)

// 결제정보 수신 후 데이터베이스에 입력되는 필드값은 고객님의 홈페이지 결제 테이블에 맞게 입력하셔야 합니다. 
// 결제요청시 결제시도 데이터는 디비에 우선 저장하신후 [결제완료전문] 신호를 받으신후 결제완료 정보를 업데이트합니다.
// 계좌이체, 가상계좌의 경우 ACCEPT_NO 승인번호의 리턴 값이 없으므로 예외 처리하여 주시기 바랍니다.
// 결제 테이블 설계의 경우 비즈니스 로직에 때라 상이하므로 아래 예제 코드는 참조만 하여 주시기 바랍니다.

$params = json_decode(file_get_contents('php://input'), true); 

if( !empty($params['ACCEPT_NO']) && !empty($params['TID']) && !empty($params['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
    [PAY_METHOD] => CARD
    */

    /* 전달받은 결제정보로 결제완료 처리 예제코드 */
    $SQL = "UPDATE '결제테이블' set ";
    $SQL .= "ACCEPT_DATE    = '".$params['ACCEPT_DATE']."', ";
    $SQL .= "ACCEPT_NO      = '".$params['ACCEPT_NO']."', ";
    $SQL .= "TID            = '".$params['TID']."',";
    $SQL .= "CARDCODE       = '".$params['CARDNO']."',";
    $SQL .= "CARDNAME       = '".$params['CARDNAME']."',";
    $SQL .= "QUOTA          = '".$params['QUOTA']."',";
    $SQL .= "PAY_STATUS     = '결제성공' ";

    $SQL .= "WHERE ORDERNO  = '".$params['ORDERNO']."' ";
    $SQL .= "AND AMOUNT     = '".$params['AMOUNT']."' ";
    $SQL .= "AND PAY_STATUS = '결제대기' ";
    $SQL .= "LIMIT 1 ";

    $result = mysql_query($SQL, 'Connect_Info');

}
C# (결제승인 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
    {

        //인증결제 완료전문 MS-SQL DB 입력
        public void CompleteMssql(ResponseVo param)
        {
            //데이터 DB 입력            
            using (SqlConnection connection = new SqlConnection("Server=localhost; Uid=; Pwd =; database=;"))
            {
                SqlCommand command = new SqlCommand();
                command.Connection = connection;
                command.CommandText = @"UPDATE '결제 테이블'
                                           SET ACCEPT_DATE = @ACCEPT_DATE
                                              ,ACCEPT_NO = @ACCEPT_NO
                                              ,TID = @TID
                                              ,CARDCODE = @CARDCODE
                                              ,CARDNAME = @CARDNAME
                                              ,QUOTA = @QUOTA
                                              ,PAY_STATUS = @PAY_STATUS
                                         WHERE ORDERNO = @ORDERNO
                                           AND AMOUNT = @AMOUNT
                                           AND PAY_STATUS = @PAY_STATUS2";

                command.Parameters.AddWithValue("@ACCEPT_DATE", param.ACCEPTDATE);
                command.Parameters.AddWithValue("@ACCEPT_NO", param.ACCEPTNO);
                command.Parameters.AddWithValue("@TID", param.TID);
                command.Parameters.AddWithValue("@CARDCODE", param.CARDCODE);
                command.Parameters.AddWithValue("@CARDNAME", param.CARDNAME);
                command.Parameters.AddWithValue("@QUOTA", param.QUOTA);
                command.Parameters.AddWithValue("@PAY_STATUS", "결제성공");
                command.Parameters.AddWithValue("@ORDERNO", param.ORDERNO);
                command.Parameters.AddWithValue("@AMOUNT", param.AMOUNT);
                command.Parameters.AddWithValue("@PAY_STATUS2", "결제대기");

                connection.Open();
                int result = command.ExecuteNonQuery();
                connection.Close();
            }

            Response.Redirect("/Home/Index");
        }
    }
}