cli.gs
Sign in

İ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:

  • orderId ve bir reason ile POST https://cli.gs/api/v1/track/reversal gö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_FINAL olur.
  • İ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 REVERSED olur ve yayıncıya bildirilir. Bir durum bildirimi ayarladıysan mağazan conversion.reversed alı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

text
POST https://cli.gs/api/v1/track/reversal
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
AlanZorunluAnlamı
orderIdikisinden biriDönüşümü bildirdiğin sipariş numarası
conversionIdikisinden biriAlternatif olarak, bildirime verdiğimiz yanıttaki conversionId
reasonevetKomisyonun neden geri alındığı (aşağıya bak)
eventTypehayırAynı sipariş numarası birden fazla olay türü için bildirildiyse SALE (varsayılan), LEAD veya SIGNUP
notehayırEn 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

reasonNe zaman kullanılır
RETURNÜrünler iade edildi
CANCELLEDSipariş kargodan önce veya sonra iptal edildi
CHARGEBACKÖdeme geri alındı
DUPLICATESipariş farklı numaralarla iki kez bildirildi
FRAUDSipariş sahteydi
TESTGerçek (test olmayan) bir bildirim aslında yalnızca bir testti
ORDER_UPDATESipariş başka bir siparişle değiştirildi
POLICY_VIOLATIONYayıncı program koşullarını ihlal etti
OTHERYukarı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

bash
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

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

json
{ "ok": true, "conversionId": "cmg3x1q2w0001abcd9876efgh", "status": "REVERSED", "duplicate": false }
HTTPGövdeAnlamı
200ok: true, duplicate: falseŞimdi iptal edildi
200ok: true, duplicate: trueZaten iptal edilmiş veya reddedilmişti. Hiçbir şey değişmedi
400error: "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
404error: "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
409error: "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.