EasyWebshop API

Interfața de Programare a Aplicației (API) conectează magazinul dumneavoastră online cu platforme externe precum furnizori de plăți, servicii de livrare și aplicații de birou. Am depus eforturi considerabile pentru a face API-ul ușor de utilizat, chiar și pentru persoanele fără cunoștințe tehnice avansate. Acest lucru va permite, în unele cazuri, utilizatorilor noștri să își conecteze singuri magazinul online, fără a mai depinde de un dezvoltator costisitor.

Image of developers

Datorită compatibilității cu practicile generale și standardele industriei, conexiunile la API-ul nostru pot fi realizate rapid și posibil cu ajutorul codului generat de inteligența artificială. Citiți cu atenție această pagină dacă doriți să creați singuri o conexiune.

Prezentare generală a funcționalităților

  • Conectare la furnizori de servicii de plată
  • Conectare la servicii de livrare
  • Conectare la software POS, local și în cloud
  • Importare produse de la furnizori sau angrosiști
  • Exportare produse către site-uri de comparație
  • Conectare software de facturare
  • Conectare software CRM
  • Conectare software de gestionare logistică
  • Actualizare stoc (inventar) în timp real
  • Acceptare sau respingere clienți pe baza anumitor criterii
  • Exportare comenzi în timp real pentru drop shipping
  • Exportare clienți pentru aplicații de newsletter
  • Exportare date pentru rapoarte și analize
  • Creare conexiuni care instalează widget-uri HTML/JavaScript/CSS cu un singur clic
  • Creare rapoarte personalizate pentru inventar, comenzi, clienți și vânzări

API, API Push și Conexiuni

APIAPI PushConexiuni
Pentru importarea și exportarea categoriilor, produselor, comenzilor și clienților.Pentru sincronizarea stocului sau acceptarea clienților în timp real.Pentru conectarea furnizorilor de plăți, serviciilor de livrare, site-urilor de comparație, punctelor de vânzare, aplicațiilor de facturare și instalarea widget-urilor.
Autentificare cu token Bearer.Introduceți URL-ul Push în modulul API.Autentificare cu token Bearer (conexiune) și instalarea conexiunii (utilizator).
Personalizat pentru un singur utilizator.Personalizat pentru un singur utilizator.Poate fi instalat de toți utilizatorii.


API

Activați EasyWebshop API la Setări > Module > Easywebshop API folosind codul de activare MODA.
Dacă EasyWebshop API nu este afișat în meniu, navigați la Setări > Mai multe opțiuni > Nivel de experiență utilizator și modificați nivelul de experiență al utilizatorului la Expert.

API Module

Activați API-ul doar dacă îl veți utiliza. Din motive de securitate, dezactivați API-ul când nu îl folosiți.

Punct final APICopie
https://easywebshop.com/apiUtilizați întotdeauna versiunea https! Autentificarea prin http în text simplu poate duce la scurgerea Token-ului API.
Nu includeți subdomeniul www.
?format=xml
Schimbați formatul de ieșire de la JSON la XML.
?pretty=1
Ieșire formatată pentru o lizibilitate umană îmbunătățită. Eliminați această opțiune pentru a economisi lățime de bandă în sistemele automatizate.

Când utilizați mai mulți parametri, separați-i cu & (ampersand). De exemplu: ?format=xml&pretty=1.
În linia de comandă, folosiți escape pentru ampersand astfel: ?format=xml\&pretty=1.

Utilizați API-ul nostru cu atenție și interogați sau actualizați doar ce aveți nevoie. Nu utilizați polling dacă funcția API Push poate fi utilizată în schimb. Sunt impuse Limite pentru a preveni risipa resurselor serverului.

Autentificare

Faceți clic pe butonul Adăugare pentru a crea un Token API și selectați permisiunile dorite pentru acest token.

API Permissions

Pentru securitate sporită, selectați doar permisiunile strict necesare. Revocați permisiunile când nu mai sunt necesare.

După salvare, copiați Token-ul API pentru a-l utiliza în aplicația dumneavoastră sau pentru a-l trimite unui dezvoltator. Puteți face acest lucru o singură dată: dacă pierdeți Token-ul API, va trebui să-l ștergeți și să creați unul nou.

API Token

Utilizați Token-ul API cu atenție.
Nu trimiteți Token-ul API prin canale de comunicare nesigure precum e-mail sau WhatsApp. Vă recomandăm SimpleX Chat dacă trebuie să trimiteți Token-ul API unui dezvoltator. Nu stocați Token-ul API pe un dispozitiv nesigur. Noi nu stocăm deloc Token-ul API, ci doar un hash al acestuia.

  • Cerere
  • Răspuns
  • curl
  • PHP
GET /api/status HTTP/2 Host: easywebshop.com Authorization: Bearer YOUR_API_TOKEN Content-Type: application/jsonHTTP/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" } Recuperează starea API-ului curl -D - https://easywebshop.com/api/status Salvează răspunsul într-un fișier 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($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_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($chCURLOPT_HEADERtrue);
    
curl_setopt($chCURLINFO_HEADER_OUTtrue);
}

// Execute the cURL request
$response curl_exec($ch);

