Opencart N11 API İşlemleri

Merhabalar, bu yazımda sizlere Opencart ile N11 arasında nasıl entegrasyon yapabileceğinizi kalemim döndüğünce anlatmaya çalışacağım. Aslında “SOAP” işlemlerine aşina iseniz bu işlemlerin pek de zor olmadığını bilirsiniz. Ancak, nedendir bilinmez piyasada bulunan Opencart ile N11 arasında entegrasyon yapan bazı uygulamaların fahiş fiyatlar istediğine şahit oluyorum. Kimisi de işi abartarak yıllık aboneliğe dönmüş durumda.

Eğer eliniz biraz PHP tutuyorsa ve Opencart’ın frameworkü hakkında biraz bilgiye sahipseniz, araştırarak ve kurcalayarak entegrasyonu yapmak işten bile değil, göreceksiniz.

Not: Burada önemli olan SOAP’ı kavramak. Eğer SOAP’ı kavrarsanız bir kaç günlük bir çalışma ile N11 entegrasyonunu tamamlayabilirsiniz.

Opencart’ın MVC yapısı ile çalıştığı malumunuz. Bu sebeple yine aynı şekilde yapıya uygun olarak bizde MVC olarak çalışmaya devam edeceğiz. Ayrıca belirtmek isterim ki anlattığım N11 entegrasyon işlemleri Opencart’ın 2.3.0.2 versiyonu ile birebir uyumlu olup bazı değişiklikler ile beraber Opencart 3 versiyonu ile de çalışabilir. Zaten sizlere bire bir hazır kod sağlamadığımdan kendi versiyonunuza göre şekillendirebilirsiniz.

Başlarken N11 API referans dökümantasyonunu mutlaka okumanızı öneririm. Dökümantasyona buradan erişebilirsiniz.

Öncelikle so.n11.com üzerinden API hesabımızı aktif etmemiz gerekiyor. Bunun için sisteme girdiğinizde “hesabım” bölümünden “API Hesapları” linkine tıklıyoruz. Oradan “Yeni Hesap Oluştur” diyerek API anahtarını ve API şifresini oluşturuyoruz. Oluşturduğunuz anahtarı ve şifreyi şimdilik bir yere not edin.

N11 API Hesabı Oluşturma
N11 API Hesabı Oluşturma
N11 API Hesabı Oluşturma Adım 2
N11 API Hesabı Oluşturma Adım 2

Bu işlemi de tamamladığınızda bulunduğunuz sayfa şu şekilde görünmeli:

N11 API Hesabı Oluşturma Adım 3
N11 API Hesabı Oluşturma Adım 3

Bu işlem bittikten sonra artık Opencart tarafına geçebiliriz. Başlangıçta Admin sayfasını yapacağız. Bu sayfada API ayarlarımızı yapacağımız seçenekler bulunacak. Anahtar, şifre, aktif olup olmadığı ve hangi servisleri kullanacağımız ile ilgili ayarlar.

Ben eklentinin adını N11 olarak koyduğumdan;

  1. /admin/language/tr-tr/extension/module klasörünün içerisine n11.php adlı bir dosya oluşturdum
  2. /admin/controller/extension/module klasörünün içerisine n11.php adlı bir dosya oluşturdum
  3. /admin/view/template/extension/module klasörünün içerisine n11.tpl adlı bir dosya oluşturdum

/admin/language/tr-tr/extension/module /n11.php

<?php
$_['heading_title']	= 'N11 API';

// Text
$_['text_extension']	= 'Eklentiler';
$_['text_success']	= 'Başarılı: N11 Modülü başarılı bir biçimde değiştirildi!';
$_['text_default']	= 'Default';
$_['text_signup']	= ' Api Anahtarı almak için <a href="https://so.n11.com" target="_blank">so.n11.com</a> adresini ziyaret ediniz!';

// Entry
$_['entry_api_key']	= 'N11 API Anahtarı';
$_['entry_api_pass']	= 'N11 API Şifresi';
$_['entry_status']	= 'Durum';

// Error
$_['error_permission']	= 'Uyarı: N11 API modülünü değiştirme izniniz bulunmamaktadır!';
$_['error_api_key']	= 'API anahtarı gerekli!';
$_['error_api_pass']	= 'API şifresi gerekli!';

