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 optional | integer | Филтриране по категория |
| edate optional | date | Дата на промяна (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 optional | integer | Текуща страница (default: 1) |
| category_id optional | integer | Филтриране по категория |
| edate optional | date | Промяна след дата (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 required | integer | Текуща страница |
| category_id optional | integer | Филтриране по категория |
| edate optional | date | Промяна след дата (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 required | string | Уникален продуктов код |
Примери
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 required | string | Продуктов код |
| products[].cnt required | integer | Брой |
| reference optional | string | Вашият референтен номер |
| user.name optional | string | Дропшипинг: получател |
| user.mail optional | string | Дропшипинг: имейл |
| user.address optional | string | Дропшипинг: адрес |
| user.phone optional | string | Дропшипинг: телефон |
| user.note optional | string | Дропшипинг: забележка |
| documents[].type optional | integer | 3=Фактура, 6=Гаранция, 7=Товарителница |
| documents[].url optional | string | URL към документа |
| documents[].document_id optional | integer | ID на документа |
Примери
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 required | string|integer | ID или референтен номер |
Примери
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 required | date | От дата (YYYY-MM-DD) |
| to optional | date | До дата. 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 required | string | Продуктов код |
| products[].cnt required | integer | Брой |
| reference optional | string | Референтен номер |
Примери
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 required | date | От дата (YYYY-MM-DD) |
| to required | date | До дата (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 required | integer | Номер на документа |
Примери
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 required | date | От дата (YYYY-MM-DD) |
| to required | date | До дата (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 required | integer | Номер на фактурата |
Примери
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"
}