// Show the request details
if (DEBUG) {
    echo 
curl_getinfo($chCURLINFO_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($chCURLINFO_HEADER_SIZE);
        
$header substr($response0$header_size);
        
$response substr($response$header_size);
        echo 
$header;
    }

    
// Print response
    
echo $response;
}

// Close the cURL session
curl_close($ch);
?>

Copie

În această documentație, oferim exemple pentru curl și PHP. Inteligența artificială modernă este din ce în ce mai bună la convertirea codului în alte limbaje de programare precum C, Java sau Python.

Categorii

Vizualizarea categoriilor

GET /api/category
Recuperează toate categoriile
GET /api/category/[categoryName]
Recuperează toate produsele dintr-o categorie specifică
Utilizează numele categoriei în limba implicită a magazinului online
GET /api/category HTTP/2 Host: easywebshop.com Authorization: Bearer YOUR_API_TOKEN Content-Type: application/jsonHTTP/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" } } ] } } ] } Recuperează toate categoriile curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/category Recuperează toate produsele dintr-o categorie specifică curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/category/Cocktails Recuperează toate categoriile în format JSON lizibil pentru oameni curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/category?pretty=1 Recuperează toate categoriile în format XML lizibil pentru oameni 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($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_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($chCURLOPT_HEADERtrue);
    
curl_setopt($chCURLINFO_HEADER_OUTtrue);
}

// Execute the cURL request
$response curl_exec($ch);

// Show the request details
if (DEBUG) {
    echo 
curl_getinfo($chCURLINFO_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($chCURLINFO_HEADER_SIZE);
        
$header substr($response0$header_size);
        
$response substr($response$header_size);
        echo 
$header;
    }

    
// Print response
    
echo $response;

    
// Print response in PHP array
    
if ($response_array json_decode($responsetrue)) {
        echo 
"\n\n" print_r($response_arraytrue);
    }
}

// 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>

Copie

Categoriile pot fi doar vizualizate. Nu există o implementare API pentru crearea, editarea și ștergerea categoriilor deoarece aceste funcții sunt rar utilizate și ar crea suprafețe suplimentare de atac. Gestionarea categoriilor poate fi realizată prin intermediul interfeței web.

Produse

Vizualizarea produselor

EasyWebshop urmează formatul schema.org/Product ori de câte ori este posibil.

GET /api/product
Recuperează ultimele 1000 de produse
GET /api/product?offset=1000
Recuperează ultimele 1000 de produse, dar omite primele 1000 de produse
GET /api/product/86400
Recuperează produsele care au fost adăugate sau modificate în ultimele 24h
GET /api/product/[productID]
Caută un produs după ID-ul produsului, cu sensibilitate la majuscule
GET /api/product HTTP/2 Host: easywebshop.com Authorization: Bearer YOUR_API_TOKEN Content-Type: application/jsonHTTP/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" } } ] } Recuperează ultimele 1000 de produse curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/product Recuperează ultimele 1000 de produse, dar omite primele 1000 de produse curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/product?offset=1000 Recuperează produsele care au fost adăugate sau modificate în ultimele 24h curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/product/86400 Caută un produs după ID-ul produsului, cu sensibilitate la majuscule 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($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_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($chCURLOPT_HEADERtrue);
    
curl_setopt($chCURLINFO_HEADER_OUTtrue);
}

// Execute the cURL request
$response curl_exec($ch);

// Show the request details
if (DEBUG) {
    echo 
curl_getinfo($chCURLINFO_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($chCURLINFO_HEADER_SIZE);
        
$header substr($response0$header_size);
        
$response substr($response$header_size);
        echo 
$header;
    }

    
// Print response
    
echo $response;

    
// Print response in PHP array
    
if ($categories json_decode($responsetrue)) {
        echo 
"\n\n" print_r($categoriestrue);
    }
}

// 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>

Copie

Importarea produselor

