연동 개요
소비자 클릭부터 전환 리포트까지의 전체 흐름입니다.
STEP 1
추적링크 클릭
/r/<slug>
STEP 2
click_id 발급
랜딩 URL에 부착
STEP 3
고객 구매 완료
주문에 affly_ref 저장
STEP 4
포스트백 POST
/pb/<token>
STEP 5
리포트 반영
pending → cleared
도메인 인증
소유권을 확인하면 계정이 자동으로 활성화(pending → active)됩니다.
대시보드 INTEGRATION → 도메인 인증에서 토큰을 확인한 뒤 아래 두 방식 중 하나를 적용하세요. Affly가 DNS → 파일 순으로 확인해 먼저 성공하는 쪽으로 인증합니다.
방식 A — DNS TXT 레코드
호스트(Name): _affly.yourstore.com
타입(Type): TXT
값(Value): affly-verify=<your-token>DNS 반영에 보통 5~30분 걸립니다 (Cloudflare는 거의 즉시). 직접 DNS를 제어하는 도메인에 적합해요.
방식 B — .well-known 파일
URL: https://yourstore.com/.well-known/affly-verify.txt
내용: <your-token> ← 다른 문자 없이 토큰만, 한 줄HTTPS 200 응답에 본문이 토큰과 정확히 일치해야 합니다. 즉시 반영되어 DNS 접근이 없는 Shopify·Cafe24·Webflow에 적합해요.
active로 자동 전환됩니다. 30분마다 백그라운드 재확인되니 버튼을 누르지 않아도 곧 라이브돼요. 인증 전에는 일부 기능(캠페인 노출 등)이 제한됩니다.추적 파라미터 (subId)
랜딩 시 도착하는 추적 식별자(subId)를 주문에 저장해 두는 것이 핵심입니다.
퍼블리셔의 Affly 추적링크(linkaffly.com/r/<slug>)를 소비자가 클릭하면, 추적 식별자(subId)가 상품 URL에 파라미터로 붙어 광고주 사이트로 전달됩니다. 파라미터 이름은 오퍼 설정을 따르며 기본은 affly_ref입니다 (placeholder 없는 직접 머천트 URL은 aff_sub로 부착).
# 추적링크 클릭 → 광고주 랜딩 URL (예시)
https://yourstore.com/products/123?affly_ref=<subId>이 값을 포스트백의 subId로 그대로 돌려줘야 어트리뷰션이 됩니다. subId 표준 형식:
subId = "<publisher_uuid>:<tracking_link_uuid>"affly_ref 값을 주문 메타데이터에 반드시 저장하세요. 결제 완료 시 이 값을 subId로 보내야 클릭↔주문이 연결됩니다.포스트백 API
고객이 결제를 마치면 백엔드에서 단일 POST로 전환을 보고합니다.
https://linkaffly.com/pb/{postback_token}postback_token은 대시보드 → 포스트백에서 확인·재발급할 수 있어요. GET도 받지만 자체 백엔드는 JSON 본문 POST를 사용하세요.
요청 본문
POST https://linkaffly.com/pb/{postback_token}
Content-Type: application/json
{
"orderId": "ORDER-12345",
"amount": 50000,
"subId": "<affly_ref 값>",
"commission": 7500,
"signature": "<hex HMAC-SHA256>",
"metadata": { "plan": "pro-12m" }
}| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
| orderId | string | 필수 | 주문 고유 ID (1~120자). (파트너, orderId) 조합으로 중복 제거됩니다. |
| amount | number | 필수 | 주문 금액. 파트너 정산 통화 기준이며 KRW가 아닐 수 있습니다. 음수 불가. |
| subId | string | 필수 | 랜딩 시 받은 affly_ref 값 (1~120자). |
| commission | int | 선택 | 파트너가 직접 계산한 커미션(정산 통화). metadata.commission_from_postback=true일 때만 반영. |
| signature | string | 필수 | HMAC-SHA256 서명 (hex). 아래 참고. |
| metadata | object | 선택 | 임의 key-value. conversions.metadata에 저장됩니다. |
서명 (HMAC-SHA256)
서명 메시지는 |로 이어붙인 문자열이며, commission을 보낼 때만 끝에 추가합니다. 시크릿(POSTBACK_SECRET)은 입점 시 안내드려요.
// 서명 메시지
message = `${orderId}|${amount}|${subId}` // commission 미포함
message = `${orderId}|${amount}|${subId}|${commission}` // commission 포함
// Node.js 예시 — hex 인코딩
import crypto from 'node:crypto';
const signature = crypto
.createHmac('sha256', process.env.POSTBACK_SECRET)
.update(message)
.digest('hex');응답 코드
| 코드 | 의미 |
|---|---|
| 201 | 전환 신규 생성 |
| 200 | 중복 — 동일 (파트너, orderId) 재전송. 재시도 안전(idempotent). |
| 400 | invalid_payload — 본문 스키마 오류 |
| 401 | invalid_signature — 서명 불일치 |
| 404 | 알 수 없는 postback token |
| 429 | 레이트리밋(분당 200) 초과 — Retry-After 헤더 참고 |
| 500 | 서버/ingest 오류 |
전환 처리 & 리포트
포스트백이 접수되면 ingest 파이프라인이 원자적으로 전환을 기록합니다.
- ·어트리뷰션 —
subId로 퍼블리셔·추적링크를 찾고, 최근 30일 이내 마지막 클릭(last-click)에 귀속합니다. - ·FX 환산 — 정산 통화가 외화면 당일 환율로 KRW 환산 후 플랫폼 마진을 적용합니다 (KRW면 그대로).
- ·커미션 산정 — 포스트백 override(허용 시) 또는 오퍼의 percent/flat 규칙으로 계산합니다.
- ·상태 전이 —
pending→ 홀드 기간(기본 30일) 경과 시cleared→ 정산 배치 후paid. 환불·취소 시reversed.
기록된 전환은 대시보드 전환 검수와 청구·정산에 반영됩니다. 모든 포스트백 호출(성공·거부 포함)은 로그에 남아 디버깅에 쓸 수 있어요.
샌드박스에서 직접 테스트
실제 추적링크와 동일한 클릭→쿠키→포스트백 흐름을 사용합니다. 단, 실제 트래픽 테이블에는 기록되지 않습니다 (샌드박스 쿠키만 사용).
데모 클릭 발생 → click_id 쿠키 발급
실제 운영에서는 어필리에이트의 추적링크 클릭 시 자동 발급됩니다.
주문 완료 시 포스트백 전송
결제 콜백에서 affly로 단일 POST 호출. 쿠키의 click_id로 자동 매칭됩니다.