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 2 yorum.

Bir cevap yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.