Cashback Postback Spec
🔗 API Specification

캐시백 포스트백
구현 스펙

Cashback Postback Integration API Specification

캐시백은 이용자가 럭키박스 구매 시 일정 금액을 매체사 이용자에게 포인트로 되돌려 주는 것을 말합니다. 매체사 수익 금액의 일정 퍼센트를 이용자에게 캐시백하며, 구매 발생 시 캐시백 금액을 적립하고 구매 취소 발생 시 회수 처리합니다. 캐시백이 가능하려면 아래 스펙에 따라 캐시백 연동 API를 구현해 주셔야 하며, 이후 매체사 관리자 페이지 앱목록에서 캐시백 관련 설정을 진행해 주셔야 합니다.

HTTP POST HMAC-SHA256 응답 20x pbId 멱등성 보장 실패 시 10분 · 최대 10회 재시도
💰 캐시백 적용 범위 & 재시도 안내 반드시 확인
캐시백은 PG결제(카드·가상계좌) 구매와 제휴포인트 구매 모두에 대해 가능합니다.
캐시백은 API방식으로 럭키박스를 연동하신 경우에만 연동 가능합니다.
PG결제에 대해서만 캐시백하거나, PG·제휴포인트 모든 결제에 대해 캐시백하도록 설정할 수 있습니다. 해당 설정은 관리자 페이지 앱목록에서 직접 지정합니다.
cashbackAmount원(₩) 단위이므로, 매체사 앱의 현금 대 포인트 변환 비율에 따라 포인트로 변환한 뒤 지급 또는 회수해야 합니다.
캐시백 요청 실패 시 럭키박스 서버는 10분 간격으로 최대 10회 같은 요청을 재전송하며, 10회까지 모두 실패하면 해당 캐시백 적립은 실패로 처리됩니다.

캐시백 포스트백 API

API 주소매체사용 관리자 페이지에서 직접 설정해 주세요.
요청 타입POST
Content-Typeapplication/x-www-form-urlencoded
Acceptapplication/json
API 설명럭키박스에서 구매 또는 구매 취소가 발생할 때 매체사 서버로 전송되는 포스트백입니다. postbackType 값에 따라 이용자에게 캐시백 포인트를 지급(구매) 또는 회수(구매취소)합니다.
📥 요청 파라미터 (Request Parameters)
파라미터명데이터 타입설명비고
pbId string 캐시백 리워드 고유번호. 중복 지급 확인용으로 사용합니다. 최대 24자
rewardDate string 리워드가 발생한 일자. YYYYMMDD 형식의 숫자(년월일 조합)입니다. YYYYMMDD
rewardTime string 리워드가 발생한 시간. 유닉스 타임스탬프 값(밀리초 단위)입니다.
Node.js 예) const t = new Date(rewardTime) 형태로 사용 가능
Unix ms
userId string 캐시백을 받을 이용자 ID. 럭키박스 주소 획득 시 제공된 이용자 ID입니다.
postbackType string 구매/취소 구분값입니다.
0 구매 → 지급 1 구매취소 → 회수
구매인 경우 cashbackAmount만큼 지급, 구매취소인 경우 동일 금액을 회수합니다.
count string 구매 또는 취소된 개수입니다.
payType string 결제 수단입니다.
0 카드 1 가상계좌 3 제휴포인트
totalAmount string 총 결제 금액입니다. 단위 "원"
fee string 매체사 수수료. 구매/취소 시 매체사에 지급/회수되는 금액입니다.
feeRate string 구매 당시 매체사 수수료율(백분율)입니다. 백분율 %
cashbackAmount string 이용자에게 지급/회수해야 하는 금액입니다. 구매인 경우 지급, 구매취소인 경우 해당 금액만큼 회수합니다.
원 단위이므로, 매체사 앱의 현금 대 포인트 변환 비율에 따라 포인트로 변환 후 지급/회수
단위 "원"
cashbackRate string 매체사에서 설정한 캐시백 비율(백분율). 매체사 fee에 대해 cashbackRate 비율만큼 캐시백됩니다. 백분율 %
hash string 포스트백 유효성 검증값(HMAC-SHA256 기반 해시).
pbId + userId + cashbackAmount를 단순 문자열로 합친 뒤 HMAC-SHA256으로 해시하여 생성합니다.
비밀키는 매체사 앱에서 확인 가능하며, 생성 방식은 기존 사이트 접속정보 조회 시 해시 생성 방식과 동일합니다.
아래 예제 참조
🔐 hash 생성 공식
message = pbId + userId + cashbackAmount
hash = HMAC_SHA256(message, 매체사_비밀키) ※ 문자열 단순 결합 후 매체사 비밀키로 HMAC-SHA256 해싱 (기존 접속정보 조회 시 해시 생성 방식과 동일)
Node.js — hash 검증 예시
const crypto = require('crypto');

