İçeriğe geç

PHP ile N11 Soap Api Kullanımı

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

<?php
Class 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.

n11 soap api kat

Az önce bulduğumuz ana kategori idsi ile alt kategorileri alttaki kod ile getirebiliriz.

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.

Sonuç;

n11 ss

n11 ss

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.

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

kodlarını alttaki kod dizisi ile değiştirmek

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 🙂

Bir cevap yazın