Merhaba arkadaşlar, uzun zaman önce yazmayı düşündüğüm bir örnek yazının taslak metni ile şuanda başlamış bulunuyorum. Tek yazıdan ziyade bir kaç yazıda n11 mağazamız için soap api kullanarak her türlü işlemi size anlatmayı hedefliyorum.
Bu yazıda anlatılanları kendi mağazanız için yapabilmek adına basit düzeyde PHP bilgisine sahip olmanız yeterli.
İlerleyen zamanlarda fırsat bulursam otomatik güncelleme yapabileceğiniz basit yazılımları da sizlerle paylaşmayı hedefliyorum.
ÖNCELİKLE bu yazının devamını okumadan önce n11 mağaza paneline giriş yaparak sırasıyla Hesabım -> API Hesapları -> Yeni Hesap Oluştur diyerek API Anahtarı ve API Şifresi almalısınız.
Aynı sayfadan SOAP tabanlı n11 api dökümanına da ulaşabilirsiniz.
DİKKAT! Bu bilgiler oldukça önemli olduğu için tanımadığınız veya güvenmediğiniz kişiler ile paylaşmayın. Aksi taktirde bu bilgiler ile mağazanızdaki tüm ürünlerin silinmesi dahil her türlü işlem yapılabilir.
Entegrasyon için bir sınıfa ihtiyacımız var. Her türlü işlemi bu sınıfa fonksiyon olarak ekleyerek daha derli-toplu bir işlem yapabiliriz.
Ben anlatacağım her örnekten sonra sınıfa ekleme yaparak sınıf dosyasını oluşturacağım. Sizde güncel sınıf dosyasına bu mesajın altındaki kod alanından ulaşabilirsiniz.
Güncelleme: 09.11.2019
–Ürün ekleme fonksiyonu eklendi
–Ürün silme fonksiyonu eklendi
<?phpClass n11 {protected static $_appKey, $_appSecret, $_parameters, $_sclient;public $_debug = false;public function __construct(array $attributes = array()) {self::$_appKey = $attributes[‘appKey’];self::$_appSecret = $attributes[‘appSecret’];self::$_parameters = [‘auth’ => [‘appKey’ => self::$_appKey, ‘appSecret’ => self::$_appSecret]];}public function setUrl($url) {self::$_sclient = new \SoapClient($url);}public function GetTopLevelCategories() {$this->setUrl(‘https://api.n11.com/ws/CategoryService.wsdl’);return self::$_sclient->GetTopLevelCategories(self::$_parameters);}public function GetSubCategories($catID) {$this->setUrl(‘https://api.n11.com/ws/CategoryService.wsdl’);self::$_parameters[‘categoryId’] = $catID;return self::$_sclient->GetSubCategories(self::$_parameters);}public function SaveProduct(array $product = Array()) {$this->setUrl(‘https://api.n11.com/ws/ProductService.wsdl’);self::$_parameters[‘product’] = $product;return self::$_sclient->SaveProduct(self::$_parameters);}public function DeleteProductById($productId) {$this->setUrl(‘https://api.n11.com/ws/ProductService.wsdl’);self::$_parameters[‘productId’] = $productId;return self::$_sclient->DeleteProductById(self::$_parameters);}public function __destruct() {if ($this->_debug) {print_r(self::$_parameters);}}}?>
Sınıfımızı kaydettikten sonra testlerimize başlayabiliriz. Öncelikle ürün eklemeden önce o ürünü belirli bir kategoriye eklememiz gerekli. n11 deki tüm ana kategorileri alttaki kod ile bulabilirsiniz. Dizide gelen kategori idlerini not edin, birazdan ürünümüze ait uygun alt kategorileri de listeleyeceğiz.
1 2 3 4 5 6 7 8 9 10 | <?php include_once(‘n11.class.php’); $appKey = ‘n11 Api Key Kodunuz’; $appPass = ‘n11 Api Key Sifreniz’; $n11Params = [‘appKey’ => $appKey, ‘appSecret’ => $appPass]; $n11 = new n11($n11Params); $categories = $n11->GetTopLevelCategories(); print_r($categories); ?> |
Az önce bulduğumuz ana kategori idsi ile alt kategorileri alttaki kod ile getirebiliriz.
1 2 3 | $n11 = new n11($n11Params); $subCategories = $n11->GetSubCategories(‘1002841’); //Aksesuar & Tuning kategorisinin alt kategorilerine bakalım print_r($subCategories); |
Kategorimizi de bulduğumuza göre artık ürün eklememizi yapabiliriz.
Ürün eklemek için SaveProduct fonksiyonunu kullanacağız. Bu alan çok fazla detay barındırıyor. Alttaki örnekte en yalın hali yer alıyor. Ne bir ürün seçeneği, ne de fiyat kampanyası var.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | $array = array(); $array[‘title’] = ‘urun basligi’; //65 karakter sınırı var $array[‘subtitle’] = ‘ürün alt baslili’; //ücretsiz kargo vs yazılan bölüm $array[‘productSellerCode’] = ‘HL111’; //ürün kodu stoklarınızda geçen bölüm $array[‘description’] = ‘ürün açıklaması’; $array[‘shipmentTemplate’] = ‘kargosablonu’; //Mağaza yönetim -> Teslimat Yönetim sayfasına eklediğiniz adrese ait şablon adı yazılır $array[‘price’] = ’10’; $array[‘currencyType’] = ‘TL’; $array[‘preparingDay’] = 3; //ürün kargoya verilme süresi $array[‘category’][‘id’] = 1002841; //ürün kategori idsi $array[‘images’][‘image’][0] = array(‘url’ => ‘http://blog.betabilisim.net/wp-content/uploads/2017/06/php-620×160.png’, ‘order’ => 1); $array[‘attributes’][‘attribute’] = array(); $array[‘saleStartDate’] = ”; $array[‘saleEndDate’] = ”; $array[‘productionDate’] = ”; $array[‘expirationDate’] = ”; $array[‘productCondition’] = ‘1’; $array[‘domestic’] = ”; $array[‘discount’] = ”; $array[‘groupAttribute’] = ”; $array[‘groupItemCode’] = ”; $array[‘stockItems’][‘stockItem’][‘quantity’] = 10; $array[‘stockItems’][‘stockItem’][‘sellerStockCode’] = ”; $array[‘stockItems’][‘stockItem’][‘attributes’][‘attribute’] = array(); $array[‘stockItems’][‘stockItem’][‘optionPrice’] = ”; $saveProduct = $n11->SaveProduct($array); $n11id =@ $saveProduct->product->id; if(!empty($n11id)) echo ‘urun basariyla eklendi: ‘.$n11id; |
Sonuç;
Bu arada $n11id ile gelen değişkeni mutlaka veritabanın da kayıt altına alın, zira üründeki tüm değişiklikler, güncellemeler o id vasıtasıyla gerçekleşiyor.
Eklediğimiz ürünü silmek için ise DeleteProductById fonksiyonunu kullanabilirsiniz.
1 2 3 | $deleteProduct = $n11->DeleteProductById(‘11111111111’); if($deleteProduct->result->status == ‘success’) echo ‘ürün başarıyla silindi’; |
Eğer ürününüze ait seçenekleri (Beden-Renk-Yaş) de eklemek isterseniz o zaman SaveProduct da kullandığımız dizide attiribute alanını alttaki gibi değiştirebilirsiniz.
N11 de kalıp ürün seçenekleri yer almıyor siz nasıl eklerseniz o şekilde gösteriyor. Esnek bir yapısı var. Her seçime farklı stok, fiyat ekleyebilirsiniz. Mesela M beden Siyah Kot 50 TL iken S beden Siyah Kot 30 TL yapabilirsiniz.
Bunu yapmak için ise üst tarafta yer alan
1 2 3 4 | $array[‘stockItems’][‘stockItem’][‘quantity’] = 10; $array[‘stockItems’][‘stockItem’][‘sellerStockCode’] = ”; $array[‘stockItems’][‘stockItem’][‘attributes’][‘attribute’] = array(); $array[‘stockItems’][‘stockItem’][‘optionPrice’] = ”; |
kodlarını alttaki kod dizisi ile değiştirmek
1 2 3 4 5 6 7 8 9 10 11 12 | $stockItem = array(); $stockItem[0][‘attributes’][‘attribute’][0] = array(‘name’ => ‘Beden’, ‘value’ => ’42’); $stockItem[0][‘attributes’][‘attribute’][1] = array(‘name’ => ‘Renk’, ‘value’ => ‘Siyah’); $stockItem[0][‘quantity’] = 10; $stockItem[0][‘sellerStockCode’] = ”; $stockItem[0][‘optionPrice’] = 10; $stockItem[1][‘attributes’][‘attribute’][0] = array(‘name’ => ‘Beden’, ‘value’ => ’41’); $stockItem[1][‘attributes’][‘attribute’][1] = array(‘name’ => ‘Renk’, ‘value’ => ‘Siyah’); $stockItem[1][‘quantity’] = 101; $stockItem[1][‘sellerStockCode’] = ”; $stockItem[1][‘optionPrice’] = 10; $array[‘stockItems’][‘stockItem’] = $stockItem; |
Bu yapılan işlem ile $stokItem dizimiz artık ürünlere ait seçenekleri tutuyor. Dediğim gibi ürünlerin alt seçeneklerindeki adet, fiyat bilgisini tek tek sisteme işleyebilirsiniz.
Birden fazla seçenek için örnekte olduğu gibi stockItem[0] kısmını çoğaltabilirsiniz. Indis değerini de arttırmayı unutmayın. Bu işlem biraz kafa karıştırıcı oldu en kısa zamanda daha sadece bir şekle çevireceğim 🙂