İadeler ve iptaller
Bir sipariş iade edildiğinde komisyonu geri al.
Bir müşteri siparişi iade ettiğinde, iptal ettiğinde veya ödeme geri alındığında (chargeback) bunun için komisyon ödenmemeli. Bu sayfada mağazanın bunu bir iptalle nasıl bildireceğini öğrenirsin: sipariş başına tek istek, ve kaydedilen para geldiği yere geri döner.
Kısaca:
orderIdve birreasonilePOST https://cli.gs/api/v1/track/reversalgönder.- İptal, komisyonun tamamını geri alır ve komisyonu ile ağ ücretini bakiyene iade eder.
- Komisyon bir ödeme için kilitlenene kadar çalışır. Ondan sonra yanıt
409 CONVERSION_FINALolur. - İptaller güvenle tekrarlanabilir ve dönüşüm bildirimleri gibi imzalanır.
Bir iptal ne yapar
- Komisyon kaydedilmişse, o anda beklemede veya kullanılabilir olsun, yayıncının bakiyesinden düşülür. Komisyon ve ağ ücreti bakiyene iade edilir.
- Dönüşüm hiç kaydedilmemişse, örneğin hâlâ incelemede bekletiliyorsa, yalnızca durumu değişir.
- Dönüşümün durumu
REVERSEDolur ve yayıncıya bildirilir. Bir durum bildirimi ayarladıysan mağazanconversion.reversedalır.
İptal ne kadar süreyle mümkün
Dönüşüm hâlâ beklemede, onaylanmış, olgunlaşmış veya incelemeyi bekliyor olduğu sürece iptal mümkündür. Komisyonu bir yayıncı ödemesi için kilitlendiğinde kesinleşir. İstek bu durumda 409 CONVERSION_FINAL ile reddedilir.
Bu yüzden iadeleri hemen bildir. İade sürenizi kapsayan bir bekleme süresi belirle: bkz. Koşullar ve komisyon kuralları. Bekleme süresi, onay ile ödeme arasındaki bekleme zamanıdır.
İstek
POST https://cli.gs/api/v1/track/reversal
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json| Alan | Zorunlu | Anlamı |
|---|---|---|
orderId | ikisinden biri | Dönüşümü bildirdiğin sipariş numarası |
conversionId | ikisinden biri | Alternatif olarak, bildirime verdiğimiz yanıttaki conversionId |
reason | evet | Komisyonun neden geri alındığı (aşağıya bak) |
eventType | hayır | Aynı sipariş numarası birden fazla olay türü için bildirildiyse SALE (varsayılan), LEAD veya SIGNUP |
note | hayır | En fazla 2.000 karakterlik serbest metin, Dönüşümler altında dönüşümle birlikte gösterilir |
orderId veya conversionId alanlarından birini gönder. İptaller tam olarak dönüşüm bildirimleri gibi imzalanır: bkz. İmzalı istekler.
Nedenler
reason | Ne zaman kullanılır |
|---|---|
RETURN | Ürünler iade edildi |
CANCELLED | Sipariş kargodan önce veya sonra iptal edildi |
CHARGEBACK | Ödeme geri alındı |
DUPLICATE | Sipariş farklı numaralarla iki kez bildirildi |
FRAUD | Sipariş sahteydi |
TEST | Gerçek (test olmayan) bir bildirim aslında yalnızca bir testti |
ORDER_UPDATE | Sipariş başka bir siparişle değiştirildi |
POLICY_VIOLATION | Yayıncı program koşullarını ihlal etti |
OTHER | Yukarıdakilerin hiçbiri; note içinde açıkla |
Bir iptal her zaman komisyonun tamamını geri alır. Kısmi iadeler desteklenmez. Siparişin bir kısmı geri gelirse, dönüşümün tamamını iptal edip etmeyeceğine kendi koşullarına göre karar ver.
Örnekler
cURL
curl -X POST https://cli.gs/api/v1/track/reversal \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "orderId": "100234", "reason": "RETURN", "note": "Returned on 12 October" }'Node.js
// Call this from your refund or cancellation handler.
async function reportReversal(orderId, reason, note) {
const res = await fetch("https://cli.gs/api/v1/track/reversal", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.CLIGS_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ orderId: String(orderId), reason, note }),
signal: AbortSignal.timeout(5000),
});
const data = await res.json().catch(() => ({}));
if (res.ok) return data; // { ok: true, conversionId, status, duplicate }
if (res.status === 404) return null; // no conversion for this order: nothing to reverse
if (res.status === 409) {
console.warn("Commission already final", data.conversionId);
return null;
}
if (res.status >= 500 || res.status === 429) throw new Error("retry later");
throw new Error(`cli.gs refused the reversal: ${res.status} ${data.error}`);
}
// await reportReversal("100234", "RETURN", "Returned on 12 October");WooCommerce'de woocommerce_order_status_refunded ve woocommerce_order_status_cancelled kancaları bu çağrı için uygun yerlerdir. _cligs_ref taşıyan siparişler için çağır.
Yanıtlar
{ "ok": true, "conversionId": "cmg3x1q2w0001abcd9876efgh", "status": "REVERSED", "duplicate": false }| HTTP | Gövde | Anlamı |
|---|---|---|
| 200 | ok: true, duplicate: false | Şimdi iptal edildi |
| 200 | ok: true, duplicate: true | Zaten iptal edilmiş veya reddedilmişti. Hiçbir şey değişmedi |
| 400 | error: "invalid payload" veya "orderId or conversionId is required" | İsteği düzelt, ör. bilinmeyen bir reason |
| 401 | ör. "invalid api key" | Anahtarı ve imzayı kontrol et |
| 404 | error: "CONVERSION_UNKNOWN" | Bu programda bu sipariş numarasına sahip dönüşüm yok. Satış çoğu zaman bir yayıncı bağlantısından gelmemiştir, bu normaldir |
| 409 | error: "CONVERSION_FINAL" | Komisyon bir ödeme için kilitlenmiş ve kesin. Daha sonra hiçbir düzeltme yapılmaz |
Dönüşüm bildirimleri gibi iptaller de güvenle tekrarlanabilir. Test dönüşümleri iptal edilemez; zaten hiç para hareketi yaratmamışlardır.
Sonraki adımlar
Bazı mağaza sayfaları sunucunu çağıramıyorsa, yedek olarak takip pikselini oku.