Merhaba arkadaşlar. 2021 yılını geride bırakmadan bir entegrasyonlar tamamlayalım istedim. Bu entegrasyon konumuzun adı Opencart Dia Entegrasyonu olacak.
Dia hepimizin bildiği gibi, ön muhasebe, stok, e-fatura, crm yönetim programıdır. Dia kullanımı oldukça yaygın ve çoğu orta ölçekli firmalar tarafından kullanılmaktadır.
Kullandığımız açık kaynaklı e-ticaret yazılımlarının çoğu yerel yazılım programlarını desteklemez. Sanal Pos, Muhasebe, Sms gibi temel ticari ihtiyaçları entegre etmek adına yazılım yapmak yada yaptırmak gerekmekte.
Bu sebeple Dia ile kullandığımız açık kaynak kod olan Opencart’ın entegrasyon ilişkisine bir göz atacağız. Bu entegrasyonda öncelikle;
Dia Api key nedir? nasıl alınır,
Dia session_id oturum işlemleri,
Dia servisleri hakkında
Dia Opencart adaptasyonu
Dia örnek verileri aktarma, listeleme, güncelleme
Dia Api Key Nedir? Nasıl Alınır
Dia’ya bağlantı yapabilmemiz için öncelikle hesabımıza ait bir Api Key talebinde bulunmamız gerekiyor. Bu Api Key muhabbeti bu yıl içerisinde güvenlik maksadıyla talep edilen bir durum oldu. Önceden Api key olmadan bağlantı sağlayabilemekteydik.
Api Key talebinde bulunmak için DİA Entegre Çözüm Başvuru Formunu doldurmanız ve Dia’ya göndermeniz gerekmekte. Bu formu buradan indireceğiniz gibi, dia iletişim formu üzerinden yada telefonla iletişime geçerek talep edebilirsiniz.
Api Key’ i aldığımızı sunucu, kullanıcı adı ve şifremizi bildiğimizi varsayarak devam ediyoruz. Dia internet sitesi üzerinde bulunan Dia Web Service Tester aracını indirmenizi tavsiye ederim.
Dia testter aracına kullanıcı bilgilerinizi girerek login işlemi yapabilirsiniz. Bu program üzerinden dia’nın sağladığı servisleri test edebilir, böylece servisler hakkında bilgi edinebilirsiniz.
Dia Session (oturum) Api Key
Şimdi kabaca dia üzerinde login işlemi ve servislere çağrı yapma işlemi nasıl olur ona bakalım.
function dia_login($url, $username, $password){ $data = <<<EOT {"login" : {"username": "$username", "password": "$password", "disconnect_same_user": "True", //Diğer kullanıcılar bağlantıdan düşürülsün mü? "params": {"apikey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"} } } EOT; $curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data)) ); curl_setopt($curl, CURLOPT_URL, $url); $result = curl_exec($curl); curl_close($curl); $json=json_decode($result); print_r($json); }
dia_login('https://sunucunuz.ws.dia.com.tr/api/v3/sis/json', 'kullanici_yaz', 'sifre_yaz')
Yukarıda gördüğünüz gibi dia testter aracının verdiği örnek kolar üzerinden bir function oluşturarak bilgilerimizle login servisi için çağrıda bulunduk. Bu işlemin sonucunda session_id almamız gerekmekte.
{'code': '200', 'msg': 'b2d4820cc43f4d98a8c6698686b6d386'}
Bilgilerimiz doğru ise işlem bize 1 saat geçerli olmak üzere session_id üretecektir. Unutmayalım tüm servislerin ilk parametresi session_id olacaktır.
Dia Servisleri Hakkında
Dia üzerinde ortalama 695 adet kullanabileceğiniz servis bulunmakta. Bu servisleri dia tester aracından da görebiliyor ve test edebiliyorduk. Biz dia’nın opencart ile adaptasyonunu sağladıktan sonra “scf_stokkart_kullanacagimizservis”, servislerinden yararlanacağız. Sizin tercihleriniz farklı olabilir.
Servis kullanımlarında testter aracında da dikkat ettiyseniz bizlerden session_id, firma_kodu, donem_kodu gibi bilgiler istemekte. Bu bilgiler bizim firmamızın ve bulunduğumuz cari dönemin bilgilerinden ibarettir. Servis çağırırken bu bilgileri girmemizi bizden ister. Aksi halde hata almanız olasıdır.
Dia Opencart Adaptasyonu
Yukarıda dia ile nasıl session_id alacağımızı anlamış olduk ve dia’nın bize verdiği bağlantı kodlarını kullandık. Şimdi dia kütüphanesi kullanalım ve işleri biraz daha kolaylayalım. Bu kütüphane dia için hazırlanmış olup, Cari, Stok ve Hizmet Kartları ile Sipariş Fişlerini dia sunucusu üzerinde gerçekleştirmemizi sağlayacaktır.
Öncekile Opencart için düzenlediğimiz dia kütüphanesini indirelim. Dosyamızı indirdikten sonra açalım ve bizden istenen account(Sunucu Adı), username, password, api key gibi alanları dolduralım. Daha sonra sınıfları nasıl konfigüre edebiliriz ona bakalım. DiaWebService İndir
Şimdi dia kütüphanemizi opencart ile kullanabilmek için Opencart/system/library altına DiaWebService.php dosyamızı atalım. Ardından Opencart/system/freamwork.php dosyasını açalım ve aşağıda ki kodu;
// DiaWebService $registry->set('DiaWebService', new DiaWebService($registry));
Cache kodun hemen üstüne yada altına bir yerek ekleyelim.
// Cache $registry->set('cache', new Cache($config->get('cache_engine'), $config->get('cache_expire')));
Burada ki tanımlama işlemlerini de yaptıktan sonra artık dia’yı Opencart üzerinde kullanabiliriz demektir. Artık oturum açmak için sadece kısa bir parametre kullanacağız oda;
$this->DiaWebService->login();
Dia Üzerinden Ürünleri Opencart’a Aktaralım
Opencart ile adaptasyonumuzu sağladığımıza göre, servisi kullanmak istediğimiz her hangi bir sayfa içerisinde sınıfları kullanmaya başlayabiliriz. Şimdi bir örnek yapalım ve dia üzerinde ki ürünlerimizi Opencart’a aktaralım.
Çok uzun süreceğinden modüler bir yapıda çalışmayacağım. Mantığını kavradıktan sonra sizlerin MVC tarafını yapabileceğini düşünüyorum.
Dia sunucusuna bağlanıp verileri listelemek için fetch() metodunu kullanıyoruz. Burada göndereceğimiz iki argüman bulunmakta. 1. Servis Adı, 2. Array dizisi yani servis içeriği. Örnekle daha iyi anlaşılacak.
$this->DiaWebService->login(); $datas = [ 'filters' => [ [ 'field' => 'durum', 'operator' => '=', 'value' => 'A', ] ], 'limit' =>0, 'ofset' =>0 ]; $stock = $this->DiaWebService->fetch('stock', $datas);
Yukarıda da anlaşılacağı gibi DiaWebServise fetch() ile iki argüman tanımladık. Birisi stock olan ürünler servisi, diğeri ise array ile filters ettiğimiz bilgiler. Dönen işlem sonucunu ise şu şekilde kontrol edebiliriz;
// Sonuç başarılı ise ekrana bastırılır if($send['success']) { var_dump($send['result']); } // Hata sonucu bastırılır else { echo $send['message']; }
Yukarıda ki gibi servisten dönen istekleride işleyebiliriz. Kısa bir örnek yapmam gerekirse;
if($stock['success']) { foreach($stock['result'] as $result){ $this->db->query("INSERT INTO " . DB_PREFIX . "products SET price = '".$result['satis_fiyati']."', quantity = '".$result['fiili_stok']."' "); } }
Bu şekilde dia üzerinde bulunan ürünleri fiyat ve stok cinsinden çekmiş olduk ve INSERT ile opencart veritabanımıza yazdırmış olduk. Mantık olarak dia’ya bağlanmayı ve dia üzerinde bulunan servislere nasıl çağrı yapacağımızı öğrenmiş olduk. Burada bulunan github hesabı üzerinde DiaWebServis içeriği daha detaylı olarak anlatılmakta.
Örneklerden yola çıkarak Opencart’a adaptasyonunu sağladığımız Web Servisi rahatlıkla kullanabileceğinizi ve kendi modül yapınızı ortaya çıkaracağınızı düşünüyorum. Bu yazmızda opencart dia entegrasyonu‘nu anlatmaya çalıştım. Dilerim faydalı olmuştur.
7