/admin/controller/extension/module/n11.php

<?php
class ControllerExtensionModuleN11 extends Controller {
	private $error = array();
	public function index() {
		$this->load->language('extension/module/n11');
		$this->document->setTitle($this->language->get('heading_title'));
		$this->load->model('setting/setting');
		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
			$this->model_setting_setting->editSetting('n11', $this->request->post, $this->request->get['store_id']);
			$this->session->data['success'] = $this->language->get('text_success');
			$this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true));
		}
		$data['heading_title'] = $this->language->get('heading_title');
		$data['text_edit'] = $this->language->get('text_edit');
		$data['text_enabled'] = $this->language->get('text_enabled');
		$data['text_disabled'] = $this->language->get('text_disabled');
		$data['entry_api_key'] = $this->language->get('entry_api_key');
		$data['entry_api_pass'] = $this->language->get('entry_api_pass');
		$data['text_signup'] = $this->language->get('text_signup');
		$data['entry_status'] = $this->language->get('entry_status');
		$data['button_save'] = $this->language->get('button_save');
		$data['button_cancel'] = $this->language->get('button_cancel');
		if (isset($this->error['warning'])) {
			$data['error_warning'] = $this->error['warning'];
		} else {
			$data['error_warning'] = '';
		}
		if (isset($this->error['api_key'])) {
			$data['error_api_key'] = $this->error['api_key'];
		} else {
			$data['error_api_key'] = '';
		}
		if (isset($this->error['api_pass'])) {
			$data['error_api_pass'] = $this->error['api_pass'];
		} else {
			$data['error_api_pass'] = '';
		}
		$data['breadcrumbs'] = array();
		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_home'),
			'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], true)
		);
		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_extension'),
			'href' => $this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true)
		);
		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('heading_title'),
			'href' => $this->url->link('extension/module/n11', 'token=' . $this->session->data['token'] . '&store_id=' . $this->request->get['store_id'], true)
		);
		$data['action'] = $this->url->link('extension/module/n11', 'token=' . $this->session->data['token'] . '&store_id=' . $this->request->get['store_id'], true);
		$data['cancel'] = $this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true);
		$data['token'] = $this->session->data['token'];
		if (isset($this->request->post['n11_api_key'])) {
			$data['n11_api_key'] = $this->request->post['n11_api_key'];
		} else {
			$data['n11_api_key'] = $this->model_setting_setting->getSettingValue('n11_api_key', $this->request->get['store_id']);
		}
		if (isset($this->request->post['n11_api_pass'])) {
			$data['n11_api_pass'] = $this->request->post['n11_api_pass'];
		} else {
			$data['n11_api_pass'] = $this->model_setting_setting->getSettingValue('n11_api_pass', $this->request->get['store_id']);
		}
		if (isset($this->request->post['n11_api_status'])) {
			$data['n11_api_status'] = $this->request->post['n11_api_status'];
		} else {
			$data['n11_api_status'] = $this->model_setting_setting->getSettingValue('n11_api_status', $this->request->get['store_id']);
		}
		$data['header'] = $this->load->controller('common/header');
		$data['column_left'] = $this->load->controller('common/column_left');
		$data['footer'] = $this->load->controller('common/footer');
		$this->response->setOutput($this->load->view('extension/module/n11', $data));
	}
	
	protected function validate() {
		if (!$this->user->hasPermission('modify', 'extension/module/n11')) {
			$this->error['warning'] = $this->language->get('error_permission');
		}
		if (!$this->request->post['n11_api_key']) {
			$this->error['api_key'] = $this->language->get('error_api_key');
		}
		if (!$this->request->post['n11_api_pass']) {
			$this->error['api_pass'] = $this->language->get('error_api_pass');
		}
		return !$this->error;
	}
}

/admin/view/template/extension/module/n11.tpl

