eBay Trading API İle Stok Güncelleme | C#

eBay Trading API ile Stok Güncelleme
C# • eBay API • E-Ticaret Entegrasyonu

Merhaba, eBay’de stok güncellemesi yaparken ilginç bir durumla karşılaştım. eBay’in iki farklı API’si var: modern REST API ve eski SOAP tabanlı Trading API. Ne yazık ki bizim listeleme yöntemimiz yüzünden modern API’yi kullanamadım.

Önemli Not: eBay’de iki farklı listeleme türü mevcut. Eğer “Fixed Price” yerine klasik listeleme kullanıyorsanız, Inventory API yerine Trading API kullanmanız gerekiyor.

Modern Inventory API, yalnızca belirli listeleme formatlarını destekliyor. Bizim kullandığımız klasik listeleme türü için eski Trading API‘yi kullanmak zorunda kaldım. SOAP bazlı bu API biraz daha zahmetli olsa da işimizi görüyor.

Trading API ile hem aktif ürünleri çekip hem de toplu stok güncellemesi yapan bir servis geliştirdim. Önce eBay tarafındaki aktif ürünleri GetAktifEnvanter metodu ile çekiyorum, sonra da bizim sistemdekileri çekip stok adetleri değişenleri bir liste haline getirip StokAdetGuncelle metoduna gönderiyorum.

1. Aktif Ürünleri Çekme

GetMyeBaySelling metodunu kullanarak sayfalama ile tüm aktif ürünleri çekiyoruz. Her sayfada 100 ürün alıyoruz ve süresi dolmuş ürünleri filtreliyoruz:

public async Task<List<Sku>> GetAktifEnvanter()
{
    List<Sku> listings = [];
    int pageNumber = 1;
    using HttpClient client = new();
    int totalPages;
    
    do
    {
        string body = $@"<?xml version=""1.0"" encoding=""utf-8""?>
        <GetMyeBaySellingRequest xmlns=""urn:ebay:apis:eBLBaseComponents"">
          <RequesterCredentials>
            <eBayAuthToken>{_userToken}</eBayAuthToken>
          </RequesterCredentials>
          <ActiveList>
            <Include>true</Include>
            <Pagination>
              <EntriesPerPage>100</EntriesPerPage>
              <PageNumber>{pageNumber}</PageNumber>
            </Pagination>
          </ActiveList>
          <DetailLevel>ReturnAll</DetailLevel>
        </GetMyeBaySellingRequest>";
        
        HttpRequestMessage request = new(HttpMethod.Post, _endpoint);
        request.Headers.Add("X-EBAY-API-CALL-NAME", "GetMyeBaySelling");
        request.Headers.Add("X-EBAY-API-SITEID", "77"); // eBay Almanya
        request.Headers.Add("X-EBAY-API-COMPATIBILITY-LEVEL", "1421");
        request.Content = new StringContent(body, Encoding.UTF8, "text/xml");
        
        HttpResponseMessage response = await client.SendAsync(request);
        string xmlResponse = await response.Content.ReadAsStringAsync();
        
        // XML parsing ve filtreleme...
        pageNumber++;
    } while (pageNumber <= totalPages);
    
    return listings;
}

2. Toplu Stok Güncelleme

ReviseInventoryStatus metodu ile dörtlü gruplar halinde toplu güncelleme yapıyoruz. eBay API’si tek seferde maksimum 4 ürün güncellemesine izin veriyor:

public async Task<string> StokAdetGuncelle(List<Sku> skuList)
{
    using HttpClient client = new();
    int batchSize = 4; // eBay limiti
    
    for (int i = 0; i < skuList.Count; i += batchSize)
    {
        List<Sku> batch = skuList.Skip(i).Take(batchSize).ToList();
        
        string body = $@"<?xml version=""1.0"" encoding=""utf-8""?>
        <ReviseInventoryStatusRequest xmlns=""urn:ebay:apis:eBLBaseComponents"">
          <RequesterCredentials>
            <eBayAuthToken>{_userToken}</eBayAuthToken>
          </RequesterCredentials>
          {string.Join(Environment.NewLine, batch.Select(x => $@"
            <InventoryStatus>
              <ItemID>{x.ItemId}</ItemID>
              <SKU>{x.SkuCode}</SKU>
              <Quantity>{x.Quantity}</Quantity>
            </InventoryStatus>"))}
        </ReviseInventoryStatusRequest>";
        
        HttpRequestMessage request = new(HttpMethod.Post, _endpoint);
        request.Headers.Add("X-EBAY-API-CALL-NAME", "ReviseInventoryStatus");
        request.Headers.Add("X-EBAY-API-SITEID", "77");
        request.Headers.Add("X-EBAY-API-COMPATIBILITY-LEVEL", "1421");
        request.Content = new StringContent(body, Encoding.UTF8, "text/xml");
        
        HttpResponseMessage response = await client.SendAsync(request);
        string xmlResponse = await response.Content.ReadAsStringAsync();
        
        Console.WriteLine(xmlResponse);
    }
    
    return "Toplu stok güncelleme tamamlandı.";
}

Önemli Noktalar

  • API Endpoint: https://api.ebay.com/ws/api.dll
  • Site ID: 77 (eBay Almanya). Diğer ülkeler için farklı ID’ler kullanılır.
  • Batch Limiti: ReviseInventoryStatus tek seferde en fazla 4 ürün güncelleyebilir.
  • Süre Filtresi: EndTime kontrolü ile süresi dolmuş ürünleri atlıyoruz.
  • Sayfalama: Her sayfada 100 ürün alınıyor, toplam sayfa sayısına göre döngü devam ediyor.

Sonuç

Modern API’lerin daha temiz olması güzel olsa da bazen eski teknolojilere dönmek gerekiyor. Trading API biraz zahmetli olsa da işini düzgün yapıyor. Özellikle toplu işlemlerde oldukça kullanışlı.

Eğer siz de eBay entegrasyonu yapıyorsanız ve klasik listeleme kullanıyorsanız, Trading API’yi kullanmanız gerekecek. Umarım bu yazı işinize yarar!

Selamlar!

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top