FastCoins, yayıncılara yönelik bir PTC (Paid-To-Click) ağıdır. Reklamlarımızı sitenize yerleştirin, kullanıcılarınız onları izlediği için token ödül kazansın, gelir payını ise otomatik olarak alın.
Bir yayıncı hesabı oluşturun, alan adının size ait olduğunu doğrulayın ve incelemesi tamamlanınca API kimlik bilgilerinizi alın.
-
1Bir yayıncı hesabı oluşturun — FastCoins.com/publisher_dashboard adresinden. Bir site adı ve URL gereklidir.
-
2Domains sekmesinden bir alan adı ekleyin. Her alan adının kendi API Key'i, Secret Key'i, Bearer Token'ı, token yapılandırması ve postback URL'si vardır.
-
3Postback URL'nizi ayarlayın — sunucunuzda ödül bildirimlerini alan endpoint (aşağıdaki Postback bölümüne bakın).
-
4PTC API çağrılarının kimliğini doğrulamak için Domains sekmesinden bir Bearer Token oluşturun.
-
5Yayına girmeden önce endpoint'inizin doğru yanıt verdiğini doğrulamak için Domains sekmesinden bir test postback gönderin.
Bir kullanıcı reklam izlemeyi tamamladığında web sitenize gönderilen sunucudan sunucuya bildirim; böylece istemci tarafı kod olmadan ödülleri otomatik yansıtabilirsiniz.
🔐 Güvenlik Gereksinimleri
- Yetkili sunucu IP adresleri:
62.171.140.250,2a02:c207:2329:8601::1— bunu yalnızca$_SERVER['REMOTE_ADDR']ile karşılaştırın. Bu doğrudan sunucudan sunucuya bir çağrıdır, tarayıcı isteği değildir; arada bizim proxy/CDN'imiz yoktur.X-Forwarded-Forgibi bir başlık istemci tarafından gönderilir ve taklit edilmesi çok kolaydır, bu kontrol için ona güvenmeyin. userIpzorunludur, yalnızca bilgilendirme amaçlı değildir — eksikse veya geçerli bir IP değilse callback'i reddedin. Reklamı tamamlayan kullanıcının gerçek IP'sini (bizim tarafımızda Cloudflare üzerinden) her zaman çözümleyip gönderiyoruz; tam da bu yüzden dolandırıcılık tespiti, IP tabanlı limitler ve mükerrer kullanıcı kontrollerinde buna güvenebilirsiniz — onu yok sayan bir endpoint bu sinyali tamamen kaybeder.- Zorunlu HTTP yanıtı: tam olarak
ok— küçük harflerle, boşluksuz, HTML'siz, HTTP 200 - İmza algoritması (önerilen):
signature_sha256=HMAC-SHA256(subId + transId + reward, secret_key)—secret_keyHMAC anahtarıdır, mesaja eklenmez.userIpbunun bir parçası değildir. - İmza algoritması (eski, her callback'te hâlâ gönderilir):
signature=MD5(subId + transId + reward + secret_key)— değerler ayırıcısız birleştirilir.signature_sha256ortaya çıkmadan önce kurulmuş entegrasyonlar için süresiz çalışır durumda tutulur; zaten bunu doğruluyorsanız değiştirmeniz gereken bir şey yok. - 8 ondalıktan fazlasına mı ihtiyacınız var? Her callback ayrıca kendi
signature_sha256_precisedeğeriyle birliktereward_precise(10 ondalık) taşır:HMAC-SHA256(subId + transId + reward_precise, secret_key)— tamamen isteğe bağlı ve eklentidir, aynı şekilde hesaplanır, sadece daha hassas metin üzerinden.reward/signature_sha256/signaturekullanıp kullanmadığınızdan bağımsız olarak aynen eski gibi gönderilmeye devam eder. - Mükerrer önleme: ödül yansıtmadan önce her zaman veritabanınızda
transIddeğerini kontrol edin
📋 Postback Parametreleri (GET)
Postback URL'niz bu parametreleri HTTP GET ile alır.
| Parametre | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| subId | string | ZORUNLU | Sisteminizdeki kullanıcının benzersiz ID'si — widget/API çağrısında ilettiğiniz değer |
| transId | string | ZORUNLU | Benzersiz işlem ID'si — mükerrer yansıtmaları önlemek için her zaman kontrol edin |
| reward | float | ZORUNLU | Token para biriminiz cinsinden ödül (yapılandırdığınız token_rate ile zaten dönüştürüldü), 8 ondalıklı biçimlendirilir |
| reward_precise | float | İsteğe bağlı | reward ile aynı ödül, 8 yerine 10 ondalıklı — 8 ondalık sizin için yeterli hassasiyet vermeyince bunu kullanın |
| reward_name | string | ZORUNLU | Alan adınız için yapılandırılmış token adı (ör. POINTS, COINS) |
| reward_value | float | ZORUNLU | reward ile aynı — bitcotasks uyumluluğu için dahildir |
| offer_name | string | İsteğe bağlı | Tamamlanan reklamın başlığı — kayıt tutmak için faydalıdır |
| offer_type | string | İsteğe bağlı | FastCoins reklam görüntülemeleri için her zaman ptc |
| payout | float | İsteğe bağlı | reward ile aynı — üçüncü taraf uyumluluğu için dahildir |
| userIp | string | ZORUNLU | Teklifi tamamlayan kullanıcının gerçek IP adresi, bu callback gönderilmeden önce bizim tarafımızda Cloudflare üzerinden çözülür — eksikse veya FILTER_VALIDATE_IP'i geçmezse callback'i reddedin. Dolandırıcılık tespiti, IP tabanlı limitler, mükerrer kullanıcı tespiti, dönüşüm denetimi ve analiz için kullanın. |
| status | integer | ZORUNLU | 1 = Ödülü yansıt | 2 = Chargeback (ödülü düş) |
| signature_sha256 | string | ZORUNLU | subId + transId + reward değerinin, secret_key anahtarlı HMAC-SHA256'sı — yeni entegrasyonlar için önerilir |
| signature_sha256_precise | string | İsteğe bağlı | subId + transId + reward_precise değerinin, secret_key anahtarlı HMAC-SHA256'sı — yalnızca reward_precise değerini de okuyorsanız signature_sha256 yerine bunu doğrulayın |
| signature | string | ZORUNLU | Eski: subId + transId + reward + secret_key değerlerinin birleştirilmiş hâlinin (ayırıcısız) MD5'i. Her callback'te değişmeden gönderilmeye devam eder — signature_sha256 ortaya çıkmadan önce kurulmuş entegrasyonlar için tutulur. |
| test | integer | İsteğe bağlı | 1 = panelden test postback — gerçek ödül yansıtmayın |
🧮 Örnek: İmzalı Bir URL Oluşturma ve Doğrulama
Yayına girmeden önce kendi imza hesabınızı bizimkiyle karşılaştırabilmeniz için baştan sona işlenmiş bir örnek. Kullanılan gizli anahtar tamamen uydurmadır, yalnızca gösterim amaçlıdır.
Secret Key (example only, never a real one): demo_secret_do_not_use_9f8e7d6c Parameters for this conversion: subId = user_12345 transId = txn_987654321 reward = 0.50 status = 1 userIp = 127.0.0.1 signature_sha256 = HMAC-SHA256(subId + transId + reward, secret_key) = HMAC-SHA256("user_12345" . "txn_987654321" . "0.50", demo_secret_do_not_use_9f8e7d6c) = HMAC-SHA256("user_12345txn_9876543210.50", demo_secret_do_not_use_9f8e7d6c) = df3eafaa3e8cf4fe8fb40c7bed633f34bc7b964bca58d2d691314771a042d59c signature (legacy) = MD5(subId + transId + reward + secret_key) = MD5("user_12345" . "txn_987654321" . "0.50" . "demo_secret_do_not_use_9f8e7d6c") = MD5("user_12345txn_9876543210.50demo_secret_do_not_use_9f8e7d6c") = d1eb68e41cbd5770de9384c5be8ebb39 Resulting callback URL: https://yoursite.com/postback.php?subId=user_12345&transId=txn_987654321&reward=0.50&status=1&userIp=127.0.0.1&signature=d1eb68e41cbd5770de9384c5be8ebb39&signature_sha256=df3eafaa3e8cf4fe8fb40c7bed633f34bc7b964bca58d2d691314771a042d59c
reward_name, reward_value, offer_name, offer_type, payout ve test alanlarını da atlar — gerçek callback'iniz bunların tamamını içerir, yukarıdaki tabloya bakın.📐 İsteğe bağlı: 10 Ondalık Hassasiyet (reward_precise)
Aynı gizli anahtar, aynı callback — sadece reward değerinin 8 ondalığının barındırabileceğinden daha fazla kesirli hassasiyete sahip bir ödül. Tamamen eklentidir: 8 ondalık senaryonuzu zaten karşılıyorsa bunu atlayın.
Same secret key and subId/transId as above, but the underlying reward this time carries more precision: reward = 0.12345679 (8 decimals, rounded) reward_precise = 0.1234567890 (10 decimals) signature_sha256_precise = HMAC-SHA256(subId + transId + reward_precise, secret_key) = HMAC-SHA256("user_12345" . "txn_987654321" . "0.1234567890", demo_secret_do_not_use_9f8e7d6c) = 219d2101a528b8585161bd26c3bb80c5de8a6741d60d2f1778eb805a05f7a707
💻 PHP Uygulaması — postback.php
Bunu sunucunuza kaydedin, Domains sekmesinden Secret Key'inizi ayarlayın, sonra tam URL'yi alan adınızın Postback URL alanına yapıştırın.
// ── 1. YOUR SECRET KEY (from Domains tab → Secret Key) ───── $secret = ""; // ← paste your secret key here // ── 2. IP VALIDATION (callback source) ────────────────────── // REMOTE_ADDR only — this call comes straight from our server to // yours, no browser and no proxy of ours in between, so it's the // one value here that can't be spoofed by whoever is calling you. // X-Forwarded-For (or any other header) is attacker-controlled and // must never be trusted for this check. $allowed_ips = ['62.171.140.250', '2a02:c207:2329:8601::1']; $ip = $_SERVER['REMOTE_ADDR'] ?? ''; if (!in_array($ip, $allowed_ips, true)) { echo "ERROR: Invalid source IP"; exit; } // ── 3. COLLECT PARAMETERS ─────────────────────────────────── $userId = $_GET['subId'] ?? null; $transId = $_GET['transId'] ?? null; $status = $_GET['status'] ?? null; $isTest = isset($_GET['test']) && $_GET['test'] == 1; $userIp = $_GET['userIp'] ?? null; // real IP of the ad viewer — required, see step 4 // ── 3b. DYNAMIC PRECISION ──────────────────────────────────── // Prefer reward_precise (10 decimals) when the callback carries it; // fall back to the standard reward (8 decimals) otherwise. Whichever // pair is picked, it's verified against its own matching signature in // step 6 — if that signature is valid, the postback is accepted. $hasPrecise = isset($_GET['reward_precise'], $_GET['signature_sha256_precise']); $reward = $hasPrecise ? $_GET['reward_precise'] : ($_GET['reward'] ?? null); $signature = $hasPrecise ? $_GET['signature_sha256_precise'] : ($_GET['signature_sha256'] ?? null); // ── 4. VALIDATE USER IP (required) ────────────────────────── // userIp is mandatory — this is the real IP of the person who // completed the offer, already resolved through Cloudflare on our // end. Reject the callback outright rather than silently accepting // one without it, since your fraud detection / IP-limit / duplicate- // user checks depend on this value actually being present and valid. if (!$userIp || !filter_var($userIp, FILTER_VALIDATE_IP)) { echo "ERROR: Invalid user IP"; exit; } // ── 5. VALIDATE REQUIRED PARAMS ───────────────────────────── if (!$userId || !$transId || $reward === null || !$signature) { echo "ERROR: Missing parameters"; exit; } // ── 6. VERIFY SIGNATURE ───────────────────────────────────── // Only subId + transId + reward go into this hash — userIp is NOT // part of it. $secret is the HMAC key, not concatenated into the // message. Don't add userIp here unless a different provider's docs // explicitly say their signature scheme includes it. $expected = hash_hmac('sha256', $userId . $transId . $reward, $secret); if (!hash_equals($expected, $signature)) { echo "ERROR: Signature mismatch"; exit; } // ── 7. HANDLE CHARGEBACK (status = 2) ─────────────────────── if ((int)$status === 2) { $reward = -abs((float)$reward); // negative = deduct } // ── 8. TEST CALLBACK ───────────────────────────────────────── // Authenticated and validated like any other callback, but must not // touch a real balance. if ($isTest) { echo "ok"; exit; } // ── 9. PREVENT DUPLICATES, CREDIT REWARD & STORE USER IP ────── // Replace with your actual DB logic. if (!isTransactionProcessed($transId)) { creditUserReward($userId, $reward, $transId); // If your credit function only takes these 3 args, store $userIp // with the conversion separately, e.g.: // saveConversionIp($transId, $userId, $userIp); } // ── 10. REQUIRED RESPONSE ─────────────────────────────────── echo "ok"; // MUST return exactly this, nothing else
🕓 Eski Doğrulama — MD5
signature değerini hâlihazırda MD5 ile mi doğruluyorsunuz? Her callback'te aynen gönderilmeye devam ediyor — buradaki kısım tamamen referans amaçlıdır. Yapılacak bir şey yok. Yeni entegrasyonlar bunun yerine yukarıdaki signature_sha256 değerini kullanmalıdır.$signature = $_GET['signature'] ?? null; $expected = md5($userId . $transId . $reward . $secret); if (!hash_equals($expected, $signature)) { echo "ERROR: Signature mismatch"; exit; } // ...same IP check, userIp check, and crediting logic as the main example above.
🔀 Callback Akışı
- 1Callback alındı
- 2
REMOTE_ADDRdeğerini IP beyaz listesiyle karşılaştırın - 3
userIpdahil parametreleri okuyun - 4
userIpdeğerini doğrulayın — eksikse veya geçerli bir IP değilse reddedin - 5Diğer zorunlu parametreleri doğrulayın
- 6İmzayı doğrulayın
- 7
statusdeğerini kontrol edin —2ise chargeback olarak uygulayın - 8
test=1ise hiçbir şey yansıtmadanokdöndürün - 9Mükerrer yansıtmaları önlemek için
transIddeğerini veritabanınızla karşılaştırın - 10Ödülü yansıtın ya da geri alın ve dönüşümle birlikte
userIpdeğerini saklayın - 11
okdöndürün
Olası yanıtlar:
ok— callback işlendi (veya test callback'i olarak doğrulandı)ERROR: Invalid source IPERROR: Invalid user IPERROR: Missing parametersERROR: Signature mismatch
ok olan bir HTTP 200 döndürün — boşluksuz, satır sonusuz, HTML'siz.transId için birden çok kez çağrılması güvenli olsun.test=1 içerir — bunlar için ödül yansıtmayı atlayın.Mevcut PTC reklamlarını bir REST API üzerinden sorgulayın ve kendi arayüzünüzle render edin. Widget yerleştirmek gerekmez.
🌐 Endpoint
| Segment | Açıklama |
|---|---|
| API_KEY | Alan adınızın API Key'i — Publisher Panelinizin Domains sekmesinde bulunur |
| USER_ID | Sisteminizdeki kullanıcının benzersiz tanımlayıcısı. Postback'te subId olarak döndürülür |
| USER_IP | Kullanıcının gerçek IP adresi — reklam hedeflemesi ve dolandırıcılık önleme için kullanılır. İstemcinin gerçek IP'sini iletin |
| DEVICE | Tam olarak desktop veya mobile — üçüncü bir değer yoktur. Tabletler (iPad, Android tabletler) mobile sayılır. Ziyaretçinin gerçek cihazı, herhangi bir reklamveren cihaz hedefli bir kampanya yürüttüğü anda zorunludur: bu API'yi kendi sunucunuzdan çağırdığınız için sunucunuzun User-Agent'ı ziyaretçininkisi değildir, onu sizin için tespit edemeyiz — tespit edip iletmek size düşer. desktop/mobile dışında bir şey göndermek (doğrudan "tablet" yazmak dâhil) hiç göndermemekle eşit sayılır — kendiniz mobile olarak eşleyin. Bu durumda bu değeri eksik veya yanlış yazılmış gönderen istek HTTP 400 alır. |
[DEVICE] göndermiyorsa hemen ekleyin. Şu an sessizce yok sayılıyor, ancak cihaz hedeflemesi devreye girdiği anda HTTP 400 döndürmeye başlayacak — akışınızın bozulmasını beklemeyin.🔑 Kimlik Doğrulama — Bearer Token
Authorization başlığında bir Bearer Token gerektirir. Her alan adı için Domains sekmesinden bir tane oluşturun ("Bearer Token" yanındaki 🔄 düğmesi).💻 PHP Örneği
// ── YOUR CREDENTIALS (from Domains tab) ───────────────────── $apiKey = 'YOUR_API_KEY'; $bearerToken = 'YOUR_BEARER_TOKEN'; // ── USER DATA ──────────────────────────────────────────────── $userId = $_SESSION['user_id']; // your user's unique ID // REMOTE_ADDR by default — it's the one value here that can't be // spoofed by the visitor. Only read a proxy header instead (e.g. // CF-Connecting-IP) if your own server sits behind a reverse proxy // you control and trust — never a client-supplied header like // X-Forwarded-For, which the visitor's own browser can set to // anything. $userIp = $_SERVER['REMOTE_ADDR'] ?? ''; // Required once any advertiser runs a device-targeted campaign — this // script call happens during the visitor's own page load, so THIS // server's incoming User-Agent is theirs. Don't skip this: a call from a // background job/cron with no real visitor attached has no correct value // to send here. $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? ''; $device = preg_match('/Mobi|Android|iPhone|iPod|iPad|BlackBerry|IEMobile|Opera Mini/i', $userAgent) ? 'mobile' : 'desktop'; // ── BUILD URL ──────────────────────────────────────────────── $url = 'https://FastCoins.com/api/' . $apiKey . '/' . urlencode($userId) . '/' . urlencode($userIp) . '/' . $device; // ── CURL REQUEST ───────────────────────────────────────────── $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $bearerToken, 'Accept: application/json', ], ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $data = json_decode($response, true); // ── HANDLE RESPONSE ────────────────────────────────────────── if ($httpCode === 200 && $data['status'] === '200') { foreach ($data['data'] as $ad) { // $ad['url'] already contains the user subId encoded echo '<a href="' . htmlspecialchars($ad['url']) . '" target="_blank">'; echo htmlspecialchars($ad['title']); echo ' — ' . $ad['reward'] . ' ' . $ad['currency_name']; echo '</a><br>'; } } else { echo 'No ads available.'; }
📦 Yanıt Formatı
Başarılı yanıtlar şu JSON yapısıyla HTTP 200 döndürür:
| Alan | Tür | Açıklama |
|---|---|---|
| id | string | Reklamın benzersiz tanımlayıcısı |
| image | string | Reklam banner görselinin tam URL'si — boş olabilir |
| title | string | Görüntülenecek başlık — bunu kullanıcılarınıza gösterin |
| description | string | Reklamın kısa açıklaması |
| duration | string | Gerekli izleme süresi (saniye): 2, 30 veya 60 |
| reward | float | Alan adınızın token para birimi cinsinden ödül miktarı (zaten dönüştürüldü) |
| currency_name | string | Alan adınız için yapılandırılmış token adı (ör. COINS, USDT) |
| url | string | Reklamı izlemesi için kullanıcıyı buraya yönlendirin. Tamamlandığında postback otomatik tetiklenir. Kullanıcının subId'sini hâlihazırda kodlanmış içerir. |
| boosted_campaign | boolean | Bunun öne çıkarılmış bir reklam olup olmadığı — arayüzünüzde bunları vurgulamayı düşünün |
| ad_type | string | Iframe = bir çerçeve içinde oynar | Redirect = kullanıcı reklamverenin sayfasına gider |
⚠️ Hata Kodları
Hata yanıtları, 200 olmayan bir status alanıyla aynı JSON yapısını paylaşır.
| HTTP | status | Neden ve Çözüm |
|---|---|---|
| 401 | 401 | Geçersiz API key — URL'deki API_KEY segmentini kontrol edin ya da alan adı istediği hâlde Bearer Token eksik |
| 403 | 403 | Bearer Token uyuşmuyor — yeniden oluşturun ve Domains sekmesinde güncelleyin |
| 400 | 400 | Geçersiz USER_ID formatı — alfanümerik olmalı (a-z, 0-9, _, -, .), en fazla 255 karakter |
| 400 | 400 | DEVICE segmenti eksik veya geçersiz — yalnızca cihaz hedeflemesi devredeyken döndürülür. Tam olarak desktop veya mobile olmalı |
| 500 | 500 | Dahili sunucu hatası — message alanı hata ayıklama ayrıntılarını içerir. Sürerse destekle iletişime geçin. |
API çağrısından sitenizde ödül yansıtmasına kadar baştan sona akış.
📡 API + Postback Akışı
GET /api/…url değerine tıklarGET postback.phpok döndür🧩 Widget Yerleştirme (alternatif)
API'yi kullanmak istemiyorsanız widget'ı iframe olarak yerleştirin — her şeyi otomatik halleder, stilleri sayfanın geri kalanından izole tutulur.
<iframe src="https://fastcoins.click/widget-embed.php?api_key=YOUR_API_KEY&sub_id={USER_ID}" style="width:100%;height:640px;border:none;" loading="lazy"></iframe>
YOUR_API_KEY yerine alan adınızın API Key'ini, {USER_ID} yerine mevcut kullanıcının ID'sini koyun (sunucu tarafında render edilir). Widget kullanılabilir reklamları ve görevleri satır içi gösterir ve tamamlanınca postback'i otomatik tetikler. iframe'i düzeninize göre uzun ya da kısa yapmak için style içindeki 640px değerini ayarlayın.sub_id (= {USER_ID}) — ek ile bölme yok. Kullanıcılarınızın her biri tek ve sabit bir id ile tanımlanmalıdır. Formatı siz seçersiniz — opak bir id, bir kullanıcı adı, bir e-posta (ör. ABD01230A23, [email protected]) — ancak bir gerçek kullanıcı her zaman tam olarak tek bir id'ye karşılık gelir. İzin verilmez: bir temel id alıp sayısal bir ek yaparak tek bir gerçek kişiden çok sayıda "kullanıcı" üretmek. Tespit ayırıcı-bağımsızdır — arkasından rakamlar gelen sondaki
-, _ veya . karakterini soyar ve kalanı kullanıcının kimliği sayar. Şu çiftlerden herhangi biri reddedilir: 123-1&123-2ABC_1&ABC_2A23-23&A23-24order.1&order.2
ABD01230A23, 1001, [email protected] hepsi geçerlidir). Örüntü tespit edildiğinde API yine de
ok yanıtını verir ama id'ye izin verilmediğini açıklayan bir mesaj döndürür ve hiçbir ödül yansıtılmaz; deneme dolandırıcılık olarak kaydedilir. Bir görev oluşturun (ör. "siteme kaydol"), N tamamlanma için bakiye yükleyin ve her birini imzalı bir sunucudan sunucuya postback ile onaylayın. Kullanıcı, postback'iniz geldiği anda otomatik olarak ödüllendirilir — manuel onay yok, platform bekletmesi yok.
📡 Nasıl çalışır
/create-taskcka_cid ile açar1) Postback URL'si
GET https://fastcoins.click/webhooks/task-postback.php?cka_cid={CLICK_ID}&sign={SIGN}cka_cid— kullanıcı başladığında hedef URL'nize eklediğimiz click id (your-url?cka_cid=…). Değiştirmeden geri gönderin.sign—hash_hmac('sha256', $cka_cid, $task_secret)(küçük harf hex). Göreve özel secret, Create Task → My Tasks bölümünde gösterilir.
2) İmza
// PHP
$sign = hash_hmac('sha256', $cka_cid, $task_secret);
// Node.js
const sign = crypto.createHmac('sha256', taskSecret).update(ckaCid).digest('hex');
# Python
import hmac, hashlib
sign = hmac.new(task_secret.encode(), cka_cid.encode(), hashlib.sha256).hexdigest()403 alır. Bu artı HMAC, tüm doğruluk modelidir — secret'ınızı güvende tutun.3) İsteğe bağlı analitik pikseli
Kendi analitiğiniz için bunu dönüşüm sayfanıza yerleştirin. Asla ödül yansıtmaz — ödülü yansıtan tek şey yukarıdaki postback'tir.
<img src="https://fastcoins.click/task-pixel.php?cid={CLICK_ID}" width="1" height="1" alt="">Güvenilir, güvenli ve yüksek gelirli bir entegrasyon için öneriler.
⚡ Performans
- API yanıtlarını kullanıcı başına en az 60 saniye önbelleğe alın. Her sayfa yüklemesinde API'yi çağırmayın — reklamlar en hızlı birkaç dakikada bir değişir.
- Kullanıcının gerçek IP'sini iletin. Varsayılan olarak
REMOTE_ADDRkullanın — ziyaretçinin taklit edemeyeceği tek değer budur. Yalnızca kendi sunucunuz kontrol ettiğiniz ve güvendiğiniz bir reverse proxy arkasındaysa bunun yerine bir proxy başlığı okuyun (ör.CF-Connecting-IP);X-Forwarded-Forgibi istemci kaynaklı bir başlığa asla güvenmeyin. Yanlış IP'ler reklam hedefleme kalitesini düşürür. - API'miz geçici olarak yavaşsa sayfa yüklemelerinin yavaşlamasını önlemek için cURL çağrılarınızda 10 saniyelik bir timeout ayarlayın.
🔒 Güvenlik
- Secret Key'inizi istemci tarafı kodda veya herkese açık depolarda asla ifşa etmeyin. Yalnızca sunucu tarafında imza doğrulaması için kullanılır.
- Ödül yansıtmadan önce veritabanınızla her zaman
transIdkontrolü yapın — bu, yanlışlıkla tekrar gönderilen postback'lerden kaynaklanan mükerrer ödülleri önler. - Herhangi bir postback'i işlemeden önce kaynak IP'yi doğrulayın. İstekleri yalnızca şunlardan kabul edin:
62.171.140.250veya2a02:c207:2329:8601::1. - Postback endpoint'iniz için HTTPS kullanın. HTTP endpoint'ler engellenebilir.
- Her gerçek kullanıcı için tek bir benzersiz
sub_idgönderin. Bir temel id'ye sayısal ekler yapmayın (123-1/123-2,ABC_1/ABC_2,order.1/order.2) — herhangi bir ayırıcı (-_.) dolandırıcılık olarak tespit edilir ve ödül yansıtılmadan reddedilir. Yukarıdaki kurala bakın.
💰 Gelir
- Güçlendirilmiş reklamlar (
boosted_campaign: true) daha fazla öder — tıklama oranlarını artırmak için arayüzünüzde öne çıkarın. - Uzun reklamlar (60 sn), kısa reklamlardan (2 sn) önemli ölçüde fazla öder. Kullanıcı etkileşimi yüksekken bunlara öncelik verin.
- Kullanıcı payınızı dengeleyin — yüksek ödeme daha fazla aktif kullanıcı çeker; düşük ödeme kendi marjınızı artırır.
- Çekimler her ayın 1'inden 3'üne kadar açıktır — takviminize işaretleyin.
🐛 Hata Ayıklama
- Endpoint'inizin HTTP 200 ile tam olarak
okdöndürdüğünü doğrulamak için Domains sekmesindeki Test Postback düğmesini kullanın. - Her postback denemesinin tam HTTP yanıtları için Postback Logs sekmesine bakın — durum kodlarını ve sunucu yanıtlarını gösterir.
- Başarısız postback'ler Logs sekmesinden tek tek veya toplu olarak yeniden gönderilebilir. Hiçbir veri kalıcı olarak kaybolmaz.
- İmza her seferinde başarısız oluyorsa:
signature_sha256içinsecret_keydeğerinin HMAC anahtarı olarak verildiğini (mesaja eklenmediğini) vesubId + transId + rewarddeğerini ayırıcısız hash'lediğinizi doğrulayın; eskisignatureiçinsubId + transId + reward + secretdeğerlerini ayırıcısız birleştirdiğinizi doğrulayın. Her iki durumda darewarddeğerinin GET parametresindeki metinle tam olarak eşleştiğinden (yuvarlanmamış) emin olun. signature_sha256_precisedoğruluyorsanız: hashreward_preciseüzerinden hesaplanır,rewardüzerinden değil — alanları yanlış imzayla karıştırmak burada en sık yapılan hatadır.
Kazanmaya hazır mısınız?
Yayıncı hesabınızı 2 dakikadan kısa sürede oluşturun, sonra başlamak için alan adınızı doğrulayın.
Publisher Panelini Aç →