ismail0234/trendyol-php-api

Webhook'u güncellemeler için de kullanabilmek

Closed this issue · 4 comments

Merhaba, öncelikle paket için teşekkür ederiz. Şu anda demo birkaç kullanımda çok işimizi gördü ve canlı ortamda da kullanmayı düşünüyoruz.

Özellikle Trendyol'da Webhook olmayışına karşı sürekli çalışarak atılan sorgularla eylem tetiklemeye dönük yazdığınız Webhook sınıfı gerçekten doğru bir ihtiyaca işaret ediyor.

Webhook amacıyla yazılan alanda gördüğüm kadarıyla son siparişleri çekip, bizde kayıtlıysa işlemsiz geçip, değilse tanımlanan işleri tetikleyip kendimize kaydediyor. Bir fikir/öneri olarak yazmak istedim; aslında kancalar özellikle sonradan değişen veriler için sıkça kullanılıyor. En basit örneği siparişin durumunun değişmesi mesela.

Tabii bunu yapmak gerektiğinde baştan sona tüm kayıtların düzenli aralıklarla çekip, veri bütünlüğünün karşılaştırılması ile "bunda bir değişiklik var" diye tetikleyebiliriz. Yani "şusu değişti" değil de "ben ilk kaydettiğimde bu json'ın hash değeriyle şimdiki hash değerini karşılaştırdım ve eşleşmiyor" diye tetiklesek, değişiklik olduğunu haber alan yer o id'li siparişe dair güncel veriyi kendisi sorgulayarak da edinebilir gerekirse. Daha derin bir örnekte de kayıtlardaki hangi alanları takip etmek istediğini belirterek başlatılan bir nesnede, siparişin belirtilen o alanlarını da kayıt altına alıp, hash farklı olunca detayını tarayıp, hangi değerin neyken neye döndüğüyle beraber de tetikleyebiliriz.

Bunları doğrudan Trendyol'un vermesi ve bizim yalnızca yakalayacak bir uç yazmamız çok daha doğru olur tabii, bunun için kendilerine de bir e-posta yazacağım. Ama burada da böyle bir çalışma varken çoğu kişinin işine yarayabileceğini düşündüğüm bu fikri yazmak istedim :)

Umarım kodu doğru yorumlamışımdır da zaten olan bir şeyi anlatmıyorumdur şu anda :)

Sonradan gelen ekleme:
Aslında TrendyolAPI tarafındaki listeleme için PackageLastModifiedDate değerini kullanıp, tersten sıralarsak son güncellenenleri alabiliriz. Kendi veritabanınımızda da ilgili paketin kendimizde son güncellenme zamanını tutarsak bunu da bir karşılaştırma parametresi olarak kullanıp baştan sona gitmesine gerek kalmadan son güncellenenlere dair tetikleme yaptırabiliriz.

@ugurarici bir nevi doğru. Fakat kayıt işlemi kütüphane içerisinde bulunan nosql veritabanına kayıt ediliyor. Kütüphanede yazdığım webhook fonksiyonu ilede gelen siparişi kendi kullandığınız sistemdeki veritabanına kayıt etmeniz gerekiyor. Sipariş durumu değişmesi gibi işlemler için bizim tarafımızdan yapılamaz. Bunun sebebi ise 1000 sipariş olan bir firmada her 5 dakikada sorgu atarsak her 5 dakikada 1000 sorgu atacağından çok sıkıntılı olacaktır.

Yanlış hatırlamıyorsam trendyol en fazla 2 hafta geçmişe yönelik siparişleri gösteriyordu. https://github.com/ismail0234/trendyol-php-api/blob/master/IS/PazarYeri/Trendyol/Services/WebhookService.php#L177-L191 Aklımda kalanlarda burada zaten tersten sıralma işlemini yaptığımı hatırlıyorum. Webhook kısmında performans en üst düzeydeydi.

Sanıyorum son 2 hafta değil de, belirtilen başlangıç ve bitiş tarihlerinin aralığının 2 haftayı aşmaması gerekiyor.
Yani başlangıcı bundan 4 hafta öncesine, bitişi de bundan 2 hafta öncesine verebiliyoruz anladığım kadarıyla.

API belgelerinde şöyle bir alan var;

startDate ve endDate parametrelerini eklemeniz halinde verilebilecek maksimum aralık iki hafta olacaktır.
Kaynak

Ben biraz kurcalayıp bakacağım, bir yöntem bulursam deneyeceğim :)

@ugurarici evet son 2haftadan kastım aslında dediğiniz gibiydi 2 tarih arası 2 hafta olacak şekilde. Bizim en verimli yapabileceğimiz şahsen bu kadar olacağını düşünüyorum bundan sonrasında trendyolun destek vermesi gerekir. Ama yıllardır bu şekilde bir şey yapmadıysalar pek yapacaklarını düşünmüyorum. Farklı bir yöntem bulursan dinlemek isterim :)