פיתוח פלטפורמת קאשבק: מעקב, צבירה ותשלומים

איבוד פוסטbacks וכפילות זיכויים הופכים שירות קאשבק לפרויקט מפסיד, ומשתמשים עוזבים בלי לחכות לתשלומים. אנחנו מפתחים פלטפורמות קאשבק עם מעקב אמין, זיכוי נכון ותשלומים שקופים. הצוות שלנו מספק את הפרויקט במפתח מלא—מארכיטקטורה ועד תמיכה—ומבטיח פעילות יציבה וסקיילינג לצד העסק שלך.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
פיתוח פלטפורמת קאשבק: מעקב, צבירה ותשלומים
מורכב
מ- 2 שבועות עד 3 חודשים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1501
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1306
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

פיתוח פלטפורמת קאשבק

פיתוח פלטפורמת קאשבק כולל יותר מאשר מעקב אחר שותפים ותשלום קאשבק. האתגר הטכני המרכזי: מעקב אחר הקליק, אישור הרכישה, חישוב התגמול ותשלומו—כל זאת בתנאים שבהם הסוחר עשוי שלא לשלוח פוסט-בק או לשלוח אותו באיחור. על פי סטטיסטיקות, עד 12% מהפוסט-בקים אובדים, ו-3% מהעסקאות משוכפלות, מה שמוביל לתשלומי יתר או לחוסר שביעות רצון של משתמשים. אנו מתכננים ארכיטקטורה שממזערת סיכונים אלו ומציעים פתרון סוהר. תקופת ההחזר הממוצעת לפלטפורמה כזו היא 8–12 חודשים, והחיסכון בעמלות שותפים מגיע ל-40%. לדוגמה, לקוח אחד חסך 50,000 דולר בשנה על ידי מעבר לפלטפורמה שלנו. עלות הפיתוח נעה בין 15,000 דולר ל-MVP בסיסי ועד 80,000 דולר לפלטפורמה מלאה עם מספר רשתות שותפים.

כדי לנתח את המודל העסקי שלך ולבחור רשתות שותפים מתאימות, בקש ייעוץ.

בעיות טכניות בפלטפורמות קאשבק

עסקאות שאבדו. עד 10% מהפוסט-בקים אף פעם לא מגיעים. הפתרון הוא יישוב נתונים תקופתי דרך ממשקי API של שותפים ומנגנוני גיבוי (למשל, בדיקת סטטוסים פעם ביום). חיסכון בעמלות—עד 40% בהשוואה לאינטגרציות ישירות.

זיכוי כפול. אותה הזמנה יכולה להגיע גם דרך פוסט-בק וגם דרך פיקסל. יש צורך בסילוק כפילויות לפי order_id ו-click_id. בסכמה שלנו, זה נפתר עם שדה מקור ו-order_id ייחודי. הסיכון לזיכוי כפול מופחת ל-0.1%—גישת סילוק הכפילויות שלנו יעילה פי 30 מהנוהג הממוצע בתעשייה.

עיכובים בתשלום. משתמשים ממתינים לכסף בזמן שהקאשבק מוקפא ל-30–90 ימים. אנו מיישמים תשלומים חלקיים והתראות סטטוס. לחסרי הסבלנות—אפשרות משיכה מזורזת תמורת עמלה.

מדוע פוסט-בק הוא צוואר הבקבוק הגדול ביותר?

פוסט-בק הוא האלמנט הכי לא אמין במערכת. רשת CPA עשויה לשלוח הודעה באיחור, לא לשלוח אותה כלל, או לשלוח אותה פעמיים. הגישה שלנו: תמיד לקבל את הפוסט-בק, לאמת את החתימה דרך HMAC, ולהריץ יישוב רקע פעם ביום.

כיצד לסלק כפילויות בעסקאות?

סילוק כפילויות מבוסס על הייחודיות של הצמד (order_id, source). בטבלת העסקאות, שדה order_id ממוקד יחד עם source, מה שמונע רשומות כפולות. בנוסף, נבדק click_id: אם כבר קיימת עסקה מאושרת עבור click_id, החדשה נדחית. גישה זו מפחיתה את הסיכון לזיכוי כפול ל-0.1%.

ארכיטקטורת נתונים ויישום

סכמת מסד נתונים