POST /api/product
În caz de succes, se va returna 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($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_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($chCURLOPT_POSTtrue);
curl_setopt($chCURLOPT_POSTFIELDS$data);

// Activate request and response details (for showing later)
if (DEBUG) {
    
curl_setopt($chCURLOPT_HEADERtrue);
    
curl_setopt($chCURLINFO_HEADER_OUTtrue);
    
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
    
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
}

// Execute the cURL request
$response curl_exec($ch);

// Show the request details
if (DEBUG) {
    echo 
curl_getinfo($chCURLINFO_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($chCURLINFO_HEADER_SIZE);
        
$header substr($response0$header_size);
        
$response substr($response$header_size);
        echo 
$header;
    }

    
// Print response
    
echo $response;

    
// Print response in PHP array
    
if ($response_array json_decode($responsetrue)) {
        echo 
"\n\n" print_r($response_arraytrue);
    }
}

// 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>

Copie

Puteți găsi o explicație detaliată a tuturor câmpurilor produsului pe pagina de documentație Gestionarea de bază a produselor și Gestionarea avansată a produselor.

ParametruFelDescriere
productIDstringArticol. Un identificator unic și definit de utilizator pentru produs.
Evitați caracterele speciale și identificatorii duplicați sau ambigui. La editarea unui produs, ID-ul produsului este utilizat ca identificator. ID-ul produsului poate fi modificat doar prin gestionarea produselor.
parent_productIDstringDacă doriți ca acest produs să fie o variație de produs, introduceți aici ID-ul produsului părinte. Variațiile acționează ca produse de sine stătătoare. Acestea sunt conectate la un produs părinte în loc de o categorie și, prin urmare, nu sunt vizibile în listele de produse. Subvariațiile nu sunt recomandate și pot fi setate doar prin gestionarea produselor.
categorystringNumele categoriei în limba implicită a magazinului online. Nu se aplică pentru variațiile de produs.
name:langstringNume. Puteți seta nume și descrieri pentru toate limbile, chiar dacă acestea nu sunt activate în magazinul online.
Limbile disponibile (ISO 639-1): cs, da, de, el, en, es, fi, fr, it, ja, ko, nl, no, pl, pt, ro, ru, sv, tr, zh
description:langstringDescriere
Limbile disponibile (ISO 639-1): cs, da, de, el, en, es, fi, fr, it, ja, ko, nl, no, pl, pt, ro, ru, sv, tr, zh
pricestringPreț. Poate fi zecimal, întreg, gol sau un șir de caractere.
stockintegerStoc. Lăsați la 0 pentru stoc infinit sau stoc dezactivat.
statusstringStatut
Available, Available but not online, Pre-order, Sold Out, Invisible, Customers only, Price visible for customers, Choose property, Hide status, custom0, custom1, ..., custom9
image:nostringIncludeți un URL de imagine pentru a încărca fotografii ale produsului. Prima imagine este fotografia principală, următoarele patru sunt fotografii secundare. Când o fotografie a produsului există deja, aceasta va fi înlocuită. După încărcare, imaginile vor fi redimensionate proporțional conform setărilor magazinului online, miniaturile vor fi create automat, iar imaginea va fi sincronizată pe mai multe servere de fișiere. Asigurați-vă că fiecare imagine are un URL valid, o dimensiune maximă a fișierului de 25MB, o extensie validă (.jpg, .jpeg, .png sau .gif) și un tip MIME valid (image/jpeg, image/jpg, image/png, image/gif).
Încărcarea imaginilor necesită timp și resurse de server. Evitați înlocuirea acelorași imagini când actualizați produsele. Dacă întâmpinați întreruperi de timp, încărcați un număr limitat de produse în loturi de câte 25 de imagini.1 - 5
thumbnail:nostringMiniaturile sunt generate automat. Acesta este un parametru doar pentru citire.
weightdecimalGreutate. Unitatea SI kilogram.
vat_codeintegerTarif TVA. Rata TVA setată în setările de facturare.
0, 1, 2
conditionstringStare
New, Used, Refurbished
gtinstringcod EAN
old_pricestringPreț vechi
unitsstringNumăr de bucăți
mpqintegerAchiziționarea minimă
purchase_pricedecimalPrețul de achiziție
promobooleanPromovează acest produs pe pagina home a webshop-ului meu.. Nu se aplică pentru variațiile de produs.
label_idintegerEtichetă. Lăsați la 0 pentru nicio etichetă. Nu se aplică pentru variațiile de produs.
0 - 100
colorsstringColorate. Alegeți dintre cele 256 de nume de culori web sigure în engleză, separate prin virgule.
paramsstringPersonalizarea produselor. Parametrii au un format special și pot fi setați cel mai bine folosind interfața de gestionare a produselor. Odată ce aveți un exemplu, îl puteți copia pentru import.
reviewbooleanRecenzii. Activați sau dezactivați recenziile produselor.
last_updatedatetimeUltima activitate. Doar citire.

Aceste secțiuni pot fi setate doar folosind interfața de gestionare: reduceri de preț, grupuri de clienți, tichete cadou, rezervări, produse digitale, filtre, produse similare.

Până la 100 produse pot fi importate simultan. Dacă doriți să importați mai multe produse, puteți repeta comanda o dată la fiecare 5 minute.

Editarea produselor

Puteți edita produsele și folosind funcția de editare rapidă, funcția de import și funcția de operațiuni în masă.

PUT /api/product
În caz de succes, se va returna 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($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_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($chCURLOPT_CUSTOMREQUEST'PUT');
curl_setopt($chCURLOPT_POSTFIELDS$data);

// Activate request and response details (for showing later)
if (DEBUG) {
    
curl_setopt($chCURLOPT_HEADERtrue);
    
curl_setopt($chCURLINFO_HEADER_OUTtrue);
    
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
    
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
}

// Execute the cURL request
$response curl_exec($ch);

// Show the request details
if (DEBUG) {
    echo 
curl_getinfo($chCURLINFO_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($chCURLINFO_HEADER_SIZE);
        
$header substr($response0$header_size);
        
$response substr($response$header_size);
        echo 
$header;
    }

    
// Print response
    
echo $response;

    
// Print response in PHP array
    
if ($response_array json_decode($responsetrue)) {
        echo 
"\n\n" print_r($response_arraytrue);
    }
}

// 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>

Copie

Dacă doriți să actualizați stocul produsului, actualizați doar câmpurile status și stoc. Nu uitați să setați statusul corespunzător al produsului pentru situații precum Epuizat sau Stoc infinit.

Până la 100 produse pot fi actualizate simultan. Dacă doriți să actualizați mai multe produse, puteți repeta comanda o dată la fiecare 5 minute.

Ștergerea produselor

DELETE /api/product/[productID]
În caz de succes, se va returna 204 No Content
  • Cerere
  • Răspuns
  • curl
  • PHP
DELETE /api/product/LA-C05 HTTP/2 Host: easywebshop.com Authorization: Bearer YOUR_API_TOKEN Content-Type: application/jsonHTTP/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($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_HTTPHEADER, [
    
'Authorization: Bearer ' API_TOKEN,
    
'Content-Type: application/json'
]);


curl_setopt($chCURLOPT_CUSTOMREQUEST'DELETE');

// Activate request and response details (for showing later)
if (DEBUG) {
    
curl_setopt($chCURLOPT_HEADERtrue);
    
curl_setopt($chCURLINFO_HEADER_OUTtrue);
    
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
    
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
}

// Execute the cURL request
$response curl_exec($ch);

// Show the request details
if (DEBUG) {
    echo 
curl_getinfo($chCURLINFO_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($chCURLINFO_HEADER_SIZE);
        
$header substr($response0$header_size);
        
$response substr($response$header_size);
        echo 
$header;
    }

    
// Print response
    
$httpcode curl_getinfo($chCURLINFO_HTTP_CODE);
    if (
$httpcode == 204) {
        echo 
"Delete successful";
    } else {
        echo 
$response;
    }

    
// Print response in PHP array
    
if ($response_array json_decode($responsetrue)) {
        echo 
"\n\n" print_r($response_arraytrue);
    }


}

// Close the cURL session
curl_close($ch);
?>

Copie

Clienți

Vizualizarea clienților

EasyWebshop urmează formatul schema.org/Person.

GET /api/customer
Recuperează ultimii 1000 de clienți
GET /api/customer?offset=1000
Recuperează ultimii 1000 de clienți, dar omite primii 1000 de clienți
GET /api/customer/86400
Recuperează clienții care au fost adăugați sau modificați în ultimele 24h
GET /api/customer/[email]
Recuperează un client specific după adresa de email
GET /api/customer HTTP/2 Host: easywebshop.com Authorization: Bearer YOUR_API_TOKEN Content-Type: application/jsonHTTP/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 } } ] } Recuperează ultimii 1000 de clienți curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/customer Recuperează ultimii 1000 de clienți, dar omite primii 1000 de clienți curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/customer?offset=1000 Recuperează clienții care au fost adăugați sau modificați în ultimele 24h curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/customer/86400 Recuperează un client specific după adresa de email 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($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_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($chCURLOPT_HEADERtrue);
    
curl_setopt($chCURLINFO_HEADER_OUTtrue);
}

