JAR Computers REST API
REST API за достъп до продукти, поръчки, документи и фактури на JAR Computers.
Base URL
HTTPhttp://api.jarcomputers.com/api
Поддържани формати
xmlПо подразбиране
jsonПри Basic auth
csv, php, serializeДопълнителни при Basic auth
При автентификация с токен (JAR-KEY), отговорът е JWT (HS512), валиден 1 час. Може да се вземе с GET secret_key.
Списък с методи
МетодОписание
GET/products_countБрой активни продукти и страници
GET/categoryСписък с активни категории
GET/productsАктивните продукти (100/стр) с пълна информация
GET/products_shortАктивните продукти (1000/стр) само цена и наличност
GET/productПродукт по код
POST/orderСъздаване на поръчка
GET/orderДанни за конкретна поръчка
GET/ordersПоръчки в период
POST/offerСъздаване на оферта
GET/documentsДокументи в период
GET/documentКонкретен документ
GET/invoicesФактури в период
GET/invoiceКонкретна фактура
GET/chargeТекущо задължение на клиента
Автентификация
API-то поддържа два метода за автентификация.
1. Basic Auth (username + password)
Потребителско ime и парола от сайта jarcomputers.com.
curl -u "USERNAME:PASSWORD" \ "http://api.jarcomputers.com/api/products_count?format=json"
import requests r = requests.get( "http://api.jarcomputers.com/api/products_count", auth=("USERNAME", "PASSWORD"), params={"format": "json"} ) data = r.json()
$r = file_get_contents( "http://USERNAME:[email protected]/api/products_count?format=json" ); $data = json_decode($r, true);
2. Token Auth (JAR-KEY header)
Токенът се вижда в профила в сайта. Отговорът е JWT (HS512), валиден 1 час.
curl -H "JAR-KEY: YOUR_TOKEN" \ "http://api.jarcomputers.com/api/products_count"
import requests, jwt r = requests.get( "http://api.jarcomputers.com/api/products_count", headers={"JAR-KEY": "YOUR_TOKEN"} ) # Response is JWT — decode with PyJWT data = jwt.decode(r.text.strip(), options={"verify_signature": False})
$ctx = stream_context_create(['http' => [ 'header' => "JAR-KEY: YOUR_TOKEN\r\n" ]]); $jwt = file_get_contents( "http://api.jarcomputers.com/api/products_count", false, $ctx );
Брой продукти
Връща броя на всички активни продукти и страниците при пагинация.
GET/products_count
Входни параметри
ПараметърТипОписание
category_id optionalintegerФилтриране по категория
edate optionaldateДата на промяна (YYYY-MM-DD)
Отговор
cntintegerБрой активни продукти
pagesintegerБрой страници (по 100/стр)
Примери
curl -u "USER:PASS" \ "http://api.jarcomputers.com/api/products_count?format=json"
import requests r = requests.get( "http://api.jarcomputers.com/api/products_count", auth=("USER", "PASS"), params={"format": "json"} ) data = r.json() print(f"Products: {data['cnt']}, pages: {data['pages']}")
$r = file_get_contents( "http://USER:[email protected]/api/products_count?format=json" ); $d = json_decode($r, true); echo $d['cnt'] . ' products, ' . $d['pages'] . ' pages';
"cnt": 39181, "pages": 392
Категории
Връща всички активни категории.
GET/category
Входни параметри
Без параметри.
Отговор
cntintegerБрой категории
category[].category_idintegerID на категорията
category[].category_namestringНаименование
Примери
curl -u "USER:PASS" \ "http://api.jarcomputers.com/api/category?format=json"
import requests r = requests.get("http://api.jarcomputers.com/api/category", auth=("USER","PASS"), params={"format":"json"}) for cat in r.json()["category"]: print(cat["category_id"], cat["category_name"])
$r = file_get_contents( "http://USER:[email protected]/api/category?format=json" ); $cats = json_decode($r, true)["category"];
"cnt": 5, "category": [ { "category_id": 2, "category_name": "Лаптопи" }, { "category_id": 5, "category_name": "Таблети" }, { "category_id": 8, "category_name": "Видео карти" } ]
Продукти (пълни данни)
Връща активните продукти по страници (100/стр) с пълна информация.
GET/products
Входни параметри
ПараметърТипОписание
page optionalintegerТекуща страница (default: 1)
category_id optionalintegerФилтриране по категория
edate optionaldateПромяна след дата (YYYY-MM-DD)
Отговор
pages.pageintegerТекуща страница
pages.cntintegerОбщ брой страници
products[].codestringУникален продуктов код
products[].pricefloatКрайна цена
products[].old_pricefloatЗадраскана цена (0 ако няма)
products[].dealer_pricefloatДилърска цена
products[].availstringНаличност
products[].warrantyintegerГаранция в месеци
products[].promotionbooleanНа промоция ли е
products[].promotion_starts_attimestampНачало на промоцията
products[].promotion_ends_attimestampКрай на промоцията
products[].main_imagestringURL на основно изображение
products[].more_images[]arrayДопълнителни снимки
products[].props[]arrayХарактеристики
Примери
curl -u "USER:PASS" \ "http://api.jarcomputers.com/api/products?page=1&format=json"
import requests BASE, AUTH = "http://api.jarcomputers.com/api", ("USER", "PASS") def get_all_products(): pages = requests.get(f"{BASE}/products_count", auth=AUTH, params={"format":"json"}).json()["pages"] for page in range(1, pages + 1): r = requests.get(f"{BASE}/products", auth=AUTH, params={"page": page, "format": "json"}) for code, p in r.json().get("products", {}).items(): yield p for p in get_all_products(): print(p["code"], p["price"], p["avail"])
$page = 1; do { $r = file_get_contents("http://USER:[email protected]" . "/api/products?page={$page}&format=json"); $data = json_decode($r, true); foreach ($data['products'] as $code => $p) { echo $p['price'] . ' ' . $p['avail'] . PHP_EOL; } $page++; } while ($page <= $data['pages']['cnt']);
"pages": { "page": 1, "cnt": 392 }, "products": { "MSPADJAR": { "code": "MSPADJAR", "category_path": "Аксесоари > Подложки", "brand_name": "JAR", "product_name": "Подложка за мишка JARComputers", "price": 0.84, "old_price": 0, "dealer_price": 0.71, "avail": "Налично в централен склад", "warranty": 12, "promotion": false, "main_image": "https://p.jarcomputers.com/680x680/MSPADJAR.jpg", "more_images": [], "props": [ { "prop_name": "Материал", "prop_val": "Текстил", "prop_section": "Общи" } ] } }
Продукти (кратък формат)
1000 продукта/страница — само цена и наличност. Идеален за синхронизация.
GET/products_short
Входни параметри
ПараметърТипОписание
page requiredintegerТекуща страница
category_id optionalintegerФилтриране по категория
edate optionaldateПромяна след дата (YYYY-MM-DD)
Примери
curl -u "USER:PASS" \ "http://api.jarcomputers.com/api/products_short?page=1&format=json"
import requests r = requests.get("http://api.jarcomputers.com/api/products_short", auth=("USER","PASS"), params={"page":1,"format":"json"}) for code, p in r.json()["products"].items(): print(code, p["price"], p["avail"])
$r = file_get_contents("http://USER:[email protected]" . "/api/products_short?page=1&format=json"); $products = json_decode($r, true)['products'];
"pages": { "page": 1, "cnt": 40 }, "products": { "MSPADJAR": { "code": "MSPADJAR", "price": 0.84, "dealer_price": 0.71, "avail": "Налично в централен склад" }, "VCRASUSGTX": { "code": "VCRASUSGTX", "price": 737.77, "dealer_price": 736.00, "avail": "Налично във външен склад" } }
Единичен продукт
Връща пълни данни за един продукт по зададен код.
GET/product
Входни параметри
ПараметърТипОписание
code requiredstringУникален продуктов код
Примери
curl -u "USER:PASS" \ "http://api.jarcomputers.com/api/product?code=MSPADJAR&format=json"
import requests r = requests.get("http://api.jarcomputers.com/api/product", auth=("USER","PASS"), params={"code":"MSPADJAR","format":"json"}) p = r.json()["product"] print(p["product_name"], p["price"], p["avail"])
$r = file_get_contents("http://USER:[email protected]" . "/api/product?code=MSPADJAR&format=json"); $p = json_decode($r, true)['product'];
"product": { "code": "MSPADJAR", "product_name": "Подложка за мишка JARComputers", "price": 0.84, "old_price": 0, "dealer_price": 0.71, "avail": "Налично в централен склад", "warranty": 12, "promotion": false, "main_image": "https://p.jarcomputers.com/680x680/MSPADJAR.jpg", "more_images": [], "props": [ { "prop_name": "Материал", "prop_val": "Текстил", "prop_section": "Общи" } ] }
Създаване на поръчка
Създава поръчка. Поддържа дропшипинг чрез параметъра user.
POST/order
Входни параметри
ПараметърТипОписание
products[].code requiredstringПродуктов код
products[].cnt requiredintegerБрой
reference optionalstringВашият референтен номер
user.name optionalstringДропшипинг: получател
user.mail optionalstringДропшипинг: имейл
user.address optionalstringДропшипинг: адрес
user.phone optionalstringДропшипинг: телефон
user.note optionalstringДропшипинг: забележка
documents[].type optionalinteger3=Фактура, 6=Гаранция, 7=Товарителница
documents[].url optionalstringURL към документа
documents[].document_id optionalintegerID на документа
Примери
curl -u "USER:PASS" -X POST \ "http://api.jarcomputers.com/api/order?format=json" \ -d "products[0][code]=MSPADJAR&products[0][cnt]=2&reference=MY-001"
import requests r = requests.post("http://api.jarcomputers.com/api/order", auth=("USER","PASS"), data={"products[0][code]":"MSPADJAR","products[0][cnt]":2,"reference":"MY-001"}, params={"format":"json"}) result = r.json() print(f"Order ID: {result['order_id']}, total: {result['sum']}")
$ctx = stream_context_create(['http' => [ 'method' => 'POST', 'header' => "Content-Type: application/x-www-form-urlencoded\r\n", 'content' => http_build_query([ 'products' => [['code'=>'MSPADJAR','cnt'=>2]], 'reference' => 'MY-001' ]) ]]); $r = file_get_contents( "http://USER:[email protected]/api/order?format=json", false, $ctx ); $result = json_decode($r, true);
"order_id": 535608, "sum": 1.68, "products": { "MSPADJAR": { "id": 2851, "code": "MSPADJAR", "price": 0.84, "dealer_price": 0.71, "avail": "Налично в централен склад", "cnt": 2 } }
Единична поръчка
Издърпване на конкретна поръчка.
GET/order
Входни параметри
ПараметърТипОписание
order_id requiredstring|integerID или референтен номер
Примери
curl -u "USER:PASS" \ "http://api.jarcomputers.com/api/order?order_id=535608&format=json"
import requests r = requests.get("http://api.jarcomputers.com/api/order", auth=("USER","PASS"), params={"order_id":535608,"format":"json"}) o = r.json() print(o["status"], o["total"], o["shipping_name"])
$r = file_get_contents("http://USER:[email protected]" . "/api/order?order_id=535608&format=json"); $order = json_decode($r, true);
"id": 17535608, "reference": "MY-001", "status": "Изпратена", "total": 1.68, "created": "2024-01-15 10:30:00", "last_change": "2024-01-15 14:22:00", "invoice_id": "30199001", "waybill_id": "1233232445", "shipping_name": "Еконт", "shipping_status": "Получена", "address_delivery": "до офис Еконт Младост", "details": [ { "code": "MSPADJAR", "ename": "Подложка за мишка JARComputers", "quantity": 2, "status": "Изпратена", "avail": "Налично в централен склад" } ]
Списък поръчки
Издърпване на поръчки между избрани дати.
GET/orders
Входни параметри
ПараметърТипОписание
from requireddateОт дата (YYYY-MM-DD)
to optionaldateДо дата. Default: днес
Примери
curl -u "USER:PASS" \ "http://api.jarcomputers.com/api/orders?from=2024-01-01&to=2024-01-31&format=json"
import requests r = requests.get("http://api.jarcomputers.com/api/orders", auth=("USER","PASS"), params={"from":"2024-01-01","to":"2024-01-31","format":"json"}) for o in r.json().get("item", []): print(o["id"], o["status"], o["total"])
$r = file_get_contents("http://USER:[email protected]" . "/api/orders?from=2024-01-01&to=2024-01-31&format=json"); $orders = json_decode($r, true)['item'];
"item": [ { "id": 17535608, "reference": "MY-001", "status": "Изпратена", "total": 1.68, "shipping_name": "Еконт" }, { "id": 17535712, "reference": "MY-002", "status": "В обработка", "total": 48.50, "shipping_name": "Speedy" } ]
Създаване на оферта
Създава оферта от активни продукти.
POST/offer
Входни параметри
ПараметърТипОписание
products[].code requiredstringПродуктов код
products[].cnt requiredintegerБрой
reference optionalstringРеферентен номер
Примери
curl -u "USER:PASS" -X POST \ "http://api.jarcomputers.com/api/offer?format=json" \ -d "products[0][code]=MSPADJAR&products[0][cnt]=5"
import requests r = requests.post("http://api.jarcomputers.com/api/offer", auth=("USER","PASS"), data={"products[0][code]":"MSPADJAR","products[0][cnt]":5}, params={"format":"json"}) result = r.json() print(f"Offer ID: {result['offer_id']}, total: {result['sum']}")
$ctx = stream_context_create(['http'=>['method'=>'POST', 'header'=>"Content-Type: application/x-www-form-urlencoded\r\n", 'content'=>'products[0][code]=MSPADJAR&products[0][cnt]=5']]); $r = file_get_contents( "http://USER:[email protected]/api/offer?format=json", false, $ctx );
"offer_id": 535609, "sum": 4.20, "products": { "MSPADJAR": { "id": 2851, "code": "MSPADJAR", "price": 0.84, "dealer_price": 0.71, "avail": "Налично в централен склад", "cnt": 5 } }
Списък документи
Издърпване на документите между избраните дати.
GET/documents
Входни параметри
ПараметърТипОписание
from requireddateОт дата (YYYY-MM-DD)
to requireddateДо дата (YYYY-MM-DD)
Примери
curl -u "USER:PASS" \ "http://api.jarcomputers.com/api/documents?from=2024-01-01&to=2024-01-31&format=json"
import requests r = requests.get("http://api.jarcomputers.com/api/documents", auth=("USER","PASS"), params={"from":"2024-01-01","to":"2024-01-31","format":"json"}) for d in r.json().get("item", []): status = "closed" if d["is_ok"] == 1 else "open" print(d["pid"], d["edate"], d["total"], status)
$r = file_get_contents("http://USER:[email protected]" . "/api/documents?from=2024-01-01&to=2024-01-31&format=json"); $docs = json_decode($r, true)['item'];
"item": [ { "pid": 1789951, "ename": "Пенчо Янков Янев", "edate": "2024-01-15", "status": "Продаден", "total": 39.63, "is_ok": 0 }, { "pid": 1789382, "ename": "Пенчо Янков Янев", "edate": "2024-01-10", "status": "Продаден", "total": 0.00, "is_ok": 1 } ]
Единичен документ
Издърпване на конкретен документ.
GET/document
Входни параметри
ПараметърТипОписание
id requiredintegerНомер на документа
Примери
curl -u "USER:PASS" \ "http://api.jarcomputers.com/api/document?id=1789951&format=json"
import requests r = requests.get("http://api.jarcomputers.com/api/document", auth=("USER","PASS"), params={"id":1789951,"format":"json"}) data = r.json() prods = data["products"]["product"] # API may return object (1 item) or array — normalise: if isinstance(prods, dict): prods = [prods] for p in prods: serials = p.get("serials", {}).get("serial", []) print(p["code"], p["cnt"], serials)
$r = file_get_contents("http://USER:[email protected]" . "/api/document?id=1789951&format=json"); $data = json_decode($r, true);
"is_error": 0, "header": { "pid": 1789951, "ename": "Пенчо Янков Янев", "edate": "2024-01-15", "status": "Продаден", "is_ok": 0, "total": 39.63, "payment_date": "2024-01-30", "invoice_no": "30199001" }, "products": { "product": [ { "code": "MFL32GBMBMP32DCEU", "ename": "32GB microSD + Adapter, Samsung EVO, Class 10", "cnt": 2, "price_no_vat": 16.51, "has_vat": 1, "price": 19.81, "serials": { "serial": ["JAR1050783", "JAR1050784"] } } ]}
Списък фактури
Издърпване на фактурите между избраните дати.
GET/invoices
Входни параметри
ПараметърТипОписание
from requireddateОт дата (YYYY-MM-DD)
to requireddateДо дата (YYYY-MM-DD)
Примери
curl -u "USER:PASS" \ "http://api.jarcomputers.com/api/invoices?from=2024-01-01&to=2024-01-31&format=json"
import requests r = requests.get("http://api.jarcomputers.com/api/invoices", auth=("USER","PASS"), params={"from":"2024-01-01","to":"2024-01-31","format":"json"}) for inv in r.json().get("item", []): print(inv["pid"], inv["document_type"], inv["total"])
$r = file_get_contents("http://USER:[email protected]" . "/api/invoices?from=2024-01-01&to=2024-01-31&format=json"); $invs = json_decode($r, true)['item'];
"item": [ { "pid": 30123155, "edate": "2024-01-15", "document_type": "ФАКТУРА", "ename": "Вега - 21 ООД", "total": 1961.52, "dds": 0.2, "documents": { "document": [1789589, 1789367] } } ]
Единична фактура
Издърпване на конкретна фактура.
GET/invoice
Входни параметри
ПараметърТипОписание
id requiredintegerНомер на фактурата
Примери
curl -u "USER:PASS" \ "http://api.jarcomputers.com/api/invoice?id=30123155&format=json"
import requests r = requests.get("http://api.jarcomputers.com/api/invoice", auth=("USER","PASS"), params={"id":30123155,"format":"json"}) data = r.json() prods = data["products"]["product"] if isinstance(prods, dict): prods = [prods] total = sum(float(p["total"]) for p in prods) print(f"Invoice {data['header']['pid']}: {total:.2f} BGN")
$r = file_get_contents("http://USER:[email protected]" . "/api/invoice?id=30123155&format=json"); $data = json_decode($r, true);
"is_error": 0, "header": { "pid": 30123155, "edate": "2024-01-15", "document_type": "ФАКТУРА", "ename": "Вега - 21 ООД", "total": 1961.52, "dds": 0.2 }, "products": { "product": [ { "ename": "Колонки", "measure": "брой", "cnt": 1, "price": 44.99, "total": 44.99 }, { "ename": "Преносим компютър", "measure": "брой", "cnt": 1, "price": 1475.11, "total": 1475.11 }, { "ename": "Твърд диск", "measure": "брой", "cnt": 1, "price": 114.50, "total": 114.50 } ]}
Текущо задължение
Издърпване на текущото задължение на клиента.
GET/charge
Входни параметри
Без параметри.
Отговор
totalfloatОбща сума на задължението
consignation_totalfloatСума по консигнация
prodajbi_countintegerБрой непогасени продажби
mdatatimestampДата на най-старото задължение
Примери
curl -u "USER:PASS" \ "http://api.jarcomputers.com/api/charge?format=json"
import requests r = requests.get("http://api.jarcomputers.com/api/charge", auth=("USER","PASS"), params={"format":"json"}) b = r.json()["header"] print(f"Outstanding: {b['total']} BGN ({b['prodajbi_count']} sales)")
$r = file_get_contents( "http://USER:[email protected]/api/charge?format=json" ); $b = json_decode($r, true)['header']; echo $b['total'] . ' BGN';
"is_error": 0, "header": { "total": 44.87, "consignation_total": 0, "prodajbi_count": 2, "mdata": "2024-01-01 00:00:00" }