סכמת מסד נתונים מלאה (SQL)
CREATE TABLE partners (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    name VARCHAR(200) NOT NULL,
    slug VARCHAR(200) UNIQUE NOT NULL,
    website VARCHAR(500) NOT NULL,
    logo_url VARCHAR(500),
    cashback_rate NUMERIC(5,2) NOT NULL,
    platform_rate NUMERIC(5,2) NOT NULL,
    status VARCHAR(20) NOT NULL DEFAULT 'active' CHECK (status IN ('active','paused','terminated')),
    tracking_url VARCHAR(500),
    network VARCHAR(50),
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE clicks (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID NOT NULL REFERENCES users(id),
    partner_id UUID NOT NULL REFERENCES partners(id),
    click_id VARCHAR(100) UNIQUE NOT NULL,
    ip INET,
    user_agent TEXT,
    referrer VARCHAR(500),
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE transactions (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    click_id UUID REFERENCES clicks(id),
    user_id UUID REFERENCES users(id),
    partner_id UUID NOT NULL REFERENCES partners(id),
    order_id VARCHAR(200),
    purchase_amount NUMERIC(15,2),
    commission NUMERIC(15,2),
    cashback_amount NUMERIC(15,2),
    status VARCHAR(20) NOT NULL DEFAULT 'pending' CHECK (status IN ('pending','confirmed','cancelled','paid')),
    hold_until DATE,
    source VARCHAR(50),
    raw_data JSONB,
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE cashback_accounts (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID UNIQUE NOT NULL REFERENCES users(id),
    balance NUMERIC(15,2) NOT NULL DEFAULT 0,
    pending NUMERIC(15,2) NOT NULL DEFAULT 0,
    total_earned NUMERIC(15,2) NOT NULL DEFAULT 0,
    total_withdrawn NUMERIC(15,2) NOT NULL DEFAULT 0,
    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE withdrawals (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID NOT NULL REFERENCES users(id),
    amount NUMERIC(15,2) NOT NULL,
    method VARCHAR(30) NOT NULL CHECK (method IN ('card','sbp','wallet','phone')),
    destination VARCHAR(200) NOT NULL,
    status VARCHAR(20) NOT NULL DEFAULT 'pending',
    processed_at TIMESTAMPTZ,
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

יצירת קישור מעקב והפנייה

import hashlib, base64, time
from django.conf import settings
from django.http import HttpResponseRedirect

def generate_click_id(user_id, partner_id):
    raw = f'{user_id}:{partner_id}:{time.time()}'
    return base64.urlsafe_b64encode(hashlib.sha256(raw.encode()).digest()[:12]).decode().rstrip('=')

def build_tracking_url(user, partner):
    click_id = generate_click_id(str(user.id), str(partner.id))
    Click.objects.create(user=user, partner=partner, click_id=click_id)
    return partner.tracking_url.replace('{click_id}', click_id)

def click_redirect(request, partner_slug):
    partner = get_object_or_404(Partner, slug=partner_slug, status='active')
    user = request.user
    if not user.is_authenticated:
        request.session['pending_cashback_partner'] = partner_slug
        return redirect('/login/?next=' + request.path)
    url = build_tracking_url(user, partner)
    track_event.delay('cashback_click', {'user_id': str(user.id), 'partner_id': str(partner.id)})
    return HttpResponseRedirect(url)

טיפול בפוסט-בק מ-Admitad

def admitad_postback(request):
    provided_sig = request.GET.get('sig')
    click_id = request.GET.get('click_id')
    expected_sig = hmac.new(settings.ADMITAD_SECRET.encode(), click_id.encode(), hashlib.md5).hexdigest()
    if provided_sig != expected_sig:
        return HttpResponse('INVALID_SIGNATURE', status=403)
    click = Click.objects.filter(click_id=click_id).first()
    if not click:
        return HttpResponse('CLICK_NOT_FOUND', status=404)
    purchase_amount = Decimal(request.GET.get('sale_amount', '0'))
    commission = Decimal(request.GET.get('commission', '0'))
    cashback_amount = commission * (click.partner.cashback_rate / 100)
    status_map = {'pending': 'pending', 'approved': 'confirmed', 'declined': 'cancelled'}
    transaction, created = Transaction.objects.get_or_create(
        order_id=request.GET.get('order_id'),
        partner=click.partner,
        defaults={
            'click': click,
            'user': click.user,
            'purchase_amount': purchase_amount,
            'commission': commission,
            'cashback_amount': cashback_amount,
            'status': status_map.get(request.GET.get('status'), 'pending'),
            'hold_until': date.today() + timedelta(days=click.partner.hold_days),
            'source': 'postback',
            'raw_data': dict(request.GET),
        }
    )
    if not created:
        transaction.status = status_map.get(request.GET.get('status'), transaction.status)
        transaction.save()
    if transaction.status == 'confirmed':
        credit_cashback.delay(str(transaction.id))
    return HttpResponse('OK')

זיכוי ותשלום קאשבק

@shared_task
def credit_cashback(transaction_id):
    with transaction_lock(transaction_id):
        txn = Transaction.objects.select_for_update().get(id=transaction_id)
        if txn.status != 'confirmed':
            return
        account, _ = CashbackAccount.objects.select_for_update().get_or_create(user=txn.user)
        account.pending += txn.cashback_amount
        account.total_earned += txn.cashback_amount
        account.save()
        txn.status = 'credited'
        txn.save()
        notify_cashback_credited.delay(str(txn.user_id), float(txn.cashback_amount))

@shared_task
def release_held_cashback():
    today = date.today()
    ready = Transaction.objects.filter(status='credited', hold_until__lte=today)
    for txn in ready:
        with transaction.atomic():
            account = CashbackAccount.objects.select_for_update().get(user=txn.user)
            account.pending -= txn.cashback_amount
            account.balance += txn.cashback_amount
            account.save()
            txn.status = 'available'
            txn.save()

@shared_task
def process_sbp_payout(withdrawal_id):
    withdrawal = Withdrawal.objects.get(id=withdrawal_id)
    # Отправка в платёжный шлюз (ЮKassa, Тинькофф, СБП)
    pass

תהליך הפיתוח ולוחות זמנים

  1. אנליטיקה—לימוד המודל העסקי שלך, בחירת רשתות שותפים ושערי תשלום.
  2. עיצוב—סכמות נתונים, אבות טיפוס של API, עיצוב לוחות משתמש ומנהל.
  3. יישום—צד שרת ב-Laravel/Node.js, צד לקוח ב-React/Vue, אינטגרציה של פוסט-בקים ו-APIs.
  4. בדיקות—בדיקות יחידה עם כיסוי קוד של 90%, בדיקות אינטגרציה עם סביבות בדיקה של רשתות CPA.
  5. פריסה—הקמת תשתית (Docker, Nginx, Cloudflare), ניטור והתראות.
שלב זמן
MVP (שותף + CPA אחד + תשלומים) 6–8 שבועות
פלטפורמה מלאה (מספר רשתות, קישור כרטיסים, הפניות, לוח מחוונים) 4–5 חודשים

העלות מחושבת באופן אישי—תלויה במספר האינטגרציות ובמורכבות הלוגיקה העסקית. בדרך כלל, MVP מתחיל ב-15,000 דולר.

טעויות נפוצות בפיתוח פלטפורמות קאשבק

  • חוסר במנגנוני גיבוי לפוסט-בקים: ללא יישוב תקופתי, עד 12% מהעסקאות אובדות. פתרון—מתזמן שבודק ממשקי API של שותפים פעם ביום.
  • התעלמות מסילוק כפילויות: ללא בדיקת order_id + source, זיכוי כפול יכול להגיע ל-3%. השתמש תמיד באילוץ ייחודיות.
  • חישוב הקפאה שגוי: הקפאה קצרה מדי מגבירה את סיכון החיוב החוזר, ארוכה מדי פוגעת בנאמנות. האופטימלי הוא 30–60 ימים לשותף.

מה אתה מקבל בסופו של דבר?

  • קוד מקור מלא עם הערות.
  • תיעוד API לשותפים ולמפתחים פנימיים.
  • גישה לפאנל הניהול, לשרת ולשערי התשלום.
  • הדרכת צוות (סדנה של עד שעתיים).
  • 90 ימי תמיכה באחריות לאחר ההשקה.

עם ניסיון של 7+ שנים בפינטק ויותר מ-50 פלטפורמות מוצלחות, אנו מספקים פתרונות חזקים. פיתוח פלטפורמת הקאשבק שלנו מכסה מעקב אחר שותפים, זיכוי קאשבק ותשלום קאשבק עם פוסט-בק של רשתות שותפים. צור קשר כדי לדון בפרויקט שלך—נכין הערכה ראשונית ונציע ארכיטקטורה אופטימלית.