Php ile N11 Api Entegrasyonu – Kategori İşlemleri

Merhaba;

Bu yazımızda N11 Api üzerinden kategori işlemlerini inceleyeceğiz. N11 üzerinde birçok kategori mevcut kategoriler ana ve alt kategoriler olarak ayrılmaktalar. Ayrıca kategoriler birden çok alt kategori barındırmaktalar. Ürün ekleme işlemlerinde ürüne eklemek istediğiniz kategori en alt kategori olmak zorundadır. Bazı kategoriler zorunlu özellikler (attribute) barındırmaktadır.

İlk olarak yapmamız gereken ana kategorilere ulaşmak olacaktır sonra ana kategorinin içerisindeki alt kategorilere ulaşabiliriz.

GetTopLevelCategories ile Ana Kategorileri Listeleme

<?php
Class n11 {
    protected static $_appKey, $_appSecret, $_parameters, $_sclient;
    public $_debug = false;
    
    public function __construct(array $attributes = array()) {
        self::$_appKey = "ApiKey"; // N11 ApiKey
        self::$_appSecret = "AppSecret"; // N11 AppSecret
        self::$_parameters = ['auth' => ['appKey' => self::$_appKey, 'appSecret' => self::$_appSecret]];
    }
    //Her seferinde Soap Bağlantısı için tekrarlanan kod yazmamak adına bağlantımızı ayrı bir private fonskiyonda tutalım
    private function setUrl($url) {
        self::$_sclient = new \SoapClient($url);
    }
     public function GetTopLevelCategories()
     {
        $this->setUrl('https://api.n11.com/ws/CategoryService.wsdl');
        $data = self::$_sclient->GetTopLevelCategories(self::$_parameters);
        $data = json_decode(json_encode($data));
        if($data['result']['status'] != "success")
            die("Bir hata oluştu");
        
        foreach ($data['categoryList']['category'] as $key => $value) 
        {
           $set = array(
            "type" => "n11",
            "category_id" => $value['id'],
            "category_name" => $value['name'],
            "top_category_id" => 0,
           );
           // Bu kısımda veritabanınıza ana kategorileri kaydedebilirsiniz
        }
    }
}

Ana kategorileri GetTopLevelCategories fonksiyonu ile veritabanımızı kaydediyoruz. Ben ana kategorileri veritabanıma kaydedip daha sonra veritabanından bu kayıtları alıp farklı bir fonksiyonda alt kategorileri buluyorum. Dilerseniz veritabanınıza kaydetme işleminden sonra alt kategorilerde getirebilirsiniz.

GetSubCategories ile Alt Kategorilerin Listelenmesi

<?php 
//Yukarıda çekmiş olduğumuz ana kategorilerin her birinin id bilgisini fonskiyonumuza gönderelim.
public function GetSubCategories($categoryid)
    {
        $this->setUrl('https://api.n11.com/ws/CategoryService.wsdl');
        self::$_parameters['categoryId'] = $categoryid;
        $subcategori = self::$_sclient->GetSubCategories(self::$_parameters);
        $subcategori = json_decode(json_encode($subcategori));
        if($subcategori['result']['status'] != "success" || !$subcategori['result']['status'])
              return false;
         
        $list = $subcategori['category']['subCategoryList']['subCategory'];
        foreach ( $list as $key => $value)
        {
            $set[$key] = array(
                "type" => "n11",
                "category_id" => $value['id'],
                "category_name" => $value['name'],
                "top_category_id" => $categoryid,
           ); 
           // Bu kısımda ana kategoriye ait alt kategorileri bulmuş olduk 
        }
        return $set;
    }
?>

Asıl mesele şudur ki her alt kategorinin de kendi içerisinde alt kategorileri bulunmaktadır.

Örneğin Elektronik -> Bilgisayar -> Modem & Ağ -> Ağ Ürünleri -> Anten şeklindedir. Bu yüzden her alt kategori listelendiğinde bir while döngüsü ile en alt kategoriye ulaşana kadar döngüyü devam ettirebilirsiniz.

Teşekkürler.