// 비밀키는 매체사 앱 설정에서 확인 가능
const secretKey = '<매체사 비밀키>';

// pbId + userId + cashbackAmount 단순 문자열 결합
const message = pbId + userId + cashbackAmount;

const expected = crypto
  .createHmac('sha256', secretKey)
  .update(message)
  .digest('hex');

// 요청의 hash 와 다르면 포스트백을 무시
if (expected !== req.body.hash) return ignore();

요청에 대한 응답 & result 코드

ℹ️
응답 형식모든 응답은 JSON 형태로, 반드시 20x HTTP 상태로 반환해야 합니다. 다른 에러 코드로 리턴되는 경우 모두 요청 실패로 가정합니다.
📤 응답 파라미터 (Response)
필드명데이터 타입설명
result string 아래 값 중 하나입니다.
success failed userNotFound duplicated
success요청 처리 성공
failed요청 처리 실패 (재전송 대상)
userNotFound해당 이용자가 존재하지 않음
duplicated이미 처리된 포스트백
🔁 result 값별 럭키박스 서버의 처리
result의미럭키박스 서버의 처리
success 요청 처리가 성공했습니다. 포스트백 전송을 성공 처리하고 종료합니다.
failed 요청 처리가 실패했습니다. 같은 포스트백을 일정 간격으로 최대 10회 재시도합니다.
userNotFound 해당 이용자가 존재하지 않습니다. 이용자 없음 처리 후 포스트백 전송을 종료합니다.
duplicated 이미 해당 포스트백이 처리되었습니다. 포스트백 전송을 성공 처리하고 종료합니다.
📄 응답 예시 (JSON) — Content-Type: application/json, HTTP 20x
{
  "result": "success"
}

포스트백 수신 서버 처리 순서

포스트백 수신 엔드포인트에서는 다음 순서대로 처리가 필요합니다.

S1
해시 유효성 검증
자체 생성한 해시와 요청의 hash를 비교합니다.
값이 다르면 포스트백을 무시합니다.
ℹ 해시 생성 방식은 럭키박스 사이트 접속주소 획득 요청 시 생성하는 방식과 동일합니다.
S2
이용자 존재 여부 확인
userId에 해당하는 이용자가 존재하는지 확인합니다.
존재하지 않으면 { result: "userNotFound" }를 리턴합니다.
S3
중복 처리 여부 확인 (멱등성)
pbId와 일치하는 처리 내역이 이미 있는지 확인합니다.
이미 있으면 { result: "duplicated" }를 리턴합니다.
⚠ 실패한 요청이 재전송되므로 반드시 중복 여부 확인이 가능해야 하며, 이를 위해 포스트백 처리 내역을 일정 기간 보관해야 합니다.
S4
포인트 지급 또는 회수
postbackType에 따라 userId 이용자에게 처리합니다.
구매(0): cashbackAmount만큼 지급 / 구매취소(1): 동일 금액 회수
cashbackAmount는 원 단위이므로, 앱의 현금 대 포인트 비율에 따라 포인트로 변환하여 지급/회수합니다.
S5
이력 저장 및 성공 응답
처리에 성공했다면 지급 이력을 보관하고 { result: "success" }를 리턴합니다.
✓ 지급/회수 이력 보관은 이후 중복 확인(S3)의 근거가 됩니다.
S6
일시적 처리 불가 시
매체사 서버 사정으로 당장 처리가 불가능하면 { result: "failed" }를 리턴합니다.
일정 시간 후 재처리되도록 할 수 있습니다.
S7
네트워크/서버 오류 & 재전송 정책
서버 대 서버 호출이 네트워크/서버 사정으로 실패하는 경우, 럭키박스 서버는 failed와 동일하게 처리합니다.
⚠ 캐시백 요청 실패 시 10분 간격으로 최대 10회 같은 요청을 재전송하며, 10회까지 모두 실패하면 해당 캐시백 적립은 실패로 처리됩니다.

📋

범례

success / failed
result 필드 리턴값
HMAC-SHA256
해시 알고리즘
pbId
캐시백 리워드 고유번호 (멱등성 키)
postbackType
0 = 구매(지급), 1 = 구매취소(회수)
payType
0 = 카드, 1 = 가상계좌, 3 = 제휴포인트
10분 · 10회
실패 시 재전송 간격 · 최대 횟수