Интернет-магазин SaaS - API
Материал из wiki.2fox.org
API — набор готовых классов, процедур, функций, структур и констант, предоставляемых приложением или операционной системой для использования во внешних программных продуктах.
Содержание
Запросы к API
Для того чтобы вызвать метод API, Вам необходимо осуществить GET запрос по протоколу HTTP на указанный URL:
http://mysite.com/api.html?action={METHOD_NAME}&api_key={API_KEY}
Методы
Получение списка категорий
Для того чтобы вызвать метод API, Вам необходимо осуществить GET запрос по протоколу HTTP на указанный URL:
http://mysite.com/api.html?action=GetCategories&api_key={API_KEY}
Данный метод вернет json объект. Вся информация о категориях продуктов помещена в переменную content
Получение списка товаров
Работа данного метода похожа на работу модуля товары Для того чтобы вызвать метод API, Вам необходимо осуществить GET запрос по протоколу HTTP на указанный URL:
http://mysite.com/api.html?action=GetProducts&api_key={API_KEY}
Данный метод вернет json объект. Вся информация о категориях продуктов помещена в переменную content
В качестве дополнительных параметров может быть передана переменная args (предварительно кодирована, например в js это делается с помощью encodeURIComponent). Переменная передается по аналогии с модулем
http://mysite.com/api.html?action=GetProducts&api_key={API_KEY}&args=num=15,category=3,category!=5,order=DESC,orderby=id
Простой PHP класс для работы с API
<?php class SimpleData{ const API_KEY = 'ACsmsPZ8mJJ2Gfgdfgdf9JGAPOfqwsH2'; const URL = 'mysite.com'; const CACHE_DIR = './cache'; const CACHE_TIME = 15; public function __construct(){ if(!is_dir(self::CACHE_DIR)) mkdir(self::CACHE_DIR, 0777); } public static function GetProducts($args=''){ $link = 'action=GetProducts&args='.urlencode($args); return self::GetData($link); } public static function GetCategories($args=''){ $link = 'action=GetCategories'; return self::GetData($link); } private static function GetData($link=''){ $cacheFile = self::CACHE_DIR . DIRECTORY_SEPARATOR . md5($link); if (file_exists($cacheFile) && @filemtime($cacheFile) > strtotime('-'.intval(self::CACHE_TIME).' minutes')) { return json_decode(file_get_contents($cacheFile), 1); } $data = self::curl_get_file($link); if(!is_numeric($data) && !empty($data)){ file_put_contents($cacheFile, $data); return json_decode($data, 1); } return array(); } private static function curl_get_file($link) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://'.self::URL.'/api.html?api_key='.self::API_KEY.'&'.$link); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 25); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 25); $otvet = curl_exec($ch); $errno = curl_errno($ch); curl_close($ch); return ($errno == 0 ? $otvet : $errno); } }
Пример использования
include_once 'SimpleData.php'; $data = SimpleData::GetProducts('num=5,category=3,category!=5,order=DESC,orderby=id'); if(isset($data['content']) && is_array($data['content'])){ echo '<ul>'; foreach($data['content'] as $product){ echo '<li> <a href="'.$data['domain'].$product['link'].'">'.$product['title'].'</a> </li>'; } echo '</ul>'; }