// Execute the cURL request
$response curl_exec($ch);

// Show the request details
if (DEBUG) {
    echo 
curl_getinfo($chCURLINFO_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($chCURLINFO_HEADER_SIZE);
        
$header substr($response0$header_size);
        
$response substr($response$header_size);
        echo 
$header;
    }

    
// Print response
    
echo $response;

    
// Print response in PHP array
    
if ($categories json_decode($responsetrue)) {
        echo 
"\n\n" print_r($categoriestrue);
    }
}

// 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>

Copie

Importarea clienților

Fiecare client primește un email pentru verificarea adresei de email.

POST /api/customer
În caz de succes, se va returna 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($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_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($chCURLOPT_POSTtrue);
curl_setopt($chCURLOPT_POSTFIELDS$data);

// Activate request and response details (for showing later)
if (DEBUG) {
    
curl_setopt($chCURLOPT_HEADERtrue);
    
curl_setopt($chCURLINFO_HEADER_OUTtrue);
    
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
    
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
}

// Execute the cURL request
$response curl_exec($ch);

// Show the request details
if (DEBUG) {
    echo 
curl_getinfo($chCURLINFO_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($chCURLINFO_HEADER_SIZE);
        
$header substr($response0$header_size);
        
$response substr($response$header_size);
        echo 
$header;
    }

    
// Print response
    
echo $response;

    
// Print response in PHP array
    
if ($response_array json_decode($responsetrue)) {
        echo 
"\n\n" print_r($response_arraytrue);
    }
}

// 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>

Copie

Informații detaliate pot fi găsite pe pagina wiki de gestionare a clienților.

ParametruFelDescriere
emailstringAdresa de e-mail. Adresa de email este identificatorul unic pentru client.
givenNamestringPrenume
familyNamestringNume
brandstringAfacere
vatIDstringnumăr TVA
knowsLanguagestringLimba (ISO 639-1): cs, da, de, el, en, es, fi, fr, it, ja, ko, nl, no, pl, pt, ro, ru, sv, tr, zh
addressCountrystringȚara (ISO_3166-1)
addressLocalitystringOraș
addressRegionstringProvincie. Nu este necesară pentru majoritatea țărilor și este adesea omisă pentru a face formularul de checkout mai scurt.
postalCodestringCod poștal & localitatea. Nu toate țările au coduri poștale.
streetAddressstringStradă
houseNostringNumărul casei. Unele locuri nu au numere de casă.
telephonestringTelefon
memberOfstringGrup de clienți
statusstringStatut
Unconfirmed, Confirmed, Denied
deniedbooleanRefuzat
0 - 1
newsletterbooleanAbonare la newsletter. Doar clienții înșiși pot activa acest lucru.
registration_datedatetimeData înregistrării. Doar citire.

Până la 100 clienți pot fi importați simultan. Dacă doriți să importați mai mulți clienți, puteți repeta comanda o dată la fiecare 5 minute.

Editarea clienților

Rețineți că doar clienții își pot actualiza datele ca măsură de securitate. Puteți actualiza grupul clientului și statusul clientului (permis sau refuzat).

PUT /api/customer
În caz de succes, se va returna 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($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_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($chCURLOPT_CUSTOMREQUEST'PUT');
curl_setopt($chCURLOPT_POSTFIELDS$data);

// Activate request and response details (for showing later)
if (DEBUG) {
    
curl_setopt($chCURLOPT_HEADERtrue);
    
curl_setopt($chCURLINFO_HEADER_OUTtrue);
    
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
    
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
}

// Execute the cURL request
$response curl_exec($ch);

// Show the request details
if (DEBUG) {
    echo 
curl_getinfo($chCURLINFO_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($chCURLINFO_HEADER_SIZE);
        
$header substr($response0$header_size);
        
$response substr($response$header_size);
        echo 
$header;
    }

    
// Print response
    
echo $response;

    
// Print response in PHP array
    
if ($response_array json_decode($responsetrue)) {
        echo 
"\n\n" print_r($response_arraytrue);
    }
}

// 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>

Copie

Până la 100 clienți pot fi actualizați simultan. Dacă doriți să actualizați mai mulți clienți, puteți repeta comanda o dată la fiecare 5 minute.

Ștergerea clienților

DELETE /api/customer/[email]
În caz de succes, se va returna 204 No Content
  • Cerere
  • Răspuns
  • curl
  • PHP
DELETE /api/customer/email@address.com HTTP/2 Host: easywebshop.com Authorization: Bearer YOUR_API_TOKEN Content-Type: application/jsonHTTP/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($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_HTTPHEADER, [
    
'Authorization: Bearer ' API_TOKEN,
    
'Content-Type: application/json'
]);


curl_setopt($chCURLOPT_CUSTOMREQUEST'DELETE');

// Activate request and response details (for showing later)
if (DEBUG) {
    
curl_setopt($chCURLOPT_HEADERtrue);
    
curl_setopt($chCURLINFO_HEADER_OUTtrue);
    
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
    
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
}

// Execute the cURL request
$response curl_exec($ch);

// Show the request details
if (DEBUG) {
    echo 
curl_getinfo($chCURLINFO_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($chCURLINFO_HEADER_SIZE);
        
$header substr($response0$header_size);
        
$response substr($response$header_size);
        echo 
$header;
    }

    
// Print response
    
$httpcode curl_getinfo($chCURLINFO_HTTP_CODE);
    if (
$httpcode == 204) {
        echo 
"Delete successful";
    } else {
        echo 
$response;
    }

    
// Print response in PHP array
    
if ($response_array json_decode($responsetrue)) {
        echo 
"\n\n" print_r($response_arraytrue);
    }


}

// Close the cURL session
curl_close($ch);
?>

Copie

Comenzi

Vizualizarea comenzilor

EasyWebshop urmează formatul schema.org/Order ori de câte ori este posibil.

GET /api/order
Recuperează ultimele 1000 de comenzi
GET /api/order?offset=1000
Recuperează ultimele 1000 de comenzi, dar omite primele 1000 de comenzi
GET /api/order/86400
Recuperează comenzile care au fost plasate sau modificate în ultimele 24h
GET /api/order/[orderNumber]
Recuperează o comandă specifică după numărul comenzii
GET /api/order HTTP/2 Host: easywebshop.com Authorization: Bearer YOUR_API_TOKEN Content-Type: application/jsonHTTP/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" } } ] } Recuperează ultimele 1000 de comenzi curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/order Recuperează ultimele 1000 de comenzi, dar omite primele 1000 de comenzi curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/order?offset=1000 Recuperează comenzile care au fost plasate sau modificate în ultimele 24h curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/order/86400 Recuperează o comandă specifică după numărul comenzii 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($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_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($chCURLOPT_HEADERtrue);
    
curl_setopt($chCURLINFO_HEADER_OUTtrue);
}

// Execute the cURL request
$response curl_exec($ch);

// Show the request details
if (DEBUG) {
    echo 
curl_getinfo($chCURLINFO_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($chCURLINFO_HEADER_SIZE);
        
$header substr($response0$header_size);
        
$response substr($response$header_size);
        echo 
$header;
    }

    
// Print response
    
echo $response;

    
// Print response in PHP array
    
if ($categories json_decode($responsetrue)) {
        echo 
"\n\n" print_r($categoriestrue);
    }
}

// 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>

Copie

Importarea comenzilor

Datorită naturii complexe a fluxului de checkout, comenzile pot fi introduse doar prin plasarea comenzii în magazinul online sau prin utilizarea aplicației POS.

Editarea comenzilor

PUT /api/order
În caz de succes, se va returna 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($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_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($chCURLOPT_CUSTOMREQUEST'PUT');
curl_setopt($chCURLOPT_POSTFIELDS$data);

// Activate request and response details (for showing later)
if (DEBUG) {
    
curl_setopt($chCURLOPT_HEADERtrue);
    
curl_setopt($chCURLINFO_HEADER_OUTtrue);
    
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
    
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
}

// Execute the cURL request
$response curl_exec($ch);

// Show the request details
if (DEBUG) {
    echo 
curl_getinfo($chCURLINFO_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($chCURLINFO_HEADER_SIZE);
        
$header substr($response0$header_size);
        
$response substr($response$header_size);
        echo 
$header;
    }

    
// Print response
    
echo $response;

    
// Print response in PHP array
    
if ($response_array json_decode($responsetrue)) {
        echo 
"\n\n" print_r($response_arraytrue);
    }
}

// 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>

Copie

Informații detaliate pot fi găsite pe pagina wiki de gestionare a comenzilor.

ParametruFelDescriere
orderNumberstringNumar de ordine. Numărul comenzii sau codul comenzii este identificatorul unic pentru comandă.
statusstringStatut
ParametruDescriere
OrderReceivedComandă primită
OrderPaymentDueSe așteaptă plata
OrderPaymentReceivedPlata primită
OrderProcessingComenzile sunt în curs de procesare
OrderInTransitComandă expediată
OrderDeliveredComandă finalizată
OrderCancelledAnulat
referencestringAceasta este o referință pentru scopuri interne care poate fi setată pentru fiecare comandă. Referința nu va fi afișată clientului.
mail_customerbooleanTrimite o notificare prin email clientului.

Până la 100 comenzi pot fi actualizate simultan. Dacă doriți să actualizați mai multe comenzi, puteți repeta comanda o dată la fiecare 5 minute.

Ștergerea comenzilor

DELETE /api/order/[orderNumber]
În caz de succes, se va returna 204 No Content
  • Cerere
  • Răspuns
  • curl
  • PHP
DELETE /api/order/20250-00544-27497-22264 HTTP/2 Host: easywebshop.com Authorization: Bearer YOUR_API_TOKEN Content-Type: application/jsonHTTP/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($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_HTTPHEADER, [
    
'Authorization: Bearer ' API_TOKEN,
    
'Content-Type: application/json'
]);


curl_setopt($chCURLOPT_CUSTOMREQUEST'DELETE');

// Activate request and response details (for showing later)
if (DEBUG) {
    
curl_setopt($chCURLOPT_HEADERtrue);
    
curl_setopt($chCURLINFO_HEADER_OUTtrue);
    
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
    
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
}

// Execute the cURL request
$response curl_exec($ch);

// Show the request details
if (DEBUG) {
    echo 
curl_getinfo($chCURLINFO_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($chCURLINFO_HEADER_SIZE);
        
$header substr($response0$header_size);
        
$response substr($response$header_size);
        echo 
$header;
    }

    
// Print response
    
$httpcode curl_getinfo($chCURLINFO_HTTP_CODE);
    if (
$httpcode == 204) {
        echo 
"Delete successful";
    } else {
        echo 
$response;
    }

    
// Print response in PHP array
    
if ($response_array json_decode($responsetrue)) {
        echo 
"\n\n" print_r($response_arraytrue);
    }


}

// Close the cURL session
curl_close($ch);
?>

Copie

Rețineți că atunci când ștergeți comenzi sau schimbați statusul în Anulat, stocul va fi readăugat (dacă produsele încă există), iar produsele își vor schimba statusul din Epuizat în Disponibil, dacă este cazul. Când anulați anularea unei comenzi, stocul va fi scăzut din nou din produse.

Limite

EasyWebshop este optimizat pentru redundanță și timpi de încărcare extrem de rapizi ai site-ului web. În culise, există un cluster de servere distribuit geografic în mai multe centre de date din diverse țări. Acest lucru are un cost: când se adaugă și se actualizează date și fișiere, acestea trebuie sincronizate pe clusterul de servere, iar cache-urile trebuie eliminate de pe toate serverele. Imaginile trebuie comprimate și redimensionate în diverse formate pentru fotografii cu zoom și miniaturi, numele de fișiere optimizate pentru SEO trebuie verificate și create, iar toate datele trebuie sincronizate pe servere de fișiere distribuite și servere de backup.

Scopul limitelor este ca un singur utilizator să nu poată supraîncărca sistemele noastre, ceea ce ar cauza prejudicii altor utilizatori.

Cereri API300 cereri per 24h
Vizualizarea articolelor1000 articole per cerere
Importarea articolelor100 articole per cerere
Actualizarea articolelor100 articole per cerere
Încărcarea imaginilor100 imagini per cerere (25 Megabyte per image)

Limite API ridicate

În situații normale, limitele implicite ar trebui să fie suficiente. Doar pentru magazinele online cu un număr foarte mare de produse, limitele ar putea reprezenta o barieră.

La Setări > Mai multe opțiuni > EasyWebshop API, funcția Limite API ridicate poate fi activată. Aceasta permite achiziționarea de cereri API suplimentare.

API Push

API Push trimite o cerere HTTPS cu date JSON sau XML. Aceste date pot fi "captate" de un server și procesate.

Dacă doriți pur și simplu să primiți un e-mail cu comenzile dvs. la o destinație suplimentară, utilizați conturi de administrator. De asemenea, puteți primi notificări instantanee pentru comenzile primite.

La Setări > Module > EasyWebshop API > API Push, introduceți URL-ul aplicației dvs. și salvați. După salvare, va apărea un buton Test care vă permite să trimiteți o cerere exemplu. Pentru dezactivare, lăsați pur și simplu URL-urile goale și salvați.

API Push

Customer PushOrder Push
O cerere HTTPS este trimisă atunci când un client își creează un cont, conținând toate informațiile despre client, similar cu API-ul pentru Clienți.O cerere HTTPS este trimisă atunci când un client plasează o comandă în magazinul online sau când o comandă este plasată folosind POS. Această cerere conține toate datele comenzii, produsele achiziționate și informații despre client, similar cu API-ul pentru Comenzi.


  • 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');

?>

Copie

Conexiuni

Conexiunile sunt aplicații web mici care funcționează pe propriul server și au propriul URL. Acestea pot fi instalate de toate magazinele online, astfel încât codul lor poate fi reutilizat de toți utilizatorii EasyWebshop.

La Setări > Module > EasyWebshop API > Token-uri de Conexiune, faceți clic pe butonul Adăugare pentru a crea un nou Token de Conexiune API. Va trebui să introduceți URL-ul conexiunii.

Asigurați-vă că creați un Token de Conexiune API și nu un Token API obișnuit.

API Connections

Tipurile de conexiuni sunt:
Serviciu de livrare, Widget HTML, Factură, Feed de produse, Furnizor de Servicii de Plată.

Conexiunile au de obicei un număr de fișiere:

FișierDescriere
settings.xmlAcesta este fișierul de configurare al conexiunii.
name
Numele conexiunii. Utilizați doar litere mari și mici, numere și caractere de subliniere. Acest nume este utilizat ca identificator.
logo
Numele fișierului unui logo din directorul conexiunii.
type
Tipul conexiunii, alegeți dintre:
ds (delivery service), html (HTML widget), invoice, productfeed, psp (Payment Service Provider)
url
URL-ul unde este găzduit fișierul index.php.
parameter
Cinci parametri opționali pot fi introduși de comerciant la instalarea sau editarea conexiunii. De exemplu: token-ul API al unui PSP poate fi introdus aici de către comerciant.
easywebshop.phpAcesta este fișierul care se conectează la API-ul EasyWebshop.
Setați Token-ul de Conexiune API (nu un Token API obișnuit) în acest fișier.
index.phpAcesta este fișierul principal și primul fișier accesat atunci când conexiunea este utilizată. În cazul unui serviciu de livrare, câmpurile GET cu adresa clienților sunt trimise către acest fișier. În cazul unui PSP, câmpurile POST ale comenzii sunt trimise către acest fișier.
report.phpAcest fișier este utilizat în cazul PSP și Factură și este de obicei solicitat în fundal de către PSP pentru a trimite actualizări despre starea plății. Acest fișier actualizează apoi starea comenzii în magazinul online la Plată primită.

Pentru a facilita crearea de noi conexiuni, am păstrat exemplele de mai jos cât mai simple și directe posibil.

Serviciu de livrare

Utilizați exemplul de mai jos pentru crearea conexiunilor către servicii de livrare sau transport.

Conexiunea trebuie instalată de către comerciant, iar metodele de expediere trebuie conectate prin selectarea acestora.

  1. Clientul se află pe pagina de finalizare a comenzii și selectează o metodă de expediere. Deoarece conexiunea dvs. este conectată la o metodă de expediere, aceasta declanșează o fereastră pop-up cu un iframe care indică către fișierul dvs. index.php.
  2. Datele adresei clientului sunt trimise ca variabile GET în șirul de interogare.
  3. În conexiunea dvs., clientul poate alege o metodă de expediere sau selecta un punct de ridicare de pe o hartă.
  4. Conexiunea dvs. trimite numele metodei de expediere, prețul, descrierea și un logo către URL-ul nostru de confirmare (/dsconfirm).
  5. Datele sunt adăugate la comandă, iar clientul primește o confirmare.
  • 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'], 03) == '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($apiurlfalsestream_context_create($opts));
    
$appdata  $format == 'array' json_decode($responsetrue) : $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.51.50);

/*--------------------------------
    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(010000); // 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%; }
}

Widget HTML

Widget-urile pot fi utilizate pentru a insera cu ușurință cod HTML, CSS și JavaScript. Utilizatorul poate alege pe ce pagini ale site-ului web dorește să instaleze acest cod. Este practic același lucru ca copierea și lipirea, dar mai ușor de utilizat.

  • 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>

Factură

Factura funcționează în același mod ca Furnizorul de Servicii de Plată, dar se concentrează pe plata pe bază de factură, unde sunt necesare datele clientului. Când tipul este setat la psp, sunt disponibile doar datele necesare pe care un PSP le necesită pentru a procesa o plată. Când tipul este factură, datele clientului devin, de asemenea, disponibile.

Feed de produse

Utilizat pentru recuperarea datelor despre produse, de exemplu pentru utilizare pe site-uri de comparație.

  • 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'], 03) == '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($apiurlfalsestream_context_create($opts));
    
$appdata  $format == 'array' json_decode($responsetrue) : $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($idFILTER_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%; }
}

Furnizor de Servicii de Plată

Aceasta este modalitatea de a conecta un Furnizor de Servicii de Plată (PSP) la EasyWebshop.

Conexiunea trebuie instalată de către comerciant, iar metodele de plată trebuie conectate prin selectarea acestora.

După ce clientul a plasat o comandă în magazinul online, apare pagina cu butonul Plătește acum. Acest buton trimite un formular HTML.

  1. Conexiunea dvs. primește datele POST din acest formular, care include codul comenzii. Cu Token-ul de Conexiune API puteți recupera în siguranță datele comenzii care sunt necesare pentru procesarea plății.
  2. Conectați-vă la API-ul PSP-ului și trimiteți datele comenzii.
  3. Dacă plata este executată cu succes, furnizorul de servicii de plată solicită fișierul report.php care actualizează starea comenzii în magazinul online la Plată primită.
  4. Clientul este redirecționat către URL-ul plată reușită sau către URL-ul plată eșuată, în funcție de succesul sau eșecul plății.
  5. Dacă sunt setate mai multe metode de plată, clientul poate alege o altă metodă de plată după o plată eșuată.
  • 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'], 03) == '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($apiurlfalsestream_context_create($opts));
    
$appdata  $format == 'array' json_decode($responsetrue) : $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($_REQUESTtrue) .
        
"\n\nAppdata: \n\n" print_r($appdatatrue) . "\n\nSettings: \n\n" print_r($settingstrue);

// URL requested by PSP on payment status update
$reporturl    'https://' $_SERVER['HTTP_HOST'] .
            
substr($_SERVER['DOCUMENT_URI'], 0strrpos($_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($idFILTER_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($_GETtrue) .
            
"\n\nPOST variables:\n\n" print_r($_POSTtrue) .
            
"\n\nAppdata: \n\n" print_r($appdatatrue) .
            
"\n\nSettings: \n\n" print_r($settingstrue);

// 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($pmdatatrue);
}

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%; }
}

Copie

Instalarea conexiunilor

Schimbați URL-ul din exemplu cu URL-ul conexiunii dvs. Backend-ul nostru citește automat fișierul dvs. settings.xml și solicită utilizatorului să introducă datele necesare.

<a href="https://easywebshop.com/software/connections/?install=https://www.webshopdata.com/app/easywebshop-psp">Install</a>

Puteți adăuga logo-ul EasyWebshop pe site-ul dvs. web când conexiunea este gata.

Logo

Depanare

Am perfecționat API-ul EasyWebshop pentru a-l face cât mai ușor posibil. De asemenea, oferim un serviciu de asistență de înaltă calitate cu asistență opțională din partea unui dezvoltator pentru întrebări mai tehnice. Scopul API-ului este să vă puteți conecta la alte platforme și aplicații. Acestea pot să nu aibă un API ușor de utilizat și nici nivelul de asistență pe care îl oferim noi. Amintiți-vă când ne contactați, putem oferi ajutor doar pentru EasyWebshop și nu pentru aplicații externe.

Dacă aveți nevoie de ajutor cu limbaje de programare, este mai bine să citiți paginile lor de documentație. Majoritatea sunt foarte bine documentate. Posibil să puteți utiliza AI pentru a genera codul pentru conexiunea dvs., dar vă rugăm să nu vă așteptați ca suportul nostru să remedieze erorile din codul dvs.

În timpul Verii de design web dezvoltăm conexiuni personalizate pentru utilizatorii noștri. Aceste conexiuni sunt realizate de dezvoltatori experimentați. Dacă aveți nevoie de o conexiune sau o funcționalitate complexă, aceasta este calea de urmat.

Primesc eroarea: "Hash de integritate a datelor invalid"
  • Verificați că Token-ul de Conexiune API (nu un Token API obișnuit) este setat în fișierul easywebshop.php
  • Verificați că URL-ul este setat corect
  • Verificați că conexiunea este instalată de un magazin online

Linkuri utile

Tehnologiile utilizate de API-ul nostru au fost alese din următoarele motive:

  • Ușor de implementat
  • Transfer de date securizat prin HTTPS (fără conexiuni FTP nesigure)
  • Comunicare în timp real
  • Nu sunt necesare servere suplimentare sau baze de date extra
  • Scalabil pentru volume mai mari de date
  • Poate fi utilizat cu orice platformă, framework și limbaj de programare
  • Fără probleme cu firewall-urile
  • Utilizează standardele și practicile generale REST, JSON, JSON-LD, XML și HTTPS
  • Autentificare Bearer cu permisiuni personalizate
  • Codificare UTF-8

Dacă doriți să utilizați curl în PHP, trebuie să instalați extensia php-curl. Pe sistemele bazate pe Debian (inclusiv Ubuntu), utilizați următoarea comandă:

sudo apt-get install php-curl

Derulați în sus

Acest site web nu folosește cookie-uri de urmărire și nu vinde date personale.Termeni și condițiiAcord de confidențialitate 2009 ‑ 2025 EasyWebshop