<?php echo $header; ?><?php echo $column_left; ?>
<div id="content">
  <div class="page-header">
    <div class="container-fluid">
      <div class="pull-right">
        <button type="submit" form="form-n11-api" data-toggle="tooltip" title="<?php echo $button_save; ?>" class="btn btn-primary"><i class="fa fa-save"></i></button>
        <a href="<?php echo $cancel; ?>" data-toggle="tooltip" title="<?php echo $button_cancel; ?>" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
      <h1><?php echo $heading_title; ?></h1>
      <ul class="breadcrumb">
        <?php foreach ($breadcrumbs as $breadcrumb) { ?>
        <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
        <?php } ?>
      </ul>
    </div>
  </div>
  <div class="container-fluid">
    <?php if ($error_warning) { ?>
    <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> <?php echo $error_warning; ?>
      <button type="button" class="close" data-dismiss="alert">×</button>
    </div>
    <?php } ?>
    <div class="panel panel-default">
      <div class="panel-heading">
        <h3 class="panel-title"><i class="fa fa-pencil"></i> <?php echo $text_edit; ?></h3>
      </div>
      <div class="panel-body">
        <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-n11-api" class="form-horizontal">
          <div class="alert alert-info"><i class="fa fa-info-circle"></i><?php echo $text_signup; ?>
            <button type="button" class="close" data-dismiss="alert">×</button>
          </div>
          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-n11_api_key"><?php echo $entry_api_key; ?></label>
            <div class="col-sm-10">
              <input type="text" name="n11_api_key" placeholder="<?php echo $entry_api_key; ?>" id="input-n11_api_key" class="form-control" value="<?php echo $n11_api_key; ?>">
              <?php if ($error_api_key) { ?>
              <div class="text-danger"><?php echo $error_api_key; ?></div>
              <?php } ?>
            </div>
          </div>
		  <div class="form-group">
            <label class="col-sm-2 control-label" for="input-n11_api_pass"><?php echo $entry_api_pass; ?></label>
            <div class="col-sm-10">
              <input type="text" name="n11_api_pass" placeholder="<?php echo $entry_api_pass; ?>" id="input-n11_api_pass" class="form-control" value="<?php echo $n11_api_pass; ?>">
              <?php if ($error_api_pass) { ?>
              <div class="text-danger"><?php echo $error_api_pass; ?></div>
              <?php } ?>
            </div>
          </div>
          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-n11_api_status"><?php echo $entry_status; ?></label>
            <div class="col-sm-10">
              <select name="n11_api_status" id="input-n11_api_status" class="form-control">
                <?php if ($n11_api_status) { ?>
                <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
                <option value="0"><?php echo $text_disabled; ?></option>
                <?php } else { ?>
                <option value="1"><?php echo $text_enabled; ?></option>
                <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
                <?php } ?>
              </select>
            </div>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>
<?php echo $footer; ?> 

Evet, bu günkü yazımda N11 API için admin tarafında ayar sayfamızı yapılandırdık. Tabiki ilerleyen bölümlerde bu sayfaya geri dönerek bazı yeni ayar alanları eklememiz gerekecek. Bunları yazının diğer bölümlerinde tek tek inceleyeceğiz. Bu günlük bu kadar diyerek bu yazı dizisinin ilk bölümünü bitirmiş bulunuyoruz. Makalenin devamı için sitemi ara sıra ziyaret etmeyi ihmal etmeyin.

Sonraki Yazı: Opencart N11 API İşlemleri Bölüm 2: Ürün Servisleri

“Opencart N11 API İşlemleri” üzerine 19 yorum.

      1. Merhabalar. N11 ve Trendyol opencart apisi için fiyat vermeniz mümkün müdür? Open source olarak.

  1. Merhaba yeni olduğum için deneme yapıyorum çok fazla bilgim yok.
    Önce dediğiniz dosyaları admin panelindeki gerekli yerlere açıp,sonra vermil olduğunuz kodları not defterinde gerekli mağaza api bilgilerimizi yazıp kaydet diyerek tukarıdaki dosyalara mı ekliyoruz? bilgilendirir misiniz lütfen,çok teşekkür ederim.

  2. selam

    üstadım vb 6.0 ile bir ticari yazılımım var basit bişi opencart 3xx ile beraber entegre nasıl çalıştırırım ücretli yardımınızı rica ediyorum saygılarımla

  3. Merhaba,
    Opencart harici tek başına çalışan n11’den tek ürün, ürün listesi, sipariş ve müşteri bilgileri çeken php uygulamanız varmı?

    Öğrenme amacıyla sadece listeletebilsem yeter.

  4. merhaba, makalenin devamı gelecek mi? bir de sosyal medya bağlantılarınızı göremedim takip etmek isterim, iyi çalışmalar

Bir cevap yazın

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.