DataFast는 유료 고객을 유도하는 마케팅 채널을 발견하는 데 도움을 주는 수익 중심의 분석 도구입니다. Dodo Payments와 DataFast를 통합하면 트래픽 소스에 수익을 귀속시키고, 고가치 고객 세그먼트를 식별하며, 데이터 기반 결정을 통해 비즈니스를 성장시킬 수 있습니다.
작동 방식
DataFast는 쿠키에 저장된 고유 방문자 ID를 통해 방문자를 추적합니다. 마케팅 채널에 수익을 귀속시키려면 다음을 수행해야 합니다:
DataFast의 방문자 ID 를 체크아웃 세션을 생성할 때 datafast_visitor_id 쿠키에서 캡처합니다.
방문자 ID 를 결제 메타데이터에 저장합니다.
결제가 성공할 때 DataFast에 결제 데이터를 전송합니다 . 그들의 Payment API를 사용합니다.
이렇게 하면 DataFast가 성공적인 결제를 원래의 트래픽 소스와 일치시킬 수 있어 완전한 수익 귀속이 가능합니다.
시작하기
DataFast 스크립트 설치
먼저, 웹사이트에 DataFast 추적 스크립트를 설치합니다. 이렇게 하면 방문자를 추적하는 datafast_visitor_id 쿠키가 생성됩니다. 설치 지침은 플랫폼에 따라 DataFast 문서 를 방문하세요.
API 키 받기
DataFast 대시보드 에 로그인하고 웹사이트 설정으로 이동하여 API 키를 얻습니다.API 키를 안전하게 보관하고 클라이언트 측 코드에 노출하지 마세요.
체크아웃에서 방문자 ID 캡처
체크아웃 세션을 생성할 때 쿠키에서 DataFast 방문자 ID를 캡처하고 결제 메타데이터에 추가합니다.
웹훅을 통해 결제 데이터 전송
결제가 성공할 때 DataFast의 결제 API에 결제 데이터를 전송하도록 웹훅을 구성합니다.
완료!
🎉 이제 수익 데이터가 DataFast 대시보드에 마케팅 채널에 대한 완전한 귀속과 함께 나타납니다.
구현 가이드
1단계: 체크아웃 메타데이터에 방문자 ID 추가
체크아웃 세션을 생성할 때 쿠키에서 DataFast 방문자 ID를 캡처하고 결제 메타데이터에 포함시킵니다.
Next.js
Express.js
Other Frameworks
import { cookies } from 'next/headers' ;
import { dodopayments } from '@/lib/dodopayments' ;
export async function createCheckout ( productId : string ) {
// Capture DataFast visitor ID from cookie
const datafastVisitorId = cookies (). get ( 'datafast_visitor_id' )?. value ;
const payment = await dodopayments . payments . create ({
product_id: productId ,
// ... other payment configuration
metadata: {
datafast_visitor_id: datafastVisitorId , // Store visitor ID in metadata
},
});
return payment ;
}
2단계: DataFast에 결제 데이터 전송
결제가 성공할 때 DataFast의 결제 API에 결제 데이터를 전송하도록 웹훅 엔드포인트를 구성합니다.
웹훅 섹션 열기
Dodo Payments 대시보드에서 웹훅 → + 엔드포인트 추가 로 이동하고 통합 드롭다운을 확장합니다.
DataFast 선택
DataFast 통합 카드를 선택합니다.
API 키 입력
구성 필드에 DataFast API 키를 입력합니다.
변환 구성
결제 데이터를 DataFast의 결제 API에 맞게 형식화하도록 변환 코드를 편집합니다.
테스트 및 생성
샘플 페이로드로 테스트하고 생성 을 클릭하여 통합을 활성화합니다.
변환 코드 예제
기본 결제 귀속
function handler ( webhook ) {
if ( webhook . eventType === "payment.succeeded" ) {
const payment = webhook . payload . data ;
// Only send to DataFast if visitor ID exists in metadata
if ( payment . metadata && payment . metadata . datafast_visitor_id ) {
webhook . payload = {
amount: payment . total_amount / 100 , // Convert from cents to dollars
currency: payment . currency ,
transaction_id: payment . payment_id ,
datafast_visitor_id: payment . metadata . datafast_visitor_id ,
};
} else {
// Cancel dispatch if no visitor ID (prevents unnecessary API calls)
webhook . cancel = true ;
}
}
return webhook ;
}
See all 19 lines
소수점 없는 통화 처리
일부 통화(예: JPY)는 소수점을 사용하지 않습니다. 금액 계산을 적절히 조정하세요:
function handler ( webhook ) {
if ( webhook . eventType === "payment.succeeded" ) {
const payment = webhook . payload . data ;
if ( payment . metadata && payment . metadata . datafast_visitor_id ) {
// Zero decimal currencies: JPY, KRW, CLP, etc.
const zeroDecimalCurrencies = [ 'JPY' , 'KRW' , 'CLP' , 'VND' , 'UGX' , 'MGA' ];
const isZeroDecimal = zeroDecimalCurrencies . includes ( payment . currency );
webhook . payload = {
amount: isZeroDecimal
? payment . total_amount // Use amount as-is for zero decimal currencies
: payment . total_amount / 100 , // Convert from cents for other currencies
currency: payment . currency ,
transaction_id: payment . payment_id ,
datafast_visitor_id: payment . metadata . datafast_visitor_id ,
};
} else {
// Cancel dispatch if no visitor ID (prevents unnecessary API calls)
webhook . cancel = true ;
}
}
return webhook ;
}
See all 24 lines
구독 결제
정기 구독 결제의 경우 각 결제를 추적할 수 있습니다:
function handler ( webhook ) {
if ( webhook . eventType === "payment.succeeded" ) {
const payment = webhook . payload . data ;
// Check if this is a subscription payment
const isSubscription = payment . subscription_id !== null ;
if ( payment . metadata && payment . metadata . datafast_visitor_id ) {
webhook . payload = {
amount: payment . total_amount / 100 ,
currency: payment . currency ,
transaction_id: payment . payment_id ,
datafast_visitor_id: payment . metadata . datafast_visitor_id ,
// Optional: Add subscription context
... ( isSubscription && {
subscription_id: payment . subscription_id ,
}),
};
} else {
// Cancel dispatch if no visitor ID (prevents unnecessary API calls)
webhook . cancel = true ;
}
}
return webhook ;
}
See all 25 lines
모범 사례
방문자 ID를 조기에 캡처하세요 : 사용자가 다른 페이지로 이동했다가 나중에 돌아오더라도 정확한 귀속을 보장하기 위해 체크아웃 흐름에서 가능한 한 빨리 DataFast 방문자 ID를 저장하세요.
메타데이터에 항상 방문자 ID 포함 : 방문자 ID가 없으면 DataFast는 수익을 마케팅 채널에 귀속시킬 수 없습니다.
소수점 없는 통화 처리 : 일부 통화(JPY, KRW 등)는 소수점을 사용하지 않으므로 금액 계산을 적절히 조정하세요.
샘플 결제로 테스트 : 라이브로 전환하기 전에 통합이 올바르게 작동하는지 확인하세요.
DataFast 대시보드 모니터링 : 결제가 올바르게 나타나고 적절한 귀속이 이루어지고 있는지 확인하세요.
웹훅 재시도 사용 : DataFast의 결제 API는 멱등성이 있으므로 웹훅이 실패할 경우 재시도가 안전합니다.
문제 해결
DataFast API 키가 올바르고 활성화되어 있는지 확인합니다.
datafast_visitor_id가 캡처되고 결제 메타데이터에 저장되고 있는지 확인합니다.
웹훅 변환이 페이로드를 올바르게 형식화하고 있는지 확인합니다.
웹훅이 payment.succeeded 이벤트에서 트리거되고 있는지 확인합니다.
DataFast 대시보드에서 오류 메시지나 API 로그를 확인합니다.
DataFast 추적 스크립트가 웹사이트에 설치되고 작동하는지 확인합니다.
datafast_visitor_id 쿠키가 올바르게 설정되고 있는지 확인합니다.
체크아웃 생성과 결제 완료 간의 방문자 ID가 일치하는지 확인합니다.
체크아웃 세션을 생성하기 전에 방문자 ID를 캡처하고 있는지 확인합니다.
추가 지침을 위해 DataFast의 Payment API 문서 를 검토합니다.
JSON 구조가 DataFast의 Payment API 형식과 일치하는지 검증합니다.
모든 필수 필드 (amount, currency, transaction_id, datafast_visitor_id)가 있는지 확인합니다.
금액이 올바르게 변환되었는지 확인합니다 (대부분의 통화는 100으로 나누고, 소수점이 없는 통화는 제외).
API 엔드포인트 URL이 올바른지 확인합니다: https://datafa.st/api/v1/payments
샘플 웹훅 페이로드로 변환을 테스트합니다.
소수점 없는 통화(JPY, KRW, CLP, VND, UGX, MGA)의 경우 금액을 100으로 나누지 않고 그대로 전송하세요.
다른 모든 통화의 경우 금액을 100으로 나누어 센트에서 기본 단위로 변환하세요.
통화 코드가 ISO 4217 형식(예: “USD”, “EUR”, “JPY”)과 일치하는지 다시 확인하세요.
추가 리소스