Php ile N11 Api Entegrasyonu – Sipariş Listeleme

Merhaba;

N11 api entegrasyonu ile Sipariş Listeleme (OrderList) metodu ile siparişlerimizi listeyelim. N11 api üzerinde sipariş listeme için gerekli alanları birlikte kontrol edelim .

Sipariş listeme için kullanmamız gereken 2 adet metod var. Bunlardan biri ilk olarak gelen siparişleri listelediğimiz OrderList metodu. Bu metod bizlere siparişin kısa özet bilgileri vermektedir. Metod sonucunda siparişin id alanı , oluşturulma tarihi ve sipariş numarası gibi alanlar verilmektedir. Bunlardan önemli olan ve kullanacağımız id numarasıdır. İlk olarak yeni siparişler nasıl listeleniyor inceleyelim.

<?php Class n11 {
    protected static $_appKey, $_appSecret, $_parameters, $_sclient;
    public function __construct(array $attributes = array()) {
        self::$_appKey = "N11 APİ KEYİNİZ";
        self::$_appSecret = "N11 APİ SECRET ALANINIZ";
        self::$_parameters = ['auth' => ['appKey' => self::$_appKey, 'appSecret' => self::$_appSecret]];
    }
    // Soap Bağlantısı
    public function setUrl($url) {
        self::$_sclient = new \SoapClient($url);
    }
    private function json_return( $array = array() )
    {
	return json_decode( json_encode( $array ) , true );
    }
    public function GetOrder()
    {
        $set  = array( 
                "productId"=>'',
                "status"=>'New', 
                "buyerName"=> '',
                "orderNumber"=> '',
                "productSellerCode" =>'',
                "recipient"=> '',
                "period"=> array(
                  "startDate"=> '',
                  "endDate"=> ''     
                ),
                "sortForUpdateDate" => '',             
        );
        
        $this->setUrl('https://api.n11.com/ws/OrderService.wsdl');
        self::$_parameters['searchData'] = $set;
        $order = self::$_sclient->OrderList(self::$_parameters);
        $order = $this->json_return($order);
        print_r($order);
        die();
    }
}

Yapmış olduğumuz işlemde $set dizisi içerisindeki alanlardan yeni siparişleri getirmek için sadece status değerini NEW olarak göndermemiz yeterli olmaktadır. OrderList metodumuz içerisinde oluşturduğumuz set değerimizi self::$_sclient->OrderList(self::$_parameters); ile N11 api de bulunan OrderList metoduna gönderdik. Daha sonrasında json_return fonksiyonu yardımı ile gelen objeyi array olarak değiştirdik. Siz objeler ile çalışabilirsiniz fakat array bana herzaman daha kolay ve anlaşılır geliyor. Object to Array işlemimizden sonra yazdırdığımız $order değeri aşağıda paylaşıyorum.

Array
(
    [result] => Array
        (
            [status] => success
        )

    [pagingData] => Array
        (
            [currentPage] => 0
            [pageSize] => 100
            [totalCount] => 2
            [pageCount] => 1
        )

    [orderList] => Array
        (
            [order] => Array
                (
                    [0] => Array
                        (
                            [id] => 258073141
                            [createDate] => 27/10/2020 19:26
                            [paymentType] => 1
                            [orderNumber] => 209819875842
                            [status] => 2
                            [citizenshipId] => 35929419114
                        )

                    [1] => Array
                        (
                            [id] => 258078545
                            [createDate] => 27/10/2020 20:34
                            [paymentType] => 1
                            [orderNumber] => 208866758745
                            [status] => 2
                            [citizenshipId] => 
                        )

                )

        )

)

Dönen değeri incelediğimizde bizlere result içerisindeki alan isteğimizin olumlu sonuçlanıp sonuçlanmadığını gösteren status değeri success olarak gözükmektedir. orderlist içerisinde order alanlarında ise gelen siparişlerimizin listesi bulunmaktadır. İd , oluşturulma tarihi,ödeme durumu , sipariş numarası vs. Bundan sonraki işlemimiz artık gelen siparişlerin detaylarına ulaşmak, sipariş kalemlerini,fatura tutarımızı bulmaktır. Fakat dikkat etmeniz gereken bir noktayı burada belirtmek isterim. Gördüğümüz üzere order içerisinde iki adet siparişimiz mevcut bunların key değerleri 0 ve 1. Eğer tek bir siparişimiz olsaydı busefer key değerimiz order olacaktı.

Sipariş Detayı Listeleme (OrderDetail)

Gelen id numarasına göre istek yapacağız. Foreach döngüsü veya nasıl isterseniz işleme alabilirsiniz. Gelen id değerlerini aşağıda paylaştığım fonksiyona gönderirseniz o siparişe ait detaylara ulaşabilirsiniz.

public function OrderDetail($id)
{ 
   $this->setUrl('https://api.n11.com/ws/OrderService.wsdl');
   self::$_parameters['orderRequest']['id'] = $id;
   $orderDetail = self::$_sclient->OrderDetail(self::$_parameters);
   $orderDetail = $this->json_return($orderDetail);
   print_r($orderDetail);
   die();
}

Böylece sipariş detayınada ulaşmış bulunmaktayız. Örnek sipariş detayını aşağıda paylaşıyorum.

Array
(
    [result] => Array
        (
            [status] => success
        )

    [orderDetail] => Array
        (
            [id] => 258073167
            [orderNumber] => 209819873371
            [buyer] => Array
                (
                    [id] => 5972081
                    [fullName] => A Firması
                    [taxId] => 99999999999
                    [taxOffice] => KOCAELİ
                    [email] => info@huseyinbedir.com.tr
                    [tcId] => 9999999999
                )

            [citizenshipId] => 
            [invoiceType] => 2
            [itemList] => Array
                (
                    [item] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 111111111
                                    [productId] => 1111111
                                    [deliveryFeeType] => 5
                                    [productSellerCode] => RM-165
                                    [status] => 2
                                    [approvedDate] => 
                                    [dueAmount] => 110.81
                                    [installmentChargeWithVAT] => 0
                                    [price] => 112.58
                                    [totalMallDiscountPrice] => 1.77
                                    [quantity] => 1
                                    [sellerCouponDiscount] => 0
                                    [sellerStockCode] => RM-165
                                    [version] => 16995
                                    [attributes] => Array
                                        (
                                        )

                                    [sellerDiscount] => 0
                                    [mallDiscount] => 0
                                    [commission] => 7.88
                                    [sellerInvoiceAmount] => 112.58
                                    [productName] => Rampage Gaming Curved Oyuncu Monitörü
                                    [shipmentInfo] => Array
                                        (
                                            [shipmentCompany] => Array
                                                (
                                                    [id] => 345
                                                    [name] => Aras
                                                    [shortName] => ARAS
                                                )

                                            [shipmentCode] => 111111111
                                            [shipmentMethod] => 1
                                            [campaignNumberStatus] => 2
                                        )

                                    [shippingDate] => 
                                    [customTextOptionValues] => Array
                                        (
                                        )

                                )                                   
                        )

                )

            [serviceItemList] => Array
                (
                )

            [status] => 2
            [paymentType] => 1
            [billingTemplate] => Array
                (
                    [originalPrice] => 
                    [totalSellerDiscount] => 0
                    [totalServiceItemOriginalPrice] => 0
                    [installmentChargeWithVat] => 0
                    [sellerInvoiceAmount] => 
                    [totalMallDiscountPrice] => 
                    [dueAmount] => 
                )

            [shippingAddress] => Array
                (
                    [address] => mahallesi ... sokak 
                    [fullName] => Hüseyin Bedir
                    [city] => Kocaeli
                    [district] => Gebze
                    [neighborhood] => ... mahallesi. 
                    [postalCode] => 41400
                    [gsm] => 05555555555
                    [tcId] => 99999999999
                    [taxId] => 9999999999
                    [taxHouse] => KOCAELİ
                )

            [billingAddress] => Array
                (
                    [address] => mahallesi ... sokak 
                    [fullName] => Hüseyin Bedir
                    [city] => Kocaeli
                    [district] => Gebze
                    [neighborhood] => ... mahallesi. 
                    [postalCode] => 41400
                    [gsm] => 05555555555
                    [tcId] => 99999999999
                    [taxId] => 9999999999
                    [taxHouse] => KOCAELİ
                )

            [createDate] => 27/10/2020 19:26
        )

)

Teşekkürler iyi çalışmalar.