EasyWebshop API
Aplikační programové rozhraní (API) propojuje Váš internetový obchod s externími platformami, jako jsou poskytovatelé plateb, doručovací služby a kancelářské aplikace. Vynaložili jsme značné úsilí, aby bylo API snadno použitelné i pro osoby bez hlubokých technických znalostí. To v některých případech umožní našim uživatelům propojit svůj internetový obchod samostatně, aniž by se museli spoléhat na drahého vývojáře.
Díky kompatibilitě s obecnými postupy a průmyslovými standardy lze propojení s naším API vytvořit rychle a případně s pomocí kódu generovaného umělou inteligencí. Pokud si přejete vytvořit propojení sami, pečlivě si přečtěte tuto stránku.
Přehled funkcí
- Propojení s poskytovateli platebních služeb
- Propojení s doručovacími službami
- Propojení s POS softwarem, lokálním i cloudovým
- Import produktů od dodavatelů nebo velkoobchodníků
- Export produktů na srovnávací portály
- Propojení s fakturačním softwarem
- Propojení se CRM softwarem
- Propojení se softwarem pro řízení logistiky
- Aktualizace skladových zásob (inventáře) v reálném čase
- Schvalování nebo zamítání zákazníků na základě určitých kritérií
- Export objednávek v reálném čase pro dropshipping
- Export zákazníků pro newsletterové aplikace
- Export dat pro reporty a analýzy
- Vytváření propojení, která instalují HTML/JavaScript/CSS widgety jedním kliknutím
- Vytváření vlastních reportů pro skladové zásoby, objednávky, zákazníky a prodeje
API, API Push a Propojení
API | API Push | Připojení |
---|---|---|
Pro import a export kategorií, produktů, objednávek a zákazníků. | Pro synchronizaci skladových zásob nebo schvalování zákazníků v reálném čase. | Pro propojení s poskytovateli plateb, doručovacími službami, srovnávacími portály, prodejními místy (POS), fakturačními aplikacemi a instalaci widgetů. |
Autentizace pomocí Bearer tokenu. | Zadejte Push URL v modulu API. | Autentizace pomocí Bearer tokenu (propojení) a instalace propojení (uživatel). |
Přizpůsobeno pro jednoho uživatele. | Přizpůsobeno pro jednoho uživatele. | Může být instalováno všemi uživateli. |
API
Aktivujte EasyWebshop API v Nastavení > Moduly > Easywebshop API pomocí aktivačního kódu MODA.
Pokud se EasyWebshop API nezobrazuje v menu, přejděte do Nastavení > Další možnosti > Úroveň uživatelské zkušenosti a změňte úroveň uživatelské zkušenosti na Expert.
API aktivujte pouze v případě, že jej budete používat. Z bezpečnostních důvodů API deaktivujte, pokud jej nepoužíváte.
- Koncový bod APIKopírovat
- https://easywebshop.com/apiVždy používejte verzi https! Autentizace přes nezabezpečené http může vést k úniku Vašeho API tokenu.
Nezahrnujte subdoménu www. - ?format=xml
- Změňte výstupní formát z JSON na XML.
- ?pretty=1
- Formátovaný výstup pro lepší čitelnost pro člověka. V automatizovaných systémech toto odstraňte pro úsporu šířky pásma.
Při použití více parametrů je oddělte znakem & (ampersand). Například: ?format=xml&pretty=1.
V příkazovém řádku escapujte ampersandy takto: ?format=xml\&pretty=1.
Naše API používejte opatrně a dotazujte se nebo aktualizujte pouze to, co potřebujete. Nepoužívejte polling, pokud lze místo něj použít funkci API Push. Limity jsou zavedeny, aby se zabránilo plýtvání serverovými prostředky.
Autentizace
Klikněte na tlačítko Přidat pro vytvoření API tokenu a vyberte požadovaná oprávnění pro tento token.
Pro zvýšení bezpečnosti vyberte pouze nezbytně nutná oprávnění. Oprávnění, která nejsou potřeba, odeberte.
Po uložení si zkopírujte Váš API token pro použití ve Vaší aplikaci nebo pro zaslání vývojáři. Toto můžete udělat pouze jednou: pokud svůj API token ztratíte, budete jej muset odstranit a vytvořit nový.
Se svým API tokenem zacházejte opatrně.
Neposílejte svůj API token prostřednictvím nezabezpečených komunikačních kanálů, jako je e-mail nebo WhatsApp. Pokud potřebujete API token zaslat vývojáři, doporučujeme SimpleX Chat. Neukládejte svůj API token na nezabezpečeném zařízení. Váš API token vůbec neukládáme, pouze jeho hash.
- Požadavek
- Odpověď
- curl
- PHP
GET /api/status HTTP/2
Host: easywebshop.com
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
HTTP/2 200
Server: nginx
Date: Wed, 12 Mar 2025 12:00:00 GMT
Content-Type: text/plain;charset=UTF-8
{
"status": "success",
"message": "API online"
}
Získá stav API
curl -D - https://easywebshop.com/api/status
Uloží odpověď do souboru JSON
curl https://easywebshop.com/api/status -o status.json
-D, --dump-header
-o, --output <file>
curl man page:
https://curl.se/docs/manpage.html
<?php
header("Content-Type: text/plain");
// API endpoint
const API_URL = 'https://easywebshop.com/api/status';
// Your Bearer token
const API_TOKEN = 'YOUR_API_TOKEN';
// True: show request and response headers
const DEBUG = true;
// Initialize cURL session
$ch = curl_init(API_URL);
// Set cURL options
// Return the response as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json'
]);
// Optional: If you are sending data (e.g., for a POST request)
// Uncomment the following lines to send a JSON payload
/*
$data = [
'key1' => 'value1',
'key2' => 'value2'
];
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
*/
// Activate request and response details (for showing later)
if (DEBUG) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
}
// Execute the cURL request
$response = curl_exec($ch);
// Show the request details
if (DEBUG) {
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
}
// Check for errors
if (curl_errno($ch)) {
echo 'cURL error: ' . curl_error($ch);
// Print the response
} else {
// Print request and response header
if (DEBUG) {
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$response = substr($response, $header_size);
echo $header;
}
// Print response
echo $response;
}
// Close the cURL session
curl_close($ch);
?>
V této dokumentaci poskytujeme příklady pro curl a PHP. Moderní umělá inteligence je stále lepší v převodu kódu do jiných programovacích jazyků, jako jsou C, Java nebo Python.
Kategorie
Zobrazení kategorií
- GET /api/category
- Získá všechny kategorie
- GET /api/category/[categoryName]
- Získá všechny produkty v rámci konkrétní kategorie
Použijte název kategorie ve výchozím jazyce internetového obchodu
GET /api/category HTTP/2
Host: easywebshop.com
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
HTTP/2 200
Server: nginx
Date: Wed, 12 Mar 2025 12:00:00 GMT
Content-Type: text/plain;charset=UTF-8
{
"categorylist": [
{
"category": {
"name:lang=en": "Cocktails",
"name:lang=fr": "Cocktails",
"name:lang=nl": "Cocktails",
"visible": "1",
"image": "https:\/\/ew.ms\/shops\/fashion\/category\/cocktails.jpg",
"url": "https:\/\/all4you.be\/cocktails",
"categorylist": [
{
"category": {
"name:lang=en": "Non-alcoholic",
"name:lang=fr": "Sans alcool",
"name:lang=nl": "Alcoholvrij",
"visible": "1",
"url": "https:\/\/all4you.be\/non-alcoholic"
}
}
]
}
}
]
}
Získá všechny kategorie
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/category
Získá všechny produkty v rámci konkrétní kategorie
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/category/Cocktails
Získá všechny kategorie v čitelném formátu JSON
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/category?pretty=1
Získá všechny kategorie v čitelném formátu XML
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/category?format=xml\&pretty=1
<?php
header("Content-Type: text/plain");
// API endpoint
// You can add a category name behind the slash for searching products within that category
const API_URL = 'https://easywebshop.com/api/category/';
// Your Bearer token
const API_TOKEN = 'YOUR_API_TOKEN';
// True: show request and response headers
const DEBUG = true;
// Initialize cURL session
$ch = curl_init(API_URL);
// Set cURL options
// Return the response as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json'
]);
// Optional: If you are sending data (e.g., for a POST request)
// Uncomment the following lines to send a JSON payload
/*
$data = [
'key1' => 'value1',
'key2' => 'value2'
];
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
*/
// Activate request and response details (for showing later)
if (DEBUG) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
}
// Execute the cURL request
$response = curl_exec($ch);
// Show the request details
if (DEBUG) {
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
}
// Check for errors
if (curl_errno($ch)) {
echo 'cURL error: ' . curl_error($ch);
// Print the response
} else {
// Print request and response header
if (DEBUG) {
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$response = substr($response, $header_size);
echo $header;
}
// Print response
echo $response;
// Print response in PHP array
if ($response_array = json_decode($response, true)) {
echo "\n\n" . print_r($response_array, true);
}
}
// Close the cURL session
curl_close($ch);
?>
{
"categorylist": [
{
"category": {
"name:lang=en": "Cocktails",
"name:lang=fr": "Cocktails",
"name:lang=nl": "Cocktails",
"visible": "1",
"image": "https:\/\/ew.ms\/shops\/fashion\/category\/cocktails.jpg",
"url": "https:\/\/all4you.be\/cocktails",
"categorylist": [
{
"category": {
"name:lang=en": "Non-alcoholic",
"name:lang=fr": "Sans alcool",
"name:lang=nl": "Alcoholvrij",
"visible": "1",
"url": "https:\/\/all4you.be\/non-alcoholic"
}
}
]
}
}
]
}
<?xml version="1.0" encoding="UTF-8" ?>
<categorylist>
<category>
<name lang="en">Cocktails</name>
<name lang="fr">Cocktails</name>
<name lang="nl">Cocktails</name>
<visible>1</visible>
<image>https://ew.ms/shops/fashion/category/cocktails.jpg</image>
<url>https://all4you.be/cocktails</url>
<categorylist>
<category>
<name lang="en">Non-alcoholic</name>
<name lang="fr">Sans alcool</name>
<name lang="nl">Alcoholvrij</name>
<visible>1</visible>
<url>https://all4you.be/non-alcoholic</url>
</category>
</categorylist>
</category>
</categorylist>
Kategorie lze pouze zobrazovat. Pro vytváření, úpravu a mazání kategorií neexistuje implementace API, protože tyto funkce jsou zřídka používané a představovaly by další prostor pro útok. Správu kategorií lze provádět pomocí webového rozhraní.
Produkty
Zobrazení produktů
EasyWebshop se kdykoli je to možné řídí formátem schema.org/Product.
- GET /api/product
- Získá posledních 1000 produktů
- GET /api/product?offset=1000
- Získá posledních 1000 produktů, ale přeskočí prvních 1000 produktů
- GET /api/product/86400
- Získá produkty, které byly přidány nebo upraveny během posledních 24 hodin
- GET /api/product/[productID]
- Vyhledá produkt podle productID, rozlišuje velká a malá písmena
GET /api/product HTTP/2
Host: easywebshop.com
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
HTTP/2 200
Server: nginx
Date: Wed, 12 Mar 2025 12:00:00 GMT
Content-Type: text/plain;charset=UTF-8
{
"productlist": [
{
"product": {
"productID": "LA-B03",
"category": "Ambiance",
"price": 49.99,
"stock": 0,
"weight": 5,
"status": "Available",
"vat_code": 0,
"old_price": "75",
"colors": "Blue,Red,Violet",
"promotion": 1
}
},
{
"product": {
"productID": "LA-C05",
"category": "Ambiance",
"name:lang=en": "Example paint",
"name:lang=nl": "Voorbeeld verf",
"description:lang=en": "Lorem ipsum dolor sit amet.",
"price": 79,
"stock": 1,
"status": "Available",
"weight": 5,
"vat_code": 0,
"condition": "New",
"gtin": "123456",
"old_price": "179",
"units": "test",
"mpq": 1,
"purchase_price": 50,
"promo": 1,
"label_id": 1,
"colors": "Blue,Red,Violet",
"params": "T,en,Name,,,\nS,en,Select size,[A|B|C],A,1",
"review": 1
}
},
{
"product": {
"productID": "LA-C05-A",
"parent_productID": "LA-C05",
"name:lang=en": "Variation A",
"price": "79",
"colors": "LightCoral"
}
},
{
"product": {
"productID": "LA-C05-B",
"parent_productID": "LA-C05",
"name:lang=en": "Variation B",
"price": "89"
}
}
]
}
Získá posledních 1000 produktů
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/product
Získá posledních 1000 produktů, ale přeskočí prvních 1000 produktů
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/product?offset=1000
Získá produkty, které byly přidány nebo upraveny během posledních 24 hodin
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/product/86400
Vyhledá produkt podle productID, rozlišuje velká a malá písmena
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/product/LA-C05
<?php
header("Content-Type: text/plain");
// API endpoint
// You can add a product search behind the slash
const API_URL = 'https://easywebshop.com/api/product/';
// Your Bearer token
const API_TOKEN = 'YOUR_API_TOKEN';
// True: show request and response headers
const DEBUG = true;
// Initialize cURL session
$ch = curl_init(API_URL);
// Set cURL options
// Return the response as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json'
]);
// Optional: If you are sending data (e.g., for a POST request)
// Uncomment the following lines to send a JSON payload
/*
$data = [
'key1' => 'value1',
'key2' => 'value2'
];
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
*/
// Activate request and response details (for showing later)
if (DEBUG) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
}
// Execute the cURL request
$response = curl_exec($ch);
// Show the request details
if (DEBUG) {
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
}
// Check for errors
if (curl_errno($ch)) {
echo 'cURL error: ' . curl_error($ch);
// Print the response
} else {
// Print request and response header
if (DEBUG) {
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$response = substr($response, $header_size);
echo $header;
}
// Print response
echo $response;
// Print response in PHP array
if ($categories = json_decode($response, true)) {
echo "\n\n" . print_r($categories, true);
}
}
// Close the cURL session
curl_close($ch);
?>
{
"productlist": [
{
"product": {
"productID": "LA-B03",
"category": "Ambiance",
"price": 49.99,
"stock": 0,
"weight": 5,
"status": "Available",
"vat_code": 0,
"old_price": "75",
"colors": "Blue,Red,Violet",
"promotion": 1
}
},
{
"product": {
"productID": "LA-C05",
"category": "Ambiance",
"name:lang=en": "Example paint",
"name:lang=nl": "Voorbeeld verf",
"description:lang=en": "Lorem ipsum dolor sit amet.",
"price": 79,
"stock": 1,
"status": "Available",
"weight": 5,
"vat_code": 0,
"condition": "New",
"gtin": "123456",
"old_price": "179",
"units": "test",
"mpq": 1,
"purchase_price": 50,
"promo": 1,
"label_id": 1,
"colors": "Blue,Red,Violet",
"params": "T,en,Name,,,\nS,en,Select size,[A|B|C],A,1",
"review": 1
}
},
{
"product": {
"productID": "LA-C05-A",
"parent_productID": "LA-C05",
"name:lang=en": "Variation A",
"price": "79",
"colors": "LightCoral"
}
},
{
"product": {
"productID": "LA-C05-B",
"parent_productID": "LA-C05",
"name:lang=en": "Variation B",
"price": "89"
}
}
]
}
<?xml version="1.0" encoding="UTF-8" ?>
<productlist>
<product>
<productID>LA-B03</productID>
<category>Ambiance</category>
<price>49.99</price>
<stock>0</stock>
<weight>5</weight>
<status>Available</status>
<vat_code>0</vat_code>
<old_price>75</old_price>
<colors>Blue,Red,Violet</colors>
<promotion>1</promotion>
</product>
<product>
<productID>LA-C05</productID>
<category>Ambiance</category>
<name lang="en">Example paint</name>
<name lang="nl">Voorbeeld verf</name>
<description lang="en">Lorem ipsum dolor sit amet.</description>
<price>79</price>
<stock>1</stock>
<status>Available</status>
<weight>5</weight>
<vat_code>0</vat_code>
<condition>New</condition>
<gtin>123456</gtin>
<old_price>179</old_price>
<units>test</units>
<mpq>1</mpq>
<purchase_price>50</purchase_price>
<promo>1</promo>
<label_id>1</label_id>
<colors>Blue,Red,Violet</colors>
<params>T,en,Name,,,
S,en,Select size,[A|B|C],A,1</params>
<review>1</review>
</product>
<product>
<productID>LA-C05-A</productID>
<parent_productID>LA-C05</parent_productID>
<name lang="en">Variation A</name>
<price>79</price>
<colors>LightCoral</colors>
</product>
<product>
<productID>LA-C05-B</productID>
<parent_productID>LA-C05</parent_productID>
<name lang="en">Variation B</name>
<price>89</price>
</product>
</productlist>
Import produktů
- POST /api/product
- V případě úspěchu bude vráceno 201 Created
POST /api/product HTTP/2
Host: easywebshop.com
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
{
"productlist": [
{
"product": {
"productID": "LA-B03",
"category": "Ambiance",
"price": 49.99,
"stock": 0,
"weight": 5,
"status": "Available",
"vat_code": 0,
"old_price": "75",
"colors": "Blue,Red,Violet",
"promotion": 1
}
},
{
"product": {
"productID": "LA-C05",
"category": "Ambiance",
"name:lang=en": "Example paint",
"name:lang=nl": "Voorbeeld verf",
"description:lang=en": "Lorem ipsum dolor sit amet.",
"price": 79,
"stock": 1,
"status": "Available",
"weight": 5,
"vat_code": 0,
"condition": "New",
"gtin": "123456",
"old_price": "179",
"units": "test",
"mpq": 1,
"purchase_price": 50,
"promo": 1,
"label_id": 1,
"colors": "Blue,Red,Violet",
"params": "T,en,Name,,,\nS,en,Select size,[A|B|C],A,1",
"review": 1
}
},
{
"product": {
"productID": "LA-C05-A",
"parent_productID": "LA-C05",
"name:lang=en": "Variation A",
"price": "79",
"colors": "LightCoral"
}
},
{
"product": {
"productID": "LA-C05-B",
"parent_productID": "LA-C05",
"name:lang=en": "Variation B",
"price": "89"
}
}
]
}
HTTP/2 201
Server: nginx
Date: Wed, 12 Mar 2025 12:00:00 GMT
Content-Type: text/plain;charset=UTF-8
{
"status": "success",
"message": [
"4 products inserted"
]
}
curl -X POST -H "Authorization: Bearer YOUR_API_TOKEN" -d @product-import.json https://easywebshop.com/api/product
<?php
header("Content-Type: text/plain");
// API endpoint
const API_URL = 'https://easywebshop.com/api/product/';
// Your Bearer token
const API_TOKEN = 'YOUR_API_TOKEN';
// True: show request and response headers
const DEBUG = true;
// Initialize cURL session
$ch = curl_init(API_URL);
// Set cURL options
// Return the response as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json'
]);
// Uncomment the following lines to set data in PHP
/*
$data = [
'key1' => 'value1',
'key2' => 'value2'
];
$data = json_encode($data);
*/
// Get data from file
$data = file_get_contents('product-import.json');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// Activate request and response details (for showing later)
if (DEBUG) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
// Execute the cURL request
$response = curl_exec($ch);
// Show the request details
if (DEBUG) {
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
}
// Check for errors
if (curl_errno($ch)) {
echo 'cURL error: ' . curl_error($ch);
// Print the response
} else {
// Print request and response header
if (DEBUG) {
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$response = substr($response, $header_size);
echo $header;
}
// Print response
echo $response;
// Print response in PHP array
if ($response_array = json_decode($response, true)) {
echo "\n\n" . print_r($response_array, true);
}
}
// Close the cURL session
curl_close($ch);
?>
{
"productlist": [
{
"product": {
"productID": "LA-B03",
"category": "Ambiance",
"price": 49.99,
"stock": 0,
"weight": 5,
"status": "Available",
"vat_code": 0,
"old_price": "75",
"colors": "Blue,Red,Violet",
"promotion": 1
}
},
{
"product": {
"productID": "LA-C05",
"category": "Ambiance",
"name:lang=en": "Example paint",
"name:lang=nl": "Voorbeeld verf",
"description:lang=en": "Lorem ipsum dolor sit amet.",
"price": 79,
"stock": 1,
"status": "Available",
"weight": 5,
"vat_code": 0,
"condition": "New",
"gtin": "123456",
"old_price": "179",
"units": "test",
"mpq": 1,
"purchase_price": 50,
"promo": 1,
"label_id": 1,
"colors": "Blue,Red,Violet",
"params": "T,en,Name,,,\nS,en,Select size,[A|B|C],A,1",
"review": 1
}
},
{
"product": {
"productID": "LA-C05-A",
"parent_productID": "LA-C05",
"name:lang=en": "Variation A",
"price": "79",
"colors": "LightCoral"
}
},
{
"product": {
"productID": "LA-C05-B",
"parent_productID": "LA-C05",
"name:lang=en": "Variation B",
"price": "89"
}
}
]
}
<?xml version="1.0" encoding="UTF-8" ?>
<productlist>
<product>
<productID>LA-B03</productID>
<category>Ambiance</category>
<price>49.99</price>
<stock>0</stock>
<weight>5</weight>
<status>Available</status>
<vat_code>0</vat_code>
<old_price>75</old_price>
<colors>Blue,Red,Violet</colors>
<promotion>1</promotion>
</product>
<product>
<productID>LA-C05</productID>
<category>Ambiance</category>
<name lang="en">Example paint</name>
<name lang="nl">Voorbeeld verf</name>
<description lang="en">Lorem ipsum dolor sit amet.</description>
<price>79</price>
<stock>1</stock>
<status>Available</status>
<weight>5</weight>
<vat_code>0</vat_code>
<condition>New</condition>
<gtin>123456</gtin>
<old_price>179</old_price>
<units>test</units>
<mpq>1</mpq>
<purchase_price>50</purchase_price>
<promo>1</promo>
<label_id>1</label_id>
<colors>Blue,Red,Violet</colors>
<params>T,en,Name,,,
S,en,Select size,[A|B|C],A,1</params>
<review>1</review>
</product>
<product>
<productID>LA-C05-A</productID>
<parent_productID>LA-C05</parent_productID>
<name lang="en">Variation A</name>
<price>79</price>
<colors>LightCoral</colors>
</product>
<product>
<productID>LA-C05-B</productID>
<parent_productID>LA-C05</parent_productID>
<name lang="en">Variation B</name>
<price>89</price>
</product>
</productlist>
Podrobné vysvětlení všech polí produktu naleznete na stránce dokumentace Základní správa produktů a Pokročilá správa produktů.
Parametr | Typ | Popis |
---|---|---|
productID | string | Článek. Jedinečný a uživatelem definovaný identifikátor produktu. Vyhněte se speciálním znakům a duplicitním nebo nejednoznačným identifikátorům. Při úpravě produktu se productID používá jako identifikátor. ProductID lze změnit pouze pomocí správy produktů. |
parent_productID | string | Pokud chcete, aby tento produkt byl variantou produktu, zadejte zde productID nadřazeného produktu. Varianty fungují jako samostatné produkty. Jsou propojeny s nadřazeným produktem namísto kategorie, a proto nejsou viditelné v seznamech produktů. Podvarianty se nedoporučují a lze je nastavit pouze pomocí správy produktů. |
category | string | Název kategorie ve výchozím jazyce internetového obchodu. Nevztahuje se na varianty produktu. |
name:lang | string | Jméno. Názvy a popisy můžete nastavit pro všechny jazyky, i když nejsou v internetovém obchodě aktivovány. Dostupné jazyky (ISO 639-1): cs, da, de, el, en, es, fi, fr, it, ja, ko, nl, no, pl, pt, ro, ru, sv, tr, zh |
description:lang | string | Popis Dostupné jazyky (ISO 639-1): cs, da, de, el, en, es, fi, fr, it, ja, ko, nl, no, pl, pt, ro, ru, sv, tr, zh |
price | string | Cena. Může být desetinné číslo, celé číslo, prázdné pole nebo řetězec. |
stock | integer | Zásoby. Ponechte 0 pro nekonečné zásoby nebo deaktivované sledování zásob. |
status | string | Stav Available, Available but not online, Pre-order, Sold Out, Invisible, Customers only, Price visible for customers, Choose property, Hide status, custom0, custom1, ..., custom9 |
image:no | string | Zahrňte URL adresu obrázku pro nahrání fotografií produktu. První obrázek je hlavní fotografie, další čtyři jsou vedlejší fotografie. Pokud fotografie produktu již existuje, bude nahrazena. Po nahrání budou obrázky proporcionálně zmenšeny podle nastavení internetového obchodu, automaticky se vytvoří miniatury a obrázek bude synchronizován na více souborových serverů. Ujistěte se, že každý obrázek má platnou URL adresu, maximální velikost souboru 25 MB, platnou příponu (.jpg, .jpeg, .png nebo .gif) a platný MIME typ (image/jpeg, image/jpg, image/png, image/gif). Nahrávání obrázků vyžaduje čas a serverové prostředky. Při aktualizaci produktů se vyhněte nahrazování stejných obrázků. Pokud dochází k vypršení časového limitu, nahrávejte omezený počet produktů v dávkách po 25 obrázcích.1 - 5 |
thumbnail:no | string | Miniatury se generují automaticky. Toto je parametr pouze ke čtení. |
weight | decimal | Hmotnost. Jednotka SI kilogram. |
vat_code | integer | Daňová sazba. Sazba DPH nastavená v nastavení fakturace. 0, 1, 2 |
condition | string | Stavu New, Used, Refurbished |
gtin | string | EAN Kód |
old_price | string | Původní cena |
units | string | Kusy |
mpq | integer | Minimální nákup |
purchase_price | decimal | Kupní cena |
promo | boolean | Propagovat toto zboží na domovské stránce mého e-shopu. Nevztahuje se na varianty produktu. |
label_id | integer | Štítek. Ponechte 0 pro žádný štítek. Nevztahuje se na varianty produktu. 0 - 100 |
colors | string | Barvy. Vyberte z 256 webově bezpečných názvů barev v angličtině, oddělených čárkami. |
params | string | Personalizace produktu. Parametry mají speciální formát a nejlépe je lze nastavit pomocí rozhraní pro správu produktů. Jakmile budete mít příklad, můžete jej zkopírovat pro import. |
review | boolean | Hodnocení. Povolit nebo zakázat recenze produktů. |
last_update | datetime | Poslední aktivita. Pouze ke čtení. |
Tyto sekce lze nastavit pouze pomocí rozhraní pro správu: množstevní slevy, skupiny zákazníků, dárkové poukázky, rezervace, digitální zboží, filtry, související produkty.
Najednou lze importovat až 100 produktů. Pokud chcete importovat více produktů, můžete příkaz opakovat jednou za 5 minut.
Úprava produktů
Produkty můžete také upravovat pomocí funkce rychlé úpravy, funkce importu a funkce hromadných operací.
- PUT /api/product
- V případě úspěchu bude vráceno 200 OK
PUT /api/product HTTP/2
Host: easywebshop.com
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
{
"productlist": [
{
"product": {
"code": "LA-C05",
"price": 16,
"status": "Available",
"stock": 7,
"image:no=1": "https://easywebshop.com/img/slideshow/9001.jpg",
"image:no=2": "https://easywebshop.com/img/easywebshop.png"
}
},
{
"product": {
"code": "SI-V55",
"price": "28",
"status": "Sold Out",
"stock": "0",
"weight": "2",
"old_price": "43"
}
}
]
}
HTTP/2 200
Server: nginx
Date: Wed, 12 Mar 2025 12:00:00 GMT
Content-Type: text/plain;charset=UTF-8
{
"status": "success",
"message": [
"Product SI-V55 not found, skipping",
"1 products updated"
]
}
curl -X PUT -H "Authorization: Bearer YOUR_API_TOKEN" -d @product-edit.json https://easywebshop.com/api/product
<?php
header("Content-Type: text/plain");
// API endpoint
const API_URL = 'https://easywebshop.com/api/product/';
// Your Bearer token
const API_TOKEN = 'YOUR_API_TOKEN';
// True: show request and response headers
const DEBUG = true;
// Initialize cURL session
$ch = curl_init(API_URL);
// Set cURL options
// Return the response as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json'
]);
// Uncomment the following lines to set data in PHP
/*
$data = [
'key1' => 'value1',
'key2' => 'value2'
];
$data = json_encode($data);
*/
// Get data from file
$data = file_get_contents('product-edit.json');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// Activate request and response details (for showing later)
if (DEBUG) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
// Execute the cURL request
$response = curl_exec($ch);
// Show the request details
if (DEBUG) {
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
}
// Check for errors
if (curl_errno($ch)) {
echo 'cURL error: ' . curl_error($ch);
// Print the response
} else {
// Print request and response header
if (DEBUG) {
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$response = substr($response, $header_size);
echo $header;
}
// Print response
echo $response;
// Print response in PHP array
if ($response_array = json_decode($response, true)) {
echo "\n\n" . print_r($response_array, true);
}
}
// Close the cURL session
curl_close($ch);
?>
{
"productlist": [
{
"product": {
"code": "LA-C05",
"price": 16,
"status": "Available",
"stock": 7,
"image:no=1": "https://easywebshop.com/img/slideshow/9001.jpg",
"image:no=2": "https://easywebshop.com/img/easywebshop.png"
}
},
{
"product": {
"code": "SI-V55",
"price": "28",
"status": "Sold Out",
"stock": "0",
"weight": "2",
"old_price": "43"
}
}
]
}
<?xml version="1.0" encoding="UTF-8" ?>
<productlist>
<product>
<code>LA-C05</code>
<price>16</price>
<status>Available</status>
<stock>7</stock>
<image no="1">https://easywebshop.com/img/slideshow/9001.jpg</image>
<image no="2">https://easywebshop.com/img/easywebshop.png</image>
</product>
<product>
<code>SI-V55</code>
<price>28</price>
<status>Sold Out</status>
<stock>0</stock>
<weight>2</weight>
<old_price>43</old_price>
</product>
</productlist>
Pokud chcete aktualizovat skladové zásoby produktu, aktualizujte pouze pole stav a sklad. Nezapomeňte nastavit odpovídající stav produktu pro situace jako Vyprodáno nebo Nekonečné zásoby.
Najednou lze aktualizovat až 100 produktů. Pokud chcete aktualizovat více produktů, můžete příkaz opakovat jednou za 5 minut.
Mazání produktů
- DELETE /api/product/[productID]
- V případě úspěchu bude vráceno 204 No Content
- Požadavek
- Odpověď
- curl
- PHP
DELETE /api/product/LA-C05 HTTP/2
Host: easywebshop.com
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
HTTP/2 204
Server: nginx
Date: Wed, 12 Mar 2025 12:00:00 GMT
Content-Type: text/plain;charset=UTF-8
curl -k -X DELETE -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/product/LA-C05
<?php
header("Content-Type: text/plain");
// API endpoint
const API_URL = 'https://easywebshop.com/api/product/LA-B03';
// Your Bearer token
const API_TOKEN = 'YOUR_API_TOKEN';
// True: show request and response headers
const DEBUG = true;
// Initialize cURL session
$ch = curl_init(API_URL);
// Set cURL options
// Return the response as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
// Activate request and response details (for showing later)
if (DEBUG) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
// Execute the cURL request
$response = curl_exec($ch);
// Show the request details
if (DEBUG) {
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
}
// Check for errors
if (curl_errno($ch)) {
echo 'cURL error: ' . curl_error($ch);
// Print the response
} else {
// Print request and response header
if (DEBUG) {
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$response = substr($response, $header_size);
echo $header;
}
// Print response
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpcode == 204) {
echo "Delete successful";
} else {
echo $response;
}
// Print response in PHP array
if ($response_array = json_decode($response, true)) {
echo "\n\n" . print_r($response_array, true);
}
}
// Close the cURL session
curl_close($ch);
?>
Zákazníci
Zobrazení zákazníků
EasyWebshop se řídí formátem schema.org/Person.
- GET /api/customer
- Získá posledních 1000 zákazníků
- GET /api/customer?offset=1000
- Získá posledních 1000 zákazníků, ale přeskočí prvních 1000 zákazníků
- GET /api/customer/86400
- Získá zákazníky, kteří byli přidáni nebo upraveni během posledních 24 hodin
- GET /api/customer/[email]
- Získá konkrétního zákazníka podle e-mailové adresy
GET /api/customer HTTP/2
Host: easywebshop.com
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
HTTP/2 200
Server: nginx
Date: Wed, 12 Mar 2025 12:00:00 GMT
Content-Type: text/plain;charset=UTF-8
{
"customerlist": [
{
"customer": {
"givenName": "Test",
"familyName": "Buddy",
"brand": "",
"vatID": "",
"knowsLanguage": "en",
"address": {
"addressCountry": "BE",
"addressLocality": "Gent",
"addressRegion": "",
"postalCode": "9000",
"streetAddress": "Veldstraat",
"houseNo": "1"
},
"telephone": "123456789",
"email": "testbuddy@ew.ms",
"memberOf": "OpenGroup",
"denied": 0
}
},
{
"customer": {
"givenName": "Cindy",
"familyName": "Test",
"brand": "",
"vatID": "",
"knowsLanguage": "nl",
"address": {
"addressCountry": "BE",
"addressLocality": "Gent",
"addressRegion": "",
"postalCode": "9000",
"streetAddress": "Veldstraat",
"houseNo": "1"
},
"telephone": "123456789",
"email": "cindytest@ew.ms",
"denied": 0
}
}
]
}
Získá posledních 1000 zákazníků
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/customer
Získá posledních 1000 zákazníků, ale přeskočí prvních 1000 zákazníků
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/customer?offset=1000
Získá zákazníky, kteří byli přidáni nebo upraveni během posledních 24 hodin
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/customer/86400
Získá konkrétního zákazníka podle e-mailové adresy
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/customer/email@address.com
<?php
header("Content-Type: text/plain");
// API endpoint
// You can add an email address behind the slash for searching a specific customer
const API_URL = 'https://easywebshop.com/api/customer/';
// Your Bearer token
const API_TOKEN = 'YOUR_API_TOKEN';
// True: show request and response headers
const DEBUG = true;
// Initialize cURL session
$ch = curl_init(API_URL);
// Set cURL options
// Return the response as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json'
]);
// Optional: If you are sending data (e.g., for a POST request)
// Uncomment the following lines to send a JSON payload
/*
$data = [
'key1' => 'value1',
'key2' => 'value2'
];
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
*/
// Activate request and response details (for showing later)
if (DEBUG) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
}
// Execute the cURL request
$response = curl_exec($ch);
// Show the request details
if (DEBUG) {
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
}
// Check for errors
if (curl_errno($ch)) {
echo 'cURL error: ' . curl_error($ch);
// Print the response
} else {
// Print request and response header
if (DEBUG) {
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$response = substr($response, $header_size);
echo $header;
}
// Print response
echo $response;
// Print response in PHP array
if ($categories = json_decode($response, true)) {
echo "\n\n" . print_r($categories, true);
}
}
// Close the cURL session
curl_close($ch);
?>
{
"customerlist": [
{
"customer": {
"givenName": "Test",
"familyName": "Buddy",
"brand": "",
"vatID": "",
"knowsLanguage": "en",
"address": {
"addressCountry": "BE",
"addressLocality": "Gent",
"addressRegion": "",
"postalCode": "9000",
"streetAddress": "Veldstraat",
"houseNo": "1"
},
"telephone": "123456789",
"email": "testbuddy@ew.ms",
"memberOf": "OpenGroup",
"denied": 0
}
},
{
"customer": {
"givenName": "Cindy",
"familyName": "Test",
"brand": "",
"vatID": "",
"knowsLanguage": "nl",
"address": {
"addressCountry": "BE",
"addressLocality": "Gent",
"addressRegion": "",
"postalCode": "9000",
"streetAddress": "Veldstraat",
"houseNo": "1"
},
"telephone": "123456789",
"email": "cindytest@ew.ms",
"denied": 0
}
}
]
}
<?xml version="1.0" encoding="UTF-8" ?>
<customerlist>
<customer>
<givenName>Test</givenName>
<familyName>Buddy</familyName>
<brand></brand>
<vatID></vatID>
<knowsLanguage>en</knowsLanguage>
<address>
<addressCountry>BE</addressCountry>
<addressLocality>Gent</addressLocality>
<addressRegion></addressRegion>
<postalCode>9000</postalCode>
<streetAddress>Veldstraat</streetAddress>
<houseNo>1</houseNo>
</address>
<telephone>123456789</telephone>
<email>testbuddy@ew.ms</email>
<memberOf>OpenGroup</memberOf>
<denied>0</denied>
</customer>
<customer>
<givenName>Cindy</givenName>
<familyName>Test</familyName>
<brand></brand>
<vatID></vatID>
<knowsLanguage>nl</knowsLanguage>
<address>
<addressCountry>BE</addressCountry>
<addressLocality>Gent</addressLocality>
<addressRegion></addressRegion>
<postalCode>9000</postalCode>
<streetAddress>Veldstraat</streetAddress>
<houseNo>1</houseNo>
</address>
<telephone>123456789</telephone>
<email>cindytest@ew.ms</email>
<denied>0</denied>
</customer>
</customerlist>
Import zákazníků
Každý zákazník obdrží e-mail pro ověření e-mailové adresy.
- POST /api/customer
- V případě úspěchu bude vráceno 201 Created
POST /api/customer HTTP/2
Host: easywebshop.com
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
{
"customerlist": [
{
"customer": {
"givenName": "Test",
"familyName": "Buddy",
"brand": "",
"vatID": "",
"knowsLanguage": "en",
"address": {
"addressCountry": "BE",
"addressLocality": "Gent",
"addressRegion": "",
"postalCode": "9000",
"streetAddress": "Veldstraat",
"houseNo": "1"
},
"telephone": "123456789",
"email": "testbuddy@ew.ms",
"memberOf": "OpenGroup",
"denied": 0
}
},
{
"customer": {
"givenName": "Cindy",
"familyName": "Test",
"brand": "",
"vatID": "",
"knowsLanguage": "nl",
"address": {
"addressCountry": "BE",
"addressLocality": "Gent",
"addressRegion": "",
"postalCode": "9000",
"streetAddress": "Veldstraat",
"houseNo": "1"
},
"telephone": "123456789",
"email": "cindytest@ew.ms",
"denied": 0
}
}
]
}
HTTP/2 201
Server: nginx
Date: Wed, 12 Mar 2025 12:00:00 GMT
Content-Type: text/plain;charset=UTF-8
{
"status": "success",
"message": [
"Customer testbuddy@ew.ms: inserted successfully",
"Customer testbuddy@ew.ms: verification email sent successfully",
"Customer cindytest@ew.ms: inserted successfully",
"Customer cindytest@ew.ms: verification email sent successfully",
"2 customers inserted"
]
}
curl -X POST -H "Authorization: Bearer YOUR_API_TOKEN" -d @customer-import.json https://easywebshop.com/api/customer
<?php
header("Content-Type: text/plain");
// API endpoint
const API_URL = 'https://easywebshop.com/api/customer/';
// Your Bearer token
const API_TOKEN = 'YOUR_API_TOKEN';
// True: show request and response headers
const DEBUG = true;
// Initialize cURL session
$ch = curl_init(API_URL);
// Set cURL options
// Return the response as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json'
]);
// Uncomment the following lines to set data in PHP
/*
$data = [
'key1' => 'value1',
'key2' => 'value2'
];
$data = json_encode($data);
*/
// Get data from file
$data = file_get_contents('customer-import.json');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// Activate request and response details (for showing later)
if (DEBUG) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
// Execute the cURL request
$response = curl_exec($ch);
// Show the request details
if (DEBUG) {
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
}
// Check for errors
if (curl_errno($ch)) {
echo 'cURL error: ' . curl_error($ch);
// Print the response
} else {
// Print request and response header
if (DEBUG) {
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$response = substr($response, $header_size);
echo $header;
}
// Print response
echo $response;
// Print response in PHP array
if ($response_array = json_decode($response, true)) {
echo "\n\n" . print_r($response_array, true);
}
}
// Close the cURL session
curl_close($ch);
?>
{
"customerlist": [
{
"customer": {
"givenName": "Test",
"familyName": "Buddy",
"brand": "",
"vatID": "",
"knowsLanguage": "en",
"address": {
"addressCountry": "BE",
"addressLocality": "Gent",
"addressRegion": "",
"postalCode": "9000",
"streetAddress": "Veldstraat",
"houseNo": "1"
},
"telephone": "123456789",
"email": "testbuddy@ew.ms",
"memberOf": "OpenGroup",
"denied": 0
}
},
{
"customer": {
"givenName": "Cindy",
"familyName": "Test",
"brand": "",
"vatID": "",
"knowsLanguage": "nl",
"address": {
"addressCountry": "BE",
"addressLocality": "Gent",
"addressRegion": "",
"postalCode": "9000",
"streetAddress": "Veldstraat",
"houseNo": "1"
},
"telephone": "123456789",
"email": "cindytest@ew.ms",
"denied": 0
}
}
]
}
<?xml version="1.0" encoding="UTF-8" ?>
<customerlist>
<customer>
<givenName>Test</givenName>
<familyName>Buddy</familyName>
<brand></brand>
<vatID></vatID>
<knowsLanguage>en</knowsLanguage>
<address>
<addressCountry>BE</addressCountry>
<addressLocality>Gent</addressLocality>
<addressRegion></addressRegion>
<postalCode>9000</postalCode>
<streetAddress>Veldstraat</streetAddress>
<houseNo>1</houseNo>
</address>
<telephone>123456789</telephone>
<email>testbuddy@ew.ms</email>
<memberOf>OpenGroup</memberOf>
<denied>0</denied>
</customer>
<customer>
<givenName>Cindy</givenName>
<familyName>Test</familyName>
<brand></brand>
<vatID></vatID>
<knowsLanguage>nl</knowsLanguage>
<address>
<addressCountry>BE</addressCountry>
<addressLocality>Gent</addressLocality>
<addressRegion></addressRegion>
<postalCode>9000</postalCode>
<streetAddress>Veldstraat</streetAddress>
<houseNo>1</houseNo>
</address>
<telephone>123456789</telephone>
<email>cindytest@ew.ms</email>
<denied>0</denied>
</customer>
</customerlist>
Podrobné informace naleznete na wiki stránce správy zákazníků.
Parametr | Typ | Popis |
---|---|---|
string | E-mailová adresa. E-mailová adresa je jedinečným identifikátorem zákazníka. | |
givenName | string | Křestní jméno |
familyName | string | Příjmení |
brand | string | Společnosti |
vatID | string | VAT číslo |
knowsLanguage | string | Jazyk (ISO 639-1): cs, da, de, el, en, es, fi, fr, it, ja, ko, nl, no, pl, pt, ro, ru, sv, tr, zh |
addressCountry | string | Země (ISO_3166-1) |
addressLocality | string | Města / Město |
addressRegion | string | Stát / Provincie. Není vyžadováno pro většinu zemí a často se vynechává pro zkrácení objednávkového formuláře. |
postalCode | string | Poštovní směrovací číslo. Ne všechny země mají PSČ. |
streetAddress | string | Ulice |
houseNo | string | Číslo domu. Některá místa nemají čísla domu. |
telephone | string | Telefon |
memberOf | string | Skupina zákazníků |
status | string | Stav Unconfirmed, Confirmed, Denied |
denied | boolean | Odmítnuto 0 - 1 |
newsletter | boolean | Dostávat newsletter. Toto si mohou aktivovat pouze samotní zákazníci. |
registration_date | datetime | Datum registrace. Pouze ke čtení. |
Najednou lze importovat až 100 zákazníků. Pokud chcete importovat více zákazníků, můžete příkaz opakovat jednou za 5 minut.
Úprava zákazníků
Upozorňujeme, že z bezpečnostních důvodů mohou svá data aktualizovat pouze zákazníci. Můžete aktualizovat skupinu zákazníků a stav zákazníka (povolen nebo zamítnut).
- PUT /api/customer
- V případě úspěchu bude vráceno 200 OK
PUT /api/customer HTTP/2
Host: easywebshop.com
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
{
"customerlist": [
{
"customer": {
"email": "cindytest@ew.ms",
"memberOf": "OpenGroup",
"denied": 0
}
}
]
}
HTTP/2 200
Server: nginx
Date: Wed, 12 Mar 2025 12:00:00 GMT
Content-Type: text/plain;charset=UTF-8
{
"status": "success",
"message": [
"Customer cindytest@ew.ms: updated successfully",
"1 customers updated"
]
}
curl -X PUT -H "Authorization: Bearer YOUR_API_TOKEN" -d @customer-edit.json https://easywebshop.com/api/customer
<?php
header("Content-Type: text/plain");
// API endpoint
const API_URL = 'https://easywebshop.com/api/customer/';
// Your Bearer token
const API_TOKEN = 'YOUR_API_TOKEN';
// True: show request and response headers
const DEBUG = true;
// Initialize cURL session
$ch = curl_init(API_URL);
// Set cURL options
// Return the response as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json'
]);
// Uncomment the following lines to set data in PHP
/*
$data = [
'key1' => 'value1',
'key2' => 'value2'
];
$data = json_encode($data);
*/
// Get data from file
$data = file_get_contents('customer-edit.json');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// Activate request and response details (for showing later)
if (DEBUG) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
// Execute the cURL request
$response = curl_exec($ch);
// Show the request details
if (DEBUG) {
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
}
// Check for errors
if (curl_errno($ch)) {
echo 'cURL error: ' . curl_error($ch);
// Print the response
} else {
// Print request and response header
if (DEBUG) {
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$response = substr($response, $header_size);
echo $header;
}
// Print response
echo $response;
// Print response in PHP array
if ($response_array = json_decode($response, true)) {
echo "\n\n" . print_r($response_array, true);
}
}
// Close the cURL session
curl_close($ch);
?>
{
"customerlist": [
{
"customer": {
"email": "cindytest@ew.ms",
"memberOf": "OpenGroup",
"denied": 0
}
}
]
}
<?xml version="1.0" encoding="UTF-8" ?>
<customerlist>
<customer>
<email>cindytest@ew.ms</email>
<memberOf>OpenGroup</memberOf>
<denied>0</denied>
</customer>
</customerlist>
Najednou lze aktualizovat až 100 zákazníků. Pokud chcete aktualizovat více zákazníků, můžete příkaz opakovat jednou za 5 minut.
Mazání zákazníků
- DELETE /api/customer/[email]
- V případě úspěchu bude vráceno 204 No Content
- Požadavek
- Odpověď
- curl
- PHP
DELETE /api/customer/email@address.com HTTP/2
Host: easywebshop.com
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
HTTP/2 204
Server: nginx
Date: Wed, 12 Mar 2025 12:00:00 GMT
Content-Type: text/plain;charset=UTF-8
curl -k -X DELETE -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/customer/email@address.com
<?php
header("Content-Type: text/plain");
// API endpoint
const API_URL = 'https://easywebshop.com/api/customer/email@address.com';
// Your Bearer token
const API_TOKEN = 'YOUR_API_TOKEN';
// True: show request and response headers
const DEBUG = true;
// Initialize cURL session
$ch = curl_init(API_URL);
// Set cURL options
// Return the response as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
// Activate request and response details (for showing later)
if (DEBUG) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
// Execute the cURL request
$response = curl_exec($ch);
// Show the request details
if (DEBUG) {
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
}
// Check for errors
if (curl_errno($ch)) {
echo 'cURL error: ' . curl_error($ch);
// Print the response
} else {
// Print request and response header
if (DEBUG) {
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$response = substr($response, $header_size);
echo $header;
}
// Print response
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpcode == 204) {
echo "Delete successful";
} else {
echo $response;
}
// Print response in PHP array
if ($response_array = json_decode($response, true)) {
echo "\n\n" . print_r($response_array, true);
}
}
// Close the cURL session
curl_close($ch);
?>
Objednávky
Zobrazení objednávek
EasyWebshop se kdykoli je to možné řídí formátem schema.org/Order.
- GET /api/order
- Získá posledních 1000 objednávek
- GET /api/order?offset=1000
- Získá posledních 1000 objednávek, ale přeskočí prvních 1000 objednávek
- GET /api/order/86400
- Získá objednávky, které byly vytvořeny nebo upraveny během posledních 24 hodin
- GET /api/order/[orderNumber]
- Získá konkrétní objednávku podle čísla objednávky
GET /api/order HTTP/2
Host: easywebshop.com
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
HTTP/2 200
Server: nginx
Date: Wed, 12 Mar 2025 12:00:00 GMT
Content-Type: text/plain;charset=UTF-8
{
"orderlist": [
{
"order": {
"@context": "https:\/\/schema.org",
"@type": "Order",
"orderNumber": "20250-71911-55107-56027",
"orderDate": "2025-04-16 15:39:52",
"OrderStatus": "OrderPaymentDue",
"description": "",
"language": "en",
"currency": "EUR",
"totalprice": "79",
"productlist": [
{
"product": {
"@type": "Product",
"productId": "LA-C05",
"description": "Example paint",
"price": "79",
"amount": "1",
"vat_code": "0"
}
}
],
"customer": {
"@context": "https:\/\/schema.org",
"@type": "Person",
"givenName": "Test",
"familyName": "Buddy",
"brand": "",
"vatID": "",
"knowsLanguage": "nl",
"address": {
"addressCountry": "BE",
"addressLocality": "Gent",
"addressRegion": "",
"postalCode": "",
"streetAddress": "Veldstraat",
"houseNo": "1"
},
"telephone": "123456789",
"email": "testbuddy@ew.ms",
"status": "Confirmed",
"newsletter": 0,
"registration_date": "2009-03-27 15:42:02"
},
"paymentMethod": "bank",
"paymentUrl": "https:\/\/all4you.be\/payment\/20250-71911-55107-56027",
"last_update": "2025-04-19 13:18:17"
}
}
]
}
Získá posledních 1000 objednávek
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/order
Získá posledních 1000 objednávek, ale přeskočí prvních 1000 objednávek
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/order?offset=1000
Získá objednávky, které byly vytvořeny nebo upraveny během posledních 24 hodin
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/order/86400
Získá konkrétní objednávku podle čísla objednávky
curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/order/20250-00544-27497-22264
<?php
header("Content-Type: text/plain");
// API endpoint
// You can add an order code behind the slash for searching a specific order
const API_URL = 'https://easywebshop.com/api/order/';
// Your Bearer token
const API_TOKEN = 'YOUR_API_TOKEN';
// True: show request and response headers
const DEBUG = true;
// Initialize cURL session
$ch = curl_init(API_URL);
// Set cURL options
// Return the response as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json'
]);
// Optional: If you are sending data (e.g., for a POST request)
// Uncomment the following lines to send a JSON payload
/*
$data = [
'key1' => 'value1',
'key2' => 'value2'
];
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
*/
// Activate request and response details (for showing later)
if (DEBUG) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
}
// Execute the cURL request
$response = curl_exec($ch);
// Show the request details
if (DEBUG) {
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
}
// Check for errors
if (curl_errno($ch)) {
echo 'cURL error: ' . curl_error($ch);
// Print the response
} else {
// Print request and response header
if (DEBUG) {
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$response = substr($response, $header_size);
echo $header;
}
// Print response
echo $response;
// Print response in PHP array
if ($categories = json_decode($response, true)) {
echo "\n\n" . print_r($categories, true);
}
}
// Close the cURL session
curl_close($ch);
?>
{
"orderlist": [
{
"order": {
"@context": "https:\/\/schema.org",
"@type": "Order",
"orderNumber": "20250-71911-55107-56027",
"orderDate": "2025-04-16 15:39:52",
"OrderStatus": "OrderPaymentDue",
"description": "",
"language": "en",
"currency": "EUR",
"totalprice": "79",
"productlist": [
{
"product": {
"@type": "Product",
"productId": "LA-C05",
"description": "Example paint",
"price": "79",
"amount": "1",
"vat_code": "0"
}
}
],
"customer": {
"@context": "https:\/\/schema.org",
"@type": "Person",
"givenName": "Test",
"familyName": "Buddy",
"brand": "",
"vatID": "",
"knowsLanguage": "nl",
"address": {
"addressCountry": "BE",
"addressLocality": "Gent",
"addressRegion": "",
"postalCode": "",
"streetAddress": "Veldstraat",
"houseNo": "1"
},
"telephone": "123456789",
"email": "testbuddy@ew.ms",
"status": "Confirmed",
"newsletter": 0,
"registration_date": "2009-03-27 15:42:02"
},
"paymentMethod": "bank",
"paymentUrl": "https:\/\/all4you.be\/payment\/20250-71911-55107-56027",
"last_update": "2025-04-19 13:18:17"
}
}
]
}
<?xml version="1.0" encoding="UTF-8" ?>
<orderlist>
<order>
<@context>https://schema.org</@context>
<@type>Order</@type>
<orderNumber>20250-71911-55107-56027</orderNumber>
<orderDate>2025-04-16 15:39:52</orderDate>
<OrderStatus>OrderPaymentDue</OrderStatus>
<description></description>
<language>en</language>
<currency>EUR</currency>
<totalprice>79</totalprice>
<productlist>
<product>
<@type>Product</@type>
<productId>LA-C05</productId>
<description>Example paint</description>
<price>79</price>
<amount>1</amount>
<vat_code>0</vat_code>
</product>
</productlist>
<customer>
<@context>https://schema.org</@context>
<@type>Person</@type>
<givenName>Test</givenName>
<familyName>Buddy</familyName>
<brand></brand>
<vatID></vatID>
<knowsLanguage>nl</knowsLanguage>
<address>
<addressCountry>BE</addressCountry>
<addressLocality>Gent</addressLocality>
<addressRegion></addressRegion>
<postalCode></postalCode>
<streetAddress>Veldstraat</streetAddress>
<houseNo>1</houseNo>
</address>
<telephone>123456789</telephone>
<email>testbuddy@ew.ms</email>
<status>Confirmed</status>
<newsletter>0</newsletter>
<registration_date>2009-03-27 15:42:02</registration_date>
</customer>
<paymentMethod>bank</paymentMethod>
<paymentUrl>https://all4you.be/payment/20250-71911-55107-56027</paymentUrl>
<last_update>2025-04-19 13:18:17</last_update>
</order>
</orderlist>
Import objednávek
Vzhledem ke komplexní povaze procesu objednávky lze objednávky vkládat pouze vytvořením objednávky v internetovém obchodě nebo pomocí POS aplikace.
Úprava objednávek
- PUT /api/order
- V případě úspěchu bude vráceno 200 OK
PUT /api/customer HTTP/2
Host: easywebshop.com
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
{
"orderlist": [
{
"order": {
"code": "20250-71911-55107-56027",
"status": "OrderDelivered",
"reference": "Internal note",
"mail_customer": 1
}
}
]
}
HTTP/2 200
Server: nginx
Date: Wed, 12 Mar 2025 12:00:00 GMT
Content-Type: text/plain;charset=UTF-8
{
"status": "success",
"message": [
"Order 20250-71911-55107-56027: updated successfully",
"Order 20250-71911-55107-56027: email successfully sent to testbuddy@ew.ms"
]
}
curl -X PUT -H "Authorization: Bearer YOUR_API_TOKEN" -d @order-edit.json https://easywebshop.com/api/order
<?php
header("Content-Type: text/plain");
// API endpoint
const API_URL = 'https://easywebshop.com/api/order/';
// Your Bearer token
const API_TOKEN = 'YOUR_API_TOKEN';
// True: show request and response headers
const DEBUG = true;
// Initialize cURL session
$ch = curl_init(API_URL);
// Set cURL options
// Return the response as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json'
]);
// Uncomment the following lines to set data in PHP
/*
$data = [
'key1' => 'value1',
'key2' => 'value2'
];
$data = json_encode($data);
*/
// Get data from file
$data = file_get_contents('order-edit.json');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// Activate request and response details (for showing later)
if (DEBUG) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
// Execute the cURL request
$response = curl_exec($ch);
// Show the request details
if (DEBUG) {
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
}
// Check for errors
if (curl_errno($ch)) {
echo 'cURL error: ' . curl_error($ch);
// Print the response
} else {
// Print request and response header
if (DEBUG) {
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$response = substr($response, $header_size);
echo $header;
}
// Print response
echo $response;
// Print response in PHP array
if ($response_array = json_decode($response, true)) {
echo "\n\n" . print_r($response_array, true);
}
}
// Close the cURL session
curl_close($ch);
?>
{
"orderlist": [
{
"order": {
"code": "20250-71911-55107-56027",
"status": "OrderDelivered",
"reference": "Internal note",
"mail_customer": 1
}
}
]
}
<?xml version="1.0" encoding="UTF-8" ?>
<orderlist>
<order>
<code>20250-71911-55107-56027</code>
<status>OrderDelivered</status>
<reference>Internal note</reference>
<mail_customer>1</mail_customer>
</order>
</orderlist>
Podrobné informace naleznete na wiki stránce správy objednávek.
Parametr | Typ | Popis | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
orderNumber | string | Číslo objednávky. Číslo objednávky nebo kód objednávky je jedinečným identifikátorem objednávky. | ||||||||||||||||
status | string | Stav | ||||||||||||||||
| ||||||||||||||||||
reference | string | Toto je reference pro interní účely, kterou lze nastavit pro každou objednávku. Reference se zákazníkovi nezobrazí. | ||||||||||||||||
mail_customer | boolean | Odeslat e-mailové upozornění zákazníkovi. |
Najednou lze aktualizovat až 100 objednávek. Pokud chcete aktualizovat více objednávek, můžete příkaz opakovat jednou za 5 minut.
Mazání objednávek
- DELETE /api/order/[orderNumber]
- V případě úspěchu bude vráceno 204 No Content
- Požadavek
- Odpověď
- curl
- PHP
DELETE /api/order/20250-00544-27497-22264 HTTP/2
Host: easywebshop.com
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
HTTP/2 204
Server: nginx
Date: Wed, 12 Mar 2025 12:00:00 GMT
Content-Type: text/plain;charset=UTF-8
curl -k -X DELETE -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/order/20250-00544-27497-22264
<?php
header("Content-Type: text/plain");
// API endpoint
const API_URL = 'https://easywebshop.com/api/order/20250-71911-55107-56027';
// Your Bearer token
const API_TOKEN = 'YOUR_API_TOKEN';
// True: show request and response headers
const DEBUG = true;
// Initialize cURL session
$ch = curl_init(API_URL);
// Set cURL options
// Return the response as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
// Activate request and response details (for showing later)
if (DEBUG) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
// Execute the cURL request
$response = curl_exec($ch);
// Show the request details
if (DEBUG) {
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
}
// Check for errors
if (curl_errno($ch)) {
echo 'cURL error: ' . curl_error($ch);
// Print the response
} else {
// Print request and response header
if (DEBUG) {
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$response = substr($response, $header_size);
echo $header;
}
// Print response
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpcode == 204) {
echo "Delete successful";
} else {
echo $response;
}
// Print response in PHP array
if ($response_array = json_decode($response, true)) {
echo "\n\n" . print_r($response_array, true);
}
}
// Close the cURL session
curl_close($ch);
?>
Upozorňujeme, že při mazání objednávek nebo změně stavu na Zrušeno budou skladové zásoby znovu přičteny (pokud produkty stále existují) a produkty případně změní stav z Vyprodáno na Dostupné. Při zrušení storna objednávky budou skladové zásoby opět odečteny od produktů.
Limity
EasyWebshop je optimalizován pro redundanci a extrémně rychlé načítání webových stránek. V pozadí se nachází serverový klastr geograficky rozmístěný ve více datových centrech v různých zemích. To s sebou nese náklady: při přidávání a aktualizaci dat a souborů je třeba je synchronizovat napříč serverovým klastrem a na všech serverech musí být vymazány mezipaměti. Obrázky je třeba komprimovat a měnit jejich velikost do různých formátů pro zvětšené fotografie a miniatury, je nutné kontrolovat a vytvářet názvy souborů optimalizované pro SEO a všechna data musí být synchronizována napříč distribuovanými souborovými servery a záložními servery.
Účelem limitů je zabránit tomu, aby jeden uživatel přetížil naše systémy, což by poškodilo ostatní uživatele.
Požadavky API | 300 požadavků za 24h |
---|---|
Prohlížení položek | 1000 položek na požadavek |
Importování položek | 100 položek na požadavek |
Aktualizace položek | 100 položek na požadavek |
Nahrávání obrázků | 100 obrázků na požadavek (25 Megabyte per image) |
Vysoké limity API
Za normálních okolností by výchozí limity měly být dostačující. Limity by mohly představovat překážku pouze pro e-shopy s obrovským množstvím produktů.
V Nastavení > Další možnosti > EasyWebshop API lze aktivovat funkci Vysoké limity API. To umožňuje zakoupení dodatečných požadavků API.
API Push
API Push odesílá požadavek HTTPS s daty ve formátu JSON nebo XML. Tato data mohou být „zachycena“ serverem a zpracována.
Pokud si přejete pouze dostávat e-maily o vašich objednávkách na další adresu, použijte účty správce. Můžete také dostávat okamžitá oznámení o příchozích objednávkách.
V Nastavení > Moduly > EasyWebshop API > API Push zadejte URL vaší aplikace a uložte. Po uložení se objeví tlačítko Test, které vám umožní odeslat vzorový požadavek. Pro deaktivaci jednoduše ponechte URL adresy prázdné a uložte.
Customer Push | Order Push |
---|---|
Požadavek HTTPS je odeslán, když si zákazník vytvoří účet, a obsahuje všechny informace o zákazníkovi, podobně jako API pro zákazníky. | Požadavek HTTPS je odeslán, když zákazník zadá objednávku v e-shopu nebo když je objednávka zadána pomocí POS. Tento požadavek obsahuje všechna data objednávky, zakoupené produkty a informace o zákazníkovi, podobně jako API pro objednávky. |
- Customer Push
- Order Push
- index.php
{
"customerlist": [
{
"customer": {
"givenName": "Test",
"familyName": "Buddy",
"brand": "",
"vatID": "",
"knowsLanguage": "en",
"address": {
"addressCountry": "BE",
"addressLocality": "Gent",
"addressRegion": "",
"postalCode": "9000",
"streetAddress": "Veldstraat",
"houseNo": "1"
},
"telephone": "123456789",
"email": "testbuddy@ew.ms",
"memberOf": "OpenGroup",
"denied": 0
}
},
{
"customer": {
"givenName": "Cindy",
"familyName": "Test",
"brand": "",
"vatID": "",
"knowsLanguage": "nl",
"address": {
"addressCountry": "BE",
"addressLocality": "Gent",
"addressRegion": "",
"postalCode": "9000",
"streetAddress": "Veldstraat",
"houseNo": "1"
},
"telephone": "123456789",
"email": "cindytest@ew.ms",
"denied": 0
}
}
]
}
{
"orderlist": [
{
"order": {
"@context": "https:\/\/schema.org",
"@type": "Order",
"orderNumber": "20250-71911-55107-56027",
"orderDate": "2025-04-16 15:39:52",
"OrderStatus": "OrderPaymentDue",
"description": "",
"language": "en",
"currency": "EUR",
"totalprice": "79",
"productlist": [
{
"product": {
"@type": "Product",
"productId": "LA-C05",
"description": "Example paint",
"price": "79",
"amount": "1",
"vat_code": "0"
}
}
],
"customer": {
"@context": "https:\/\/schema.org",
"@type": "Person",
"givenName": "Test",
"familyName": "Buddy",
"brand": "",
"vatID": "",
"knowsLanguage": "nl",
"address": {
"addressCountry": "BE",
"addressLocality": "Gent",
"addressRegion": "",
"postalCode": "",
"streetAddress": "Veldstraat",
"houseNo": "1"
},
"telephone": "123456789",
"email": "testbuddy@ew.ms",
"status": "Confirmed",
"newsletter": 0,
"registration_date": "2009-03-27 15:42:02"
},
"paymentMethod": "bank",
"paymentUrl": "https:\/\/all4you.be\/payment\/20250-71911-55107-56027",
"last_update": "2025-04-19 13:18:17"
}
}
]
}
<?php
/*--------------------------------------------
* EasyWebshop API Push test script
--------------------------------------------*/
// Address to send data to
$email = 'test@ew.ms';
// Collect data
$feedback = "\n\nGET variables:\n\n";
foreach ($_GET as $name => $value) {
$feedback .= $name . ': ' . $value . "\n";
}
$feedback .= "\n\nPOST variables:\n\n";
foreach ($_POST as $name => $value) {
$feedback .= $name . ': ' . $value . "\n";
}
$feedback .= "\n\nInput data:\n\n" . file_get_contents("php://input");
// Send mail
mail($email, 'EasyWebshop API Push ', $feedback . "\n\n" .
// Username
(isset($_SERVER['PHP_AUTH_USER']) ? 'User: ' . $_SERVER['PHP_AUTH_USER'] . "\n" : '') .
// IP Address
(isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] . "\n" : '') .
$_SERVER['REMOTE_ADDR']);
// Return success
header('HTTP/1.1 200 OK');
die('200 OK');
?>
Připojení
Připojení jsou malé webové aplikace, které běží na vlastním serveru a mají vlastní URL. Mohou být instalovány všemi e-shopy, takže jejich kód mohou znovu použít všichni uživatelé EasyWebshop.
V Nastavení > Moduly > EasyWebshop API > Tokeny připojení klikněte na tlačítko Přidat pro vytvoření nového Tokenu připojení API. Budete muset zadat URL adresu připojení.
Ujistěte se, že vytváříte Token připojení API a nikoli běžný Token API.
Typy připojení jsou:
Doručovací služba, HTML widget, Fakturace, Produktový feed, Poskytovatel platebních služeb.
Připojení obvykle obsahují několik souborů:
Soubor | Popis |
---|---|
settings.xml | Toto je konfigurační soubor připojení.
|
easywebshop.php | Toto je soubor, který se připojuje k EasyWebshop API. V tomto souboru nastavte svůj Token připojení API (nikoli běžný Token API). |
index.php | Toto je hlavní soubor a první soubor, ke kterému se přistupuje při použití připojení. V případě doručovací služby jsou do tohoto souboru odesílána pole GET s adresou zákazníka. V případě PSP jsou do tohoto souboru odesílána pole POST objednávky. |
report.php | Tento soubor se používá v případě PSP a fakturace a obvykle jej na pozadí vyžaduje PSP k odesílání aktualizací o stavu platby. Tento soubor poté aktualizuje stav objednávky v e-shopu na Platba přijata. |
Abychom usnadnili vytváření nových připojení, ponechali jsme níže uvedené příklady co nejjednodušší a nejsrozumitelnější.
Doručovací služba
Níže uvedený příklad použijte pro vytváření připojení k doručovacím nebo přepravním službám.
Připojení musí být nainstalováno obchodníkem a způsoby dopravy musí být propojeny jejich výběrem.
- Zákazník je na stránce pokladny a vybírá způsob dopravy. Protože je vaše připojení propojeno se způsobem dopravy, spustí se vyskakovací okno s prvkem iframe, který odkazuje na váš soubor index.php.
- Adresní údaje zákazníka jsou odesílány jako proměnné GET v řetězci dotazu.
- Ve vašem připojení si zákazník může vybrat způsob dopravy nebo zvolit výdejní místo z mapy.
- Vaše připojení odešle název způsobu dopravy, cenu, popis a logo na naši potvrzovací URL (/dsconfirm).
- Data jsou přidána k objednávce a zákazník obdrží potvrzení.
- settings.xml
- easywebshop.php
- index.php
- style.css
<?xml version="1.0" encoding="UTF-8" ?>
<settings>
<name>ExampleDeliveryService</name>
<logo>logo.png</logo>
<type>ds</type>
<url>https://www.webshopdata.com/app/easywebshop-ds/index.php</url>
<parameter name="Account ID"></parameter>
<parameter name="Passphrase"></parameter>
</settings>
<?php
/*
EasyWebshop API Connector
Documentation: https://easywebshop.com/doc/api
*/
function easyApp($data = '') {
// Set your API Connection Token (not API Token!) here
$conn_token = 'YOUR_API_TOKEN';
// No need to change anything below. You can watch, but you can't touch!
if (!isset($_REQUEST['shop_id']) || !$_REQUEST['shop_id'] ||
!filter_var($_REQUEST['shop_id'], FILTER_VALIDATE_INT,
array('options' => array('min_range' => 1, 'max_range' => 1000000000)))) {
die('Error: $_REQUEST[\'shop_id\'] not set');
}
$settings = new SimpleXMLElement(file_get_contents(dirname(__FILE__) . '/settings.xml'));
$method = isset($data['function']) && substr($data['function'], 0, 3) == 'set' ? 'PUT' : 'GET';
$format = isset($data['format']) && in_array(strtolower($data['format']), array('json', 'xml')) ?
strtolower($data['format']) : 'array';
$data = is_array($data) ? ($method == 'GET' ? http_build_query($data) : json_encode($data)) : '';
$apiurl = 'https://easywebshop.jan/api/conn/' . $_REQUEST['shop_id'] . '/' . $settings->name .
($method == 'GET' && $data ? '?' . $data : ''); // HTTPS only
$opts = array(
'http' => array(
'header' => "Content-Type: application/x-www-form-urlencoded\r\n" .
'Authorization: Bearer ' .
hash('sha512', $_REQUEST['shop_id'] . $settings->name . hash('sha256', $conn_token) . $data) . "\r\n",
'method' => $method,
'ignore_errors' => true),
'ssl' => array('verify_peer' => false, 'verify_peer_name' => false)
);
if ($method == 'PUT') { $opts['http']['content'] = $data; }
$response = file_get_contents($apiurl, false, stream_context_create($opts));
$appdata = $format == 'array' ? json_decode($response, true) : $response;
// Output log - only in debug mode
if (defined('DEBUG') && DEBUG) {
echo "-- easywebshop.php " . $settings->name . "\n> Accessing API: " .
$apiurl . "\n> API response: " . $response . "--\n";
}
return $appdata; // this can be a PHP array, JSON or XML, depending on the $data['format'] value
} // easyApp()
?>
<?php
/*--------------------------------------------
EasyWebshop Delivery service example
Install link:
https://easywebshop.com/software/connections?install=https://www.webshopdata.com/app/easywebshop-ds
Block 1: Variables
Block 2: Languages
Block 3: Delivery service API code
Block 4: Process form data
Block 5: Start page
--------------------------------------------*/
/*--------------------------------
Block 1: Variables
-------------------------------*/
// Debug mode for testing, set to false in production
define('DEBUG', true);
// Use test data
define('TEST', true);
// Use for testing without GET vars from checkout form
if (TEST) {
$_REQUEST = array('shop_id' => 71911, 'lang' => 'en');
$_GET = array('shop_id' => $_REQUEST['shop_id'],
'webshop_url' => 'https://all4you.be',
'shipping_method' => 'Standard delivery',
#'shipping_method' => 'Pickup at collection point',
'firstname' => 'Bruno',
'lastname' => 'Test',
'street' => 'Mottakerveien',
'no' => '14',
'zipcode' => '0150',
'city' => 'Oslo',
'province' => '',
'country' => 'NO',
'lang' => $_REQUEST['lang'],
'weight' => 0.5, // total weight of the shopping basket in kg
'freeshipping' => '', // shipping discount
'email' => 'bruno@mailinator.com',
'phone' => '12345678',
'total' => 100); // total price of the order, can be used to give discounts
} // TEST
// Get the connection settings
$settings = new SimpleXMLElement(file_get_contents(dirname(__FILE__) . '/settings.xml'));
// Get the data from the webshop
require 'easywebshop.php';
$appdata = easyApp();
/* This gives us the following array
Array
(
[webshop] => Array
(
[email] => example@voorbeeldshop.be
[url] => https://voorbeeldshop.be
[name] => Voorbeeld webshop
[country] => BE
[lang] => nl
[currency] => EUR
)
[response_time] => 0.00084
)*/
// Show all the data we have for testing
if (DEBUG) {
echo "<pre>--------------------------------\n\tGET variables:\n--------------------------------\n\n";
print_r($_GET);
echo "\n\n</pre>";
echo "<pre>--------------------------------\n\tConnection variables:\n--------------------------------\n\n";
print_r($appdata);
echo "\n\n</pre>";
}
/*--------------------------------
Block 3: Delivery service API code
Delivery variables
- These can be hard coded, or requested from another source
- Prices can also depend on customer location, use $_GET['zipcode'] for this
-------------------------------*/
$delivery_prices = array(2.5, 1.5, 0);
/*--------------------------------
Block 2: Languages
-------------------------------*/
// Dutch
if ($_REQUEST['lang'] == 'nl') {
$l_deliverymethod = 'Kies uw verzendmethode';
$l_deliverymethods = array('Levering met drone', 'Levering met fiets', 'Afhalen in pakketautomaat');
$l_confirm = 'Bevestigen';
// Other languages
} else {
$l_deliverymethod = 'Choose your delivery method';
$l_deliverymethods = array('Delivery by drone', 'Delivery by bicycle', 'Pick up in a parcel machine');
$l_confirm = 'Confirm';
}
/*--------------------------------
Block 4: Process form data
-------------------------------*/
if (isset($_POST['deliverymethod'])) {
// Send delivery method
$ds_method = $l_deliverymethods[0];
if (is_numeric($_POST['deliverymethod']) && isset($l_deliverymethods[$_POST['deliverymethod']])) {
$ds_method = $l_deliverymethods[$_POST['deliverymethod']];
}
// Separate prices per delivery method
$ds_price = $delivery_prices[0];
if (is_numeric($_POST['deliverymethod']) && isset($delivery_prices[$_POST['deliverymethod']])) {
$ds_price = $delivery_prices[$_POST['deliverymethod']];
}
// Show a logo on the confirm page, always use HTTPS for displaying images on a HTTPS page
$ds_logo = 'https://www.webshopdata.com/app/easywebshop-ds/logo.png';
// Order number
$ds_info = 'Reference ' . rand(0, 10000); // this can be a reference to an external database
// Confirm delivery method
header('Location: ' . $appdata['webshop']['url'] . '/dsconfirm' .
'?ds=' . urlencode($settings->name) .
'&ds_price=' . $ds_price .
'&ds_method=' . urlencode($ds_method) .
'&ds_info=' . urlencode($ds_info) .
'&ds_logo=' . urlencode($ds_logo) .
'&ds_seconds=5'); // how long to show the confirmation message
die;
}
/*--------------------------------
Block 5: Start page
- Let's keep it very simple
-------------------------------*/
// Header
echo '<!DOCTYPE html><html lang="en"><head><title>' . $settings->name . '</title><meta charset="utf-8">' .
'<link rel="stylesheet" href="style.css"></head>' . // you can also include javascript here
'<body><main><img src="logo.png" alt="' . $settings->name . '" id="logo"><h1>' . $settings->name . '</h1>' .
// Form
'<form method="POST">' .
'<input type="hidden" name="shop_id" value="' . $_REQUEST['shop_id'] . '">' .
'<input type="hidden" name="lang" value="' . $_REQUEST['lang'] . '">' .
'<table>' .
'<tr><td>' . $l_deliverymethod . '</td><td>';
// Loop delivery methods
foreach ($l_deliverymethods as $k => $v) {
echo '<input type="radio" name="deliverymethod" value="' . $k . '" id="' . $k . '">' .
'<label for="' . $k . '">' . $v . ' <strong>€ ' . $delivery_prices[$k] . '</strong></label><br>';
}
echo '</td></tr>' .
// Submit form
'<tr><td></td><td><input type="submit" name="submit" value="' . $l_confirm . '"></td></tr>' .
'</table></form>' .
// End page
'</main></body></html>';
?>
body { margin: 0; font-family: Helvetica, Arial, sans-serif; color: #333; background-color: #E4E4E4; }
main { margin: 0 auto; margin-top: 30px; margin-bottom: 30px; padding: 20px; width: 760px; background-color: #FFF; border-radius: 8px; border: 1px solid #CCC; box-shadow: 5px 5px 5px #888; }
#logo { margin-bottom: 10px; }
h1 { font-size: 22px; margin: 0; padding: 0; color: #06C; margin-bottom: 80px; }
hr { clear: both; border-style: solid; border-width: 1px 0 0 0; border-color: #E4E4E4; margin: 20px 0; }
/*--------------------------------
Navigation
-------------------------------*/
nav { margin: 40px 0; clear: both; }
nav a {
display: block; width: 70%; margin: 30px auto; padding: 20px; vertical-align: top;
border: 1px solid #E4E4E4; box-shadow: 2px 2px 2px #888;
/*border-style: solid; border-width: 0 0 1px 0; border-color: #CCC;*/
text-decoration: none; color: #06C; font-size: 20px; font-weight: bold;
transition: background 0.4s;
}
nav a:hover { background: #EEE; }
nav img { display: inline-block; float: left; width: 100px; height: 100px; vertical-align: top; }
nav span{ display: inline-block; line-height: 100px; text-indent: 30px; }
.langselect { font-size: 0.8em; font-weight: bold; }
/*--------------------------------
Buttons
-------------------------------*/
a.glowbutton, input[type="submit"], input[type="button"] {
white-space: nowrap; display: inline-block; min-width: 210px; margin: 0 0 10px 0; padding: 0;
text-decoration: none; text-align: center;
color: #FFF; background-color: #06C; border: 0; border-radius: 3px;
line-height: 33px; height: 33px; font-weight: bold; font-size: 0.9em;
-webkit-appearance: none; -moz-appearance: none; appearance: none;
transition: background 0.4s;
}
a.glowbutton:hover, input[type="submit"]:hover {
background-color: #06F; text-decoration: none;
}
/*--------------------------------
Fancy
-------------------------------*/
a { color: #06C; text-decoration: none; }
a:hover { text-decoration: underline; }
h2 { font-size: 1.6em; }
h3 { font-size: 1.4em; }
h4 { font-size: 1.1em; color: #666; }
.blue { color: #06C; }
.orange { color: #F60; }
.code { font-family: monospace; color: #090; }
.code a { font-weight: bold; color: #090; }
.warn { background-color: #FC0; padding: 15px 5px; text-align: center; border-radius: 5px; font-size: 0.9em; box-shadow: 2px 2px 2px #888; }
/*--------------------------------
Forms
-------------------------------*/
textarea { width: 99%; height: 200px; font-size: 1.2em; color: #666; }
input, select, textarea { border: 1px solid #CCC; border-radius: 3px; padding: 3px; }
input:focus, textarea:focus { background-color: #EEE; }
input[type="checkbox"], input[type="radio"] { border: 0;}
input[type="submit"], input[type="button"] { cursor: pointer; float: right; margin: 10px 0 0 0; }
form table { width: 100%; }
form table td:first-child { width: 50%; }
label { display: inline-block; max-width: 90%; padding: 0 0 0 10px; cursor: pointer; }
/*--------------------------------
Responsive
-------------------------------*/
@media all and (max-width: 790px) {
main { width: 100%; margin: 0; padding: 20px 0; border: none; border-radius: 0; }
nav a { margin: 0 auto; margin-top: 20px; margin-bottom: 20px; }
textarea { width: 97%; }
}
HTML widget
Widgety lze použít k snadnému vkládání kódu HTML, CSS a JavaScript. Uživatel si může vybrat, na kterých stránkách webu chce tento kód nainstalovat. Je to v podstatě totéž jako kopírování a vkládání, ale uživatelsky přívětivější.
- settings.xml
<?xml version="1.0" encoding="UTF-8" ?>
<settings>
<name>ExampleWidget</name>
<type>html</type>
<parameter name="Enter variable data 1">Example data 1</parameter>
<parameter name="Enter variable data 2">Example data 2</parameter>
<url>https://www.webshopdata.com/app/easywebshop-html/settings.xml</url>
<html><![CDATA[<p>
Hello! I'm a <strong>HTML example</strong>.<br>
You can use HTML, CSS and JavaScript code here.<br>
The user can insert it on any page of the website.
</p>
<p>
Your first parameter was <strong>[PARAMETER1]</strong>.<br>
Your second parameter was <strong>[PARAMETER2]</strong>.
</p>
<p>
To install me, redirect your user to:<br>
https://easywebshop.com/software/connections?install=https://www.webshopdata.com/app/easywebshop-html
</p>
<p>
Replace the second part of the URL by the directory on your sever.<br>
Only this settings.xml file is required in the directory.
</p>]]></html>
</settings>
Fakturace
Fakturace funguje stejným způsobem jako Poskytovatel platebních služeb, ale zaměřuje se na platbu na fakturu, kde jsou zapotřebí údaje o zákazníkovi. Pokud je typ nastaven na psp, jsou k dispozici pouze nezbytná data, která PSP potřebuje ke zpracování platby. Pokud je typ invoice (fakturace), zpřístupní se také údaje o zákazníkovi.
Produktový feed
Používá se k načítání produktových dat, například pro použití na srovnávacích webech.
- settings.xml
- easywebshop.php
- index.php
- style.css
<?xml version="1.0" encoding="UTF-8" ?>
<settings>
<name>DemoFeed</name>
<type>productfeed</type>
<url>https://www.webshopdata.com/app/easywebshop-productfeed/index.php</url>
</settings>
<?php
/*
EasyWebshop API Connector
Documentation: https://easywebshop.com/doc/api
*/
function easyApp($data = '') {
// Set your API Connection Token (not API Token!) here
$conn_token = 'YOUR_API_TOKEN';
// No need to change anything below. You can watch, but you can't touch!
if (!isset($_REQUEST['shop_id']) || !$_REQUEST['shop_id'] ||
!filter_var($_REQUEST['shop_id'], FILTER_VALIDATE_INT,
array('options' => array('min_range' => 1, 'max_range' => 1000000000)))) {
die('Error: $_REQUEST[\'shop_id\'] not set');
}
$settings = new SimpleXMLElement(file_get_contents(dirname(__FILE__) . '/settings.xml'));
$method = isset($data['function']) && substr($data['function'], 0, 3) == 'set' ? 'PUT' : 'GET';
$format = isset($data['format']) && in_array(strtolower($data['format']), array('json', 'xml')) ?
strtolower($data['format']) : 'array';
$data = is_array($data) ? ($method == 'GET' ? http_build_query($data) : json_encode($data)) : '';
$apiurl = 'https://easywebshop.jan/api/conn/' . $_REQUEST['shop_id'] . '/' . $settings->name .
($method == 'GET' && $data ? '?' . $data : ''); // HTTPS only
$opts = array(
'http' => array(
'header' => "Content-Type: application/x-www-form-urlencoded\r\n" .
'Authorization: Bearer ' .
hash('sha512', $_REQUEST['shop_id'] . $settings->name . hash('sha256', $conn_token) . $data) . "\r\n",
'method' => $method,
'ignore_errors' => true),
'ssl' => array('verify_peer' => false, 'verify_peer_name' => false)
);
if ($method == 'PUT') { $opts['http']['content'] = $data; }
$response = file_get_contents($apiurl, false, stream_context_create($opts));
$appdata = $format == 'array' ? json_decode($response, true) : $response;
// Output log - only in debug mode
if (defined('DEBUG') && DEBUG) {
echo "-- easywebshop.php " . $settings->name . "\n> Accessing API: " .
$apiurl . "\n> API response: " . $response . "--\n";
}
return $appdata; // this can be a PHP array, JSON or XML, depending on the $data['format'] value
} // easyApp()
?>
<?php
/*--------------------------------------------
EasyWebshop Productfeed example
Install link:
https://easywebshop.com/software/connections?install=https://www.webshopdata.com/app/easywebshop-productfeed
Block 1: Variables
Block 2: Generate feed
Block 3: Languages
Block 4: Productfeed form
Block X: Functions
--------------------------------------------*/
/*--------------------------------
Block 1: Variables
-------------------------------*/
define('DEBUG', true); // Debug mode for testing, set to false in production
$languages = array('cs', 'da', 'de', 'el', 'en', 'es', 'fi', 'fr', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh');
define('SHOP_ID', isset($_REQUEST['shop_id']) && checkId($_REQUEST['shop_id']) ? $_REQUEST['shop_id'] : 0);
define('LANG', isset($_REQUEST['lang']) && in_array($_REQUEST['lang'], $languages) ? $_REQUEST['lang'] : 'en');
$settings = new SimpleXMLElement(file_get_contents(dirname(__FILE__) . '/settings.xml'));
/*--------------------------------
Block 2: Generate feed
-------------------------------*/
if (SHOP_ID && isset($_GET['token']) &&
preg_match('/^[0-9a-f]{40}$/i', $_GET['token']) && $_GET['token'] == sha1(SHOP_ID . LANG . 'roor8weiChait0gai')) {
/*--------------------------------
Connect to the EasyWebshop App API
easyApp(
[data] Data to send to the API, optional
)
- Returns an array of requested data, view with: print_r($appdata);
-------------------------------*/
header('Content-Type: text/xml; charset=utf-8');
// Show feed in XML format
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?" . ">\n<items>\n";
if (DEBUG) {
echo '<debug><![CDATA[';
}
include 'easywebshop.php';
$appdata = easyApp(array('lang' => LANG, 'seconds' => 0, 'start' => 0, 'length' => 1000)); //, 'format' => 'xml'));
if (DEBUG) {
echo "]]></debug>\n";
}
if (isset($appdata['products'])) {
displayProducts($appdata);
// Max 5000 products
for ($i = 1; $i < 5; $i++) {
if (count($appdata['products']) >= 1000) {
$appdata = easyApp(array('lang' => LANG, 'seconds' => 0, 'start' => ($i * 1000), 'length' => 1000)); //, 'format' => 'xml'));
displayProducts($appdata);
}
}
//"<updated>" . gmdate("Ymd\THis\Z") . "</updated>\n";
}
echo '</items>';
die;
}
/*--------------------------------
Block 3: Languages
-------------------------------*/
// Danish
if (LANG == 'da') {
$l_language = 'Sprog';
$l_languages = array('cs' => 'Tjekkisk', 'da' => 'Dansk', 'de' => 'Tysk', 'el' => 'Greek', 'en' => 'Engelsk', 'es' => 'Spansk', 'fi' => 'Finsk', 'fr' => 'Fransk', 'it' => 'Italiensk', 'ja' => 'Japansk', 'ko' => 'Koreansk', 'nl' => 'Nederlandsk', 'no' => 'Norsk', 'pl' => 'Polsk', 'pt' => 'Portugisisk', 'ro' => 'Rumænsk', 'ru' => 'Russisk', 'sv' => 'Svensk', 'tr' => 'Tyrkisk', 'zh' => 'Kinesisk');
$l_generate_feed = 'Generer produktfeed';
$l_feed_url = 'Din <strong>' . $settings->name . '</strong> feedwebadresse er:';
// German
} elseif (LANG == 'de') {
$l_language = 'Sprache';
$l_languages = array('cs' => 'Tschechisch', 'da' => 'Dänisch', 'de' => 'Deutsch', 'el' => 'Griechisch', 'en' => 'Englisch', 'es' => 'Spanisch', 'fi' => 'Finnisch', 'fr' => 'Französisch', 'it' => 'Italienisch', 'ja' => 'Japanisch', 'ko' => 'Koreanisch', 'nl' => 'Niederländisch', 'no' => 'Norwegisch', 'pl' => 'Polnisch', 'pt' => 'Portugiesisch', 'ro' => 'Rumänisch', 'ru' => 'Russisch', 'sv' => 'Schwedisch', 'tr' => 'Türkisch', 'zh' => 'Chinesisch');
$l_generate_feed = 'Produktfeed generieren';
$l_feed_url = 'Ihre Feed-URL für <strong>' . $settings->name . '</strong> lautet:';
// Spanish
} elseif (LANG == 'es') {
$l_language = 'Idioma';
$l_languages = array('cs' => 'Checo', 'da' => 'Danés', 'de' => 'Alemán', 'el' => 'Griego', 'en' => 'Inglés', 'es' => 'Español', 'fi' => 'Finlandés', 'fr' => 'Francés', 'it' => 'Italiano', 'ja' => 'Japonés', 'ko' => 'Coreano', 'nl' => 'Neerlandés', 'no' => 'Noruego', 'pl' => 'Polaco', 'pt' => 'Portugués', 'ro' => 'Rumano', 'ru' => 'Ruso', 'sv' => 'Sueco', 'tr' => 'Turco', 'zh' => 'Chino');
$l_generate_feed = 'Generar feed de producto';
$l_feed_url = 'Su <strong>' . $settings->name . '</strong> URL de feed es:';
// French
} elseif (LANG == 'fr') {
$l_language = 'Langue';
$l_languages = array('cs' => 'Tchèque', 'da' => 'Danois', 'de' => 'Allemand', 'el' => 'Grecque', 'en' => 'Anglais', 'es' => 'Espagnol', 'fi' => 'Finnois', 'fr' => 'Français', 'it' => 'Italien', 'ja' => 'Japonais', 'ko' => 'Coréen', 'nl' => 'Néerlandais', 'no' => 'Norvège', 'pl' => 'Polonais', 'pt' => 'Portugais', 'ro' => 'Roumain', 'ru' => 'Russe', 'sv' => 'Suédois', 'tr' => 'Turc', 'zh' => 'Chinois');
$l_generate_feed = 'Générer le flux de produits';
$l_feed_url = 'Votre URL de flux <strong>' . $settings->name . '</strong> est la suivante:';
// Dutch
} elseif (LANG == 'nl') {
$l_language = 'Taal';
$l_languages = array('cs' => 'Tsjechisch', 'da' => 'Deens', 'de' => 'Duits', 'el' => 'Grieks', 'en' => 'Engels', 'es' => 'Spaans', 'fi' => 'Fins', 'fr' => 'Frans', 'it' => 'Italiaans', 'ja' => 'Japans', 'ko' => 'Koreaans', 'nl' => 'Nederlands', 'no' => 'Noors', 'pl' => 'Pools', 'pt' => 'Portugees', 'ro' => 'Roemeens', 'ru' => 'Russisch', 'sv' => 'Zweeds', 'tr' => 'Turks', 'zh' => 'Chinees');
$l_generate_feed = 'Productfeed genereren';
$l_feed_url = 'Uw <strong>' . $settings->name . '</strong> feed URL is:';
// Norwegian
} elseif (LANG == 'no') {
$l_language = 'Språk';
$l_languages = array('cs' => 'Tsjekkisk', 'da' => 'Danske', 'de' => 'Tysk', 'el' => 'Gresk', 'en' => 'Engelsk', 'es' => 'Spansk', 'fi' => 'Finske', 'fr' => 'Fransk', 'it' => 'Italiensk', 'ja' => 'Japansk', 'ko' => 'Koreansk', 'nl' => 'Nederlandsk', 'no' => 'Norsk', 'pl' => 'Polsk', 'pt' => 'Portugisisk', 'ro' => 'Rumensk', 'ru' => 'Russiske', 'sv' => 'Svenske', 'tr' => 'Turkish', 'zh' => 'Kinesisk');
$l_generate_feed = 'Generer produktmating';
$l_feed_url = 'Din <strong>' . $settings->name . '</strong> feed-nettadresse er:';
// Swedish
} elseif (LANG == 'sv') {
$l_language = 'Språk';
$l_languages = array('cs' => 'Tjeckisk', 'da' => 'Danska', 'de' => 'Tyska', 'el' => 'Grekiska', 'en' => 'Engelska', 'es' => 'Spanska', 'fi' => 'Finska', 'fr' => 'Franska', 'it' => 'Italienska', 'ja' => 'Japansk', 'ko' => 'koreansk', 'nl' => 'Nederländska', 'no' => 'Norska', 'pl' => 'Polska', 'pt' => 'Portugisiska', 'ro' => 'Rumänska', 'ru' => 'Ryska', 'sv' => 'Svenska', 'tr' => 'Turkiska', 'zh' => 'Kinesisk');
$l_generate_feed = 'Generera produktmatning';
$l_feed_url = 'Din <strong>' . $settings->name . '</strong> matningsadress är:';
// English by default
} else {
$l_language = 'Language';
$l_languages = array('cs' => 'Czech', 'da' => 'Danish', 'de' => 'German', 'el' => 'Greek', 'en' => 'English', 'es' => 'Spanish', 'fi' => 'Finnish', 'fr' => 'French', 'it' => 'Italian', 'ja' => 'Japanese', 'ko' => 'Korean', 'nl' => 'Dutch', 'no' => 'Norwegian', 'pl' => 'Polish', 'pt' => 'Portuguese', 'ro' => 'Romanian', 'ru' => 'Russian', 'sv' => 'Swedish', 'tr' => 'Turkish', 'zh' => 'Chinese');
$l_generate_feed = 'Generate product feed';
$l_feed_url = 'Your <strong>' . $settings->name . '</strong> feed URL is:';
}
/*--------------------------------
Block 4: Productfeed form
-------------------------------*/
echo '<!DOCTYPE html><html lang="en"><head><title>' . $settings->name . '</title><meta charset="utf-8">' .
'<link rel="stylesheet" href="style.css"></head>' .
'<body><main><h1>' . $settings->name . '</h1>';
// Show feed URL
if (isset($_POST['shop_id']) && SHOP_ID) {
// Create a token for this feed so the URL cannot be guessed
$feedurl = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['DOCUMENT_URI'] .
'?shop_id=' . SHOP_ID . '&lang=' . LANG . '&token=' . sha1(SHOP_ID . LANG . 'roor8weiChait0gai');
echo '<p>' . $l_feed_url . '<br><a href="' . $feedurl . '" target="_blank">' . $feedurl . '</a></p>';
// Show generate feed form
} else {
echo '<form method="POST"><table>';
// Shop ID
if (SHOP_ID) {
echo '<input type="hidden" name="shop_id" value="' . SHOP_ID . '">';
} else {
echo '<tr><td>Shop ID</td><td><input type="text" name="shop_id" size="6"></td></tr>';
}
// Language
echo '<tr><td>' . $l_language . '</td><td><select name="lang">';
asort($l_languages);
foreach ($l_languages as $l => $l_name) {
echo '<option value="' . $l . '"' . ($l == $lang ? ' selected' : '') . '>' . $l_name . '</option>';
}
echo '</select></td></tr>';
// Submit form
echo '<tr><td></td><td><input type="submit" name="submit" value="' . $l_generate_feed . '"></td></tr>' .
'</table></form>';
}
echo '</main></body></html>';
/*--------------------------------
Block X: Functions
-------------------------------*/
function displayProducts($appdata) {
/* Google product feed:
https://support.google.com/merchants/answer/7052112?hl=en
*/
foreach ($appdata['products'] as $p) {
if (!isset($p['category'])) {
$p['category'] = '';
}
//echo "<item>\n";
// Image
//echo '<additional_image_link>' . $p['image'] . "</additional_image_link>\n
// ID (mandatory)
echo "<item>\n<id><![CDATA[" . $p['productID'] . "]]></id>\n<availability>" .
// Availability (Mandatory)
$p['status'] . "</availability>\n<brand><![CDATA[" .
// Brand (Mandatory)
$p['category'] . "]]></brand>\n" .
// Color
($p['colors'] ? '<color>' . $p['colors'] . "</color>\n" : '') .
// Condition (Recommended)
'<condition>' . $p['itemCondition'] . "</condition>\n<title><![CDATA[" .
// Title (Mandatory)
$p['name'] . "]]></title>\n<description><![CDATA[" .
// Description (Mandatory)
preg_replace('/[^(\x20-\x7F)]*/', '', $p['description']) . "]]></description>\n";
// EAN (Recommended)
if ($p['ean']) {
echo '<ean>' . $p['ean'] . "</ean>\n";
}
// Product code
//echo '<unique_id><![CDATA[' . $p['productID'] . "]]></unique_id>\n<size>" .
// Size (Mandatory)
echo '<size>' . $p['weight'] . "</size>\n<image_link>" .
// Image link (Mandatory)
$p['image'] . "</image_link>\n";
// Additional image links
for ($i = 2; $i <= 5; $i++) {
if (isset($p['image' . $i])) {
echo '<additional_image_link>' . $p['image' . $i] . "</additional_image_link>\n";
}
}
// Purchase price
if ($p['purchase_price']) {
echo '<cost_of_goods_sold>' . $p['purchase_price'] . "</cost_of_goods_sold>\n";
}
// Price (Mandatory)
echo '<price>' . ($p['old_price'] ? $p['old_price'] : $p['price']) . "</price>\n<sale_price>" .
// Sale price (Mandatory)
$p['price'] . "</sale_price>\n<link>" .
// Link (Mandatory)
$p['url'] . "</link>\n<product_type><![CDATA[" .
// Breadcrumb (Mandatory)
$p['category'] . "]]></product_type>\n<stock>" .
// Stock (Recommended)
$p['stock'] . "</stock>\n";
/* Shipping costs
[shipping] => Array
(
[Worldwide] => Array
(
[Pickup in the store] => 0
[Pickup at collection point] => 0
)
[BE] => Array
(
[Standard delivery] => 10
)
[NL] => Array
(
[Collect on delivery] => 5
)
)
*/
if (isset($p['shipping']) && $p['shipping']) {
$price_set = false;
foreach ($p['shipping'] as $country => $methods) {
// Try to set a shipping price
foreach ($methods as $method => $price) {
if ($price_set) {
break;
}
if ($method != 'Pickup in the store') {
echo '<shipping_price>' . $price . "</shipping_price>\n"; // ' ' . $appdata['webshop']['currency']
$price_set = true;
break;
}
}
}
}
echo "</item>\n";
}
} // displayProducts()
// Check for a valid shop id
function checkId($id) {
return filter_var($id, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 1000000000)));
} // checkId()
?>
body { margin: 0; font-family: Helvetica, Arial, sans-serif; color: #333; background-color: #e4e4e4; }
main { margin: 0 auto; margin-top: 30px; margin-bottom: 30px; padding: 20px; width: 760px; background-color: #fff; border-radius: 8px; border: 1px solid #ccc; box-shadow: 5px 5px 5px #888; }
#logo { float: left; margin-bottom: 10px; }
h1 { font-size: 22px; margin: 0; padding: 0; color: #06c; margin-bottom: 80px; }
hr { clear: both; border-style: solid; border-width: 1px 0 0 0; border-color: #e4e4e4; margin: 20px 0; }
/*--------------------------------
Buttons
-------------------------------*/
a.glowbutton, input[type="submit"], input[type="button"] {
white-space: nowrap; display: inline-block; min-width: 210px; margin: 0 0 10px 0; padding: 0;
text-decoration: none; text-align: center;
color: #fff; background-color: #06c; border: 0; border-radius: 3px;
line-height: 33px; height: 33px; font-weight: bold; font-size: 0.9em;
-webkit-appearance: none; -moz-appearance: none; appearance: none;
transition: background 0.4s;
}
a.glowbutton:hover, input[type="submit"]:hover {
background-color: #06f; text-decoration: none;
}
/*--------------------------------
Fancy
-------------------------------*/
a { color: #06c; text-decoration: none; }
a:hover { text-decoration: underline; }
h2 { font-size: 1.6em; }
h3 { font-size: 1.4em; }
h4 { font-size: 1.1em; color: #666; }
.blue { color: #06c; }
.orange { color: #f60; }
.code { font-family: monospace; color: #090; }
.code a { font-weight: bold; color: #090; }
.warn { background-color: #fc0; padding: 15px 5px; text-align: center; border-radius: 5px; font-size: 0.9em; box-shadow: 2px 2px 2px #888; }
/*--------------------------------
Forms
-------------------------------*/
textarea { width: 99%; height: 200px; font-size: 1.2em; color: #666; }
input, select, textarea { border: 1px solid #ccc; border-radius: 3px; margin: 0px 0 8px 0; padding: 8px; }
input:focus, textarea:focus { background-color: #eee; }
input[type="checkbox"], input[type="radio"] { border: 0;}
input[type="submit"], input[type="button"] { cursor: pointer; float: right; margin: 10px 0 0 0; }
form table { width: 100%; }
form table td:first-child { width: 50%; }
/*--------------------------------
Responsive
-------------------------------*/
@media all and (max-width: 790px) {
main { max-width: calc(100vw - 20px); margin: 0; padding: 20px 10px; border: none; border-radius: 0; }
textarea { width: 97%; }
}
Poskytovatel platebních služeb
Toto je způsob, jak připojit Poskytovatele platebních služeb (PSP) k EasyWebshop.
Připojení musí být nainstalováno obchodníkem a platební metody musí být propojeny jejich výběrem.
Poté, co zákazník zadá objednávku v e-shopu, zobrazí se stránka s tlačítkem Zaplatit nyní. Toto tlačítko odesílá HTML formulář.
- Vaše připojení obdrží POST data z tohoto formuláře, která zahrnují kód objednávky. Pomocí Tokenu připojení API můžete bezpečně načíst data objednávky, která jsou nezbytná pro zpracování platby.
- Připojte se k API poskytovatele platebních služeb a odešlete data objednávky.
- Pokud je platba provedena úspěšně, poskytovatel platebních služeb vyžádá soubor report.php, který aktualizuje stav objednávky v e-shopu na Platba přijata.
- Zákazník je přesměrován na URL platba v pořádku nebo platba selhala, v závislosti na úspěchu či neúspěchu platby.
- Pokud je nastaveno více platebních metod, zákazník si může po neúspěšné platbě vybrat jinou platební metodu.
- settings.xml
- easywebshop.php
- index.php
- report.php
- style.css
<?xml version="1.0" encoding="UTF-8" ?>
<settings>
<name>DemoPSP</name>
<logo>demo-psp.png</logo>
<type>psp</type>
<url>https://www.webshopdata.com/app/easywebshop-psp/index.php</url>
<parameter name="PSP API key">123456789</parameter>
</settings>
<?php
/*
EasyWebshop API Connector
Documentation: https://easywebshop.com/doc/api
*/
function easyApp($data = '') {
// Set your API Connection Token (not API Token!) here
$conn_token = 'YOUR_API_TOKEN';
// No need to change anything below. You can watch, but you can't touch!
if (!isset($_REQUEST['shop_id']) || !$_REQUEST['shop_id'] ||
!filter_var($_REQUEST['shop_id'], FILTER_VALIDATE_INT,
array('options' => array('min_range' => 1, 'max_range' => 1000000000)))) {
die('Error: $_REQUEST[\'shop_id\'] not set');
}
$settings = new SimpleXMLElement(file_get_contents(dirname(__FILE__) . '/settings.xml'));
$method = isset($data['function']) && substr($data['function'], 0, 3) == 'set' ? 'PUT' : 'GET';
$format = isset($data['format']) && in_array(strtolower($data['format']), array('json', 'xml')) ?
strtolower($data['format']) : 'array';
$data = is_array($data) ? ($method == 'GET' ? http_build_query($data) : json_encode($data)) : '';
$apiurl = 'https://easywebshop.jan/api/conn/' . $_REQUEST['shop_id'] . '/' . $settings->name .
($method == 'GET' && $data ? '?' . $data : ''); // HTTPS only
$opts = array(
'http' => array(
'header' => "Content-Type: application/x-www-form-urlencoded\r\n" .
'Authorization: Bearer ' .
hash('sha512', $_REQUEST['shop_id'] . $settings->name . hash('sha256', $conn_token) . $data) . "\r\n",
'method' => $method,
'ignore_errors' => true),
'ssl' => array('verify_peer' => false, 'verify_peer_name' => false)
);
if ($method == 'PUT') { $opts['http']['content'] = $data; }
$response = file_get_contents($apiurl, false, stream_context_create($opts));
$appdata = $format == 'array' ? json_decode($response, true) : $response;
// Output log - only in debug mode
if (defined('DEBUG') && DEBUG) {
echo "<pre>-- easywebshop.php " . $settings->name . "\n> Accessing API: " .
$apiurl . "\n> API response: " . $response . "--\n</pre>";
}
return $appdata; // this can be a PHP array, JSON or XML, depending on the $data['format'] value
} // easyApp()
?>
<?php
/*--------------------------------------------
* This page redirects a customer to the PSP
Install link:
https://easywebshop.com/software/connections?install=https://www.webshopdata.com/app/easywebshop-psp
Block 1: Variables
Block 2: Languages
Block 3: PSP API code
Block 4: Start page
Block X: Functions
--------------------------------------------*/
/*--------------------------------
Block 1: Variables
-------------------------------*/
// Debug mode for testing, set to false in production
define('DEBUG', true);
// Use test data
define('TEST', true);
// Use for testing without POST vars from payment form
if (TEST) {
$_REQUEST = array('shop_id' => 71911, 'ordercode' => '20250-71911-19417-18497', 'lang' => 'en');
}
define('SHOP_ID', isset($_REQUEST['shop_id']) && checkId($_REQUEST['shop_id']) ? $_REQUEST['shop_id'] : 0);
define('ORDERCODE', isset($_REQUEST['ordercode']) && checkOrderCode($_REQUEST['ordercode']) ? $_REQUEST['ordercode'] : '');
$error = '';
if (!ORDERCODE) {
$error = 'Invalid Order code';
}
// Easywebshop API connector
require 'easywebshop.php';
$appdata = easyApp(array('ordercode' => ORDERCODE));
$settings = (array)simplexml_load_file('settings.xml');
$log = "REQUEST variables:\n\n" . print_r($_REQUEST, true) .
"\n\nAppdata: \n\n" . print_r($appdata, true) . "\n\nSettings: \n\n" . print_r($settings, true);
// URL requested by PSP on payment status update
$reporturl = 'https://' . $_SERVER['HTTP_HOST'] .
substr($_SERVER['DOCUMENT_URI'], 0, strrpos($_SERVER['DOCUMENT_URI'], '/')) .
'/report.php?shop_id=' . SHOP_ID;
/*--------------------------------
Block 2: Languages
-------------------------------*/
// Dutch
if ($_REQUEST['lang'] == 'nl') {
$l_paymentok = 'Betaling geslaagd';
$l_paymentfail = 'Betaling mislukt';
// German
} elseif ($_REQUEST['lang'] == 'de') {
$l_paymentok = 'Zahlung erfolgreich';
$l_paymentfail = 'Zahlung fehlgeschlagen';
// Spanish
} elseif ($_REQUEST['lang'] == 'es') {
$l_paymentok = 'Pago efectuado';
$l_paymentfail = 'Pago fallido';
// French
} elseif ($_REQUEST['lang'] == 'fr') {
$l_paymentok = 'Paiement réussi';
$l_paymentfail = 'Échec du paiement';
// Default to English
} else {
$l_paymentok = 'Payment successful';
$l_paymentfail = 'Payment failed';
}
/*--------------------------------
Block 3: PSP API code
-------------------------------*/
/*--------------------------------
Block 4: Start page
-------------------------------*/
echo '<!DOCTYPE html><html lang="en"><head><title>' . $settings['name'] .
'</title><meta charset="utf-8"><link rel="stylesheet" href="style.css"></head>' .
'<body><main><p><img src="' . $settings['logo'] . '" style="margin: 5px"></p>';
// Error message
if ($error) {
echo '<p class="warn">' . $error . '</p>';
}
// Action buttons
if (isset($appdata['order']['code'])) {
echo '<p class="leftbuttons"><a href="' . $reporturl . '&ordercode=' . $appdata['order']['code'] .
'" class="glowbutton" style="background: #5fc331">' . $l_paymentok . '</a><a href="' .
$appdata['webshop']['paymentfailed'] . '" class="glowbutton" style="background: #c00">' .
$l_paymentfail . '</a></p>';
// Back to webshop
echo '<hr><p><a href="' . $appdata['webshop']['url'] . '/payment/' . $appdata['order']['code'] .
'" class="glowbutton">' . $appdata['webshop']['name'] . '</a></p>';
}
// Debug output -- you can find all $_POST, $appdata and $settings variables here
if (DEBUG) {
echo '<h2>Debug log</h2><pre>' . $log . '</pre>';
}
echo '</main></body></html>';
/*--------------------------------
Block X: Functions
-------------------------------*/
// Check for a valid shop id
function checkId($id) {
return filter_var($id, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 1000000000)));
} // checkId()
function checkOrderCode($code) {
return strlen($code) == 23 && preg_match('/\d\d\d\d\d-\d\d\d\d\d-\d\d\d\d\d-\d\d\d\d\d/', $code);
} // checkOrderCode()
?>
<?php
/*--------------------------------------------
* This page is usually requested "under water" by the PSP and updates the payment status
Block 1: Variables for EasyWebshop API
Block 2: PSP API code
Block 3: Set order paid
Block X: Functions
--------------------------------------------*/
header("Content-Type: text/plain; charset=utf-8");
/*--------------------------------
Block 1: Variables
-------------------------------*/
define('DEBUG', true); // Debug mode for testing, set to false in production
define('DEBUG_EMAIL', 'test@ew.ms'); // Send an email with debug log
$error = '';
// Easywebshop API connector
require 'easywebshop.php';
$appdata = easyApp(); // PSP must send shop_id in GET or POST
$settings = (array)simplexml_load_file('settings.xml');
$log = $settings['name'] . " report.php\n\n" .
'X forwarded: ' . (isset($_SERVER['HTTP_X_FORWARDED_FOR']) ?
$_SERVER['HTTP_X_FORWARDED_FOR'] : '') .
', IP: ' . $_SERVER['REMOTE_ADDR'] .
"\n\nGET variables:\n\n" . print_r($_GET, true) .
"\n\nPOST variables:\n\n" . print_r($_POST, true) .
"\n\nAppdata: \n\n" . print_r($appdata, true) .
"\n\nSettings: \n\n" . print_r($settings, true);
// report.php needed variables
$order_code = ''; // PSP must send order_code in GET or POST
$order_paid = false; // Set to TRUE if payment is successful
/*--------------------------------
Block 2: PSP API code
-------------------------------*/
// Check if ordercode is correct
if (isset($_REQUEST['ordercode']) && strlen($_REQUEST['ordercode']) == 23 &&
preg_match('/\d\d\d\d\d-\d\d\d\d\d-\d\d\d\d\d-\d\d\d\d\d/', $_REQUEST['ordercode'])) {
$order_code = $_REQUEST['ordercode']; // this variable is safe now
} else {
$error = 'Invalid order code';
}
// Check if correct GET or POST variables are received
if (!$error) {
/* Here you can check if the payment status update request is valid:
- Calculate a hash
- Make a request to the PSP API
*/
// Calculate hash
if (true) {
$order_paid = true;
}
/* Check payment status with PSP
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'api_key: ' . $appdata['parameter1'],
'Accept: application/json',
'Content-Type: application/json'
)
);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if (DEBUG) {
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $verbose = fopen('php://temp', 'rw+'));
curl_setopt($ch, CURLOPT_FILETIME, true);
}
$response = curl_exec($ch);
if (curl_errno($ch)) {
$error_msg = curl_error($ch);
}
curl_close($ch);
if (DEBUG) {
$log .= (isset($error_msg) ? "\n\nHTTP Log:\n" . print_r($error_msg, true) . "\n\n" : '') .
"Verbose information:\n" . !rewind($verbose) . stream_get_contents($verbose) . "\n\n" .
print_r($response, true);
}
$response = json_decode($response, true);
if ($response && isset($response['success']) && $response['success'] &&
isset($response['data']['financial_status']) && $response['data']['financial_status'] == 'completed') {
$order_paid = true;
$order_code = $response['data']['var2'];
}
*/
// Error found
} elseif (DEBUG) {
mailLog($log . "\n\nErrors:\n\n" . $error);
} // no errors
/*--------------------------------
Block 3: Set order paid
-------------------------------*/
if ($order_paid) {
// The connector needs $_REQUEST['shop_id'] and $_REQUEST['ordercode'] for changing the order status
$pmdata = easyApp(array('function' => 'setOrderPaid', 'ordercode' => $order_code));
$log .= "\n\nOrder update result:\n\n" . print_r($pmdata, true);
}
if (DEBUG) {
echo $log;
mailLog($log);
}
// Optional: redirect if customer comes on this page directly
header('Location: ' . $appdata['webshop']['paymentok']);
// Acknowledge we have successfully received a valid notification by returning OK
echo 'OK';
/*--------------------------------
Block X: Functions
-------------------------------*/
// Send mail
function mailLog($log) {
$subject = preg_split('#\r?\n#', ltrim($log), 2)[0]; // get first line
mail(DEBUG_EMAIL, $subject, $log . "\n\n" .
// Username
(isset($_SERVER['PHP_AUTH_USER']) ? 'User: ' . $_SERVER['PHP_AUTH_USER'] . "\n" : '') .
// IP Address
(isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] . "\n" : '') .
$_SERVER['REMOTE_ADDR']);
} // mailLog()
die;
?>
body { margin: 0; font-family: Helvetica, Arial, sans-serif; color: #333; background-color: #E4E4E4; }
main {
margin: 0 auto; margin-top: 30px; margin-bottom: 30px; padding: 20px; width: 760px;
background-color: #FFF; border-radius: 8px; border: 1px solid #CCC; box-shadow: 5px 5px 5px #888;
}
h1 { font-size: 22px; margin: 0; padding: 0; color: #06C; margin-bottom: 80px; }
hr { clear: both; border-style: solid; border-width: 1px 0 0 0; border-color: #E4E4E4; margin: 20px 0; }
/*--------------------------------
Navigation
-------------------------------*/
nav { margin: 40px 0; clear: both; }
nav a {
display: block; width: 70%; margin: 30px auto; padding: 20px; vertical-align: top;
border: 1px solid #E4E4E4; box-shadow: 2px 2px 2px #888;
/*border-style: solid; border-width: 0 0 1px 0; border-color: #CCC;*/
text-decoration: none; color: #06C; font-size: 20px; font-weight: bold;
transition: background 0.4s;
}
nav a:hover { background: #EEE; }
nav img { display: inline-block; float: left; width: 100px; height: 100px; vertical-align: top; }
nav span{ display: inline-block; line-height: 100px; text-indent: 30px; }
.langselect { font-size: 0.8em; font-weight: bold; }
/*--------------------------------
Buttons
-------------------------------*/
a.glowbutton, input[type="submit"], input[type="button"] {
white-space: nowrap; display: inline-block; min-width: 210px; margin: 0 0 10px 0; padding: 0;
text-decoration: none; text-align: center;
color: #FFF; background-color: #00abee; border: 0; border-radius: 6px;
line-height: 33px; height: 33px; font-weight: bold; font-size: 0.9em;
-webkit-appearance: none; -moz-appearance: none; appearance: none;
transition: background 0.4s;
}
a.glowbutton:hover, input[type="submit"]:hover {
background-color: #0085c4; text-decoration: none;
}
.leftbuttons a { margin-right: 10px !important; }
/*--------------------------------
Fancy
-------------------------------*/
a { color: #06C; text-decoration: none; }
a:hover { text-decoration: underline; }
h2 { font-size: 1.6em; }
h3 { font-size: 1.4em; }
h4 { font-size: 1.1em; color: #666; }
.blue { color: #06C; }
.orange { color: #F60; }
.code { font-family: monospace; color: #090; }
.code a { font-weight: bold; color: #090; }
.warn {
background-color: #FC0; padding: 15px 5px; text-align: center;
border-radius: 5px; font-size: 0.9em; box-shadow: 2px 2px 2px #888;
}
/*--------------------------------
Forms
-------------------------------*/
textarea { width: 99%; height: 200px; font-size: 1.2em; color: #666; }
input, select, textarea { border: 1px solid #CCC; border-radius: 3px; padding: 3px; }
input:focus, textarea:focus { background-color: #EEE; }
input[type="checkbox"], input[type="radio"] { border: 0;}
input[type="submit"], input[type="button"] { cursor: pointer; float: right; margin: 10px 0 0 0; }
form table { width: 100%; }
form table td:first-child { width: 50%; }
/*--------------------------------
Responsive
-------------------------------*/
@media all and (max-width: 790px) {
main { width: 100%; margin: 0; padding: 20px 0; border: none; border-radius: 0; }
nav a { margin: 0 auto; margin-top: 20px; margin-bottom: 20px; }
textarea { width: 97%; }
}
Instalace připojení
Změňte URL v příkladu na URL vašeho připojení. Náš back-end automaticky přečte váš soubor settings.xml a požádá uživatele o zadání potřebných dat.
<a href="https://easywebshop.com/software/connections/?install=https://www.webshopdata.com/app/easywebshop-psp">Install</a>
Po dokončení připojení můžete na své webové stránky přidat logo EasyWebshop.
Řešení problémů
API EasyWebshop jsme vyladili tak, aby bylo co nejjednodušší. Nabízíme také vysoce kvalitní službu helpdesku s volitelnou asistencí vývojáře pro techničtější dotazy. Účelem API je, abyste se mohli připojit k jiným platformám a aplikacím. Ty nemusí mít snadno použitelné API ani úroveň podpory, kterou nabízíme my. Pamatujte, že když nás kontaktujete, můžeme poskytnout pomoc pouze pro EasyWebshop, nikoli pro externí aplikace.
Pokud potřebujete pomoc s programovacími jazyky, je nejlepší si přečíst jejich dokumentační stránky. Většina z nich je velmi dobře zdokumentována. Možná můžete použít AI k vygenerování kódu pro vaše připojení, ale prosím neočekávejte, že naše podpora bude opravovat chyby ve vašem kódu.
Během Léta webdesignu vyvíjíme pro naše uživatele vlastní připojení. Tato připojení vytvářejí zkušení vývojáři. Pokud potřebujete komplexní připojení nebo funkci, toto je správná cesta.
- Zobrazuje se mi chyba: „Neplatný hash integrity dat“
- Zkontrolujte, zda je v souboru easywebshop.php nastaven Token připojení API (nikoli běžný Token API)
- Zkontrolujte, zda je URL správně nastavena
- Zkontrolujte, zda je připojení nainstalováno e-shopem
Užitečné odkazy
- REST (Representational State Transfer)
- JSON-LD (JavaScript Object Notation Linked Data)
- curl
- HTTP Status Codes
- W3Schools JSON Tutorial
- JSON online validator
- PHP.net
Technologie, které naše API používá, byly vybrány z následujících důvodů:
- Snadná implementace
- Bezpečný přenos dat přes HTTPS (již žádná nezabezpečená FTP připojení)
- Komunikace v reálném čase
- Nevyžadují se žádné další servery ani databáze navíc
- Škálovatelné pro větší objemy dat
- Lze použít s jakoukoli platformou, frameworkem a programovacím jazykem
- Žádné problémy s firewally
- Využívá standardy a obecné postupy REST, JSON, JSON-LD, XML a HTTPS
- Ověřování nositele (Bearer authentication) s vlastními oprávněními
- Kódování UTF-8
Pokud chcete v PHP používat curl, musíte nainstalovat rozšíření php-curl. Na systémech založených na Debianu (včetně Ubuntu) použijte následující příkaz:
sudo apt-get install php-curl