EasyWebshop API

Applikasjonsprogrammeringsgrensesnittet (API) bygger bro mellom nettbutikken din og eksterne plattformer som betalingsleverandører, leveringstjenester og kontorapplikasjoner. Vi har lagt ned betydelig innsats for å gjøre API-et enkelt å bruke, selv for de som ikke er teknisk kyndige. Dette vil i noen tilfeller gjøre det mulig for våre brukere å koble til nettbutikken sin selv, i stedet for å måtte stole på en kostbar utvikler.

Image of developers

Takket være kompatibilitet med generell praksis og bransjestandarder, kan tilkoblinger til vårt API gjøres raskt og muligens ved hjelp av AI-generert kode. Les denne siden nøye hvis du ønsker å opprette en tilkobling selv.

Funksjonsoversikt

  • Koble til betalingstjenesteleverandører
  • Koble til leveringstjenester
  • Koble til POS-programvare, lokal og skybasert
  • Importere produkter fra leverandører eller grossister
  • Eksportere produkter til sammenligningssider
  • Koble til faktureringsprogramvare
  • Koble til CRM-programvare
  • Koble til programvare for logistikkstyring
  • Oppdatere lagerbeholdning (inventar) i sanntid
  • Godta eller avvise kunder basert på bestemte kriterier
  • Eksportere bestillinger i sanntid for dropshipping
  • Eksportere kunder for nyhetsbrevapplikasjoner
  • Eksportere data for rapporter og analyser
  • Opprette tilkoblinger som installerer HTML/JavaScript/CSS-widgets med et klikk
  • Opprette egendefinerte rapporter for lagerbeholdning, bestillinger, kunder og salg

API, API Push og Tilkoblinger

APIAPI PushTilkoblinger
For import og eksport av kategorier, produkter, bestillinger og kunder.For synkronisering av lagerbeholdning eller godkjenning av kunder i sanntid.For tilkobling av betalingsleverandører, leveringstjenester, sammenligningssider, kassesystemer, faktureringsapplikasjoner og installering av widgets.
Autentisering med Bearer-token.Angi Push-URL i API-modulen.Autentisering med Bearer-token (tilkobling) og installering av tilkoblingen (bruker).
Tilpasset én bruker.Tilpasset én bruker.Kan installeres av alle brukere.


API

Aktiver EasyWebshop API under Innstillinger > Moduler > Easywebshop API ved hjelp av aktiveringskoden MODA.
Hvis EasyWebshop API ikke vises i menyen, naviger til Innstillinger > Flere alternativer > Brukeropplevelsesnivå og endre brukeropplevelsesnivået til Ekspert.

API Module

Aktiver API-et kun hvis du skal bruke det. Av sikkerhetsgrunner bør API-et deaktiveres når det ikke er i bruk.

API-endepunktKopiere
https://easywebshop.com/apiBruk alltid https-versjonen! Autentisering over ren tekst http kan føre til at ditt API-token blir lekket.
Ikke inkluder www-underdomenet.
?format=xml
Endre utdataformatet fra JSON til XML.
?pretty=1
Pen utskrift for forbedret menneskelig lesbarhet. Fjern dette for å spare båndbredde i automatiserte systemer.

Når du bruker flere parametere, skill dem med & (ampersand). For eksempel: ?format=xml&pretty=1.
På kommandolinjen, escape ampersander slik: ?format=xml\&pretty=1.

Bruk vårt API med forsiktighet og spør eller oppdater kun det du trenger. Ikke bruk «polling» hvis API Push-funksjonen kan brukes i stedet. Begrensninger er innført for å forhindre sløsing med serverressurser.

Autentisering

Klikk på Legg til-knappen for å opprette et API-token og velg de ønskede tillatelsene for dette tokenet.

API Permissions

For økt sikkerhet, velg kun tillatelser som er strengt nødvendige. Trekk tilbake tillatelser når de ikke lenger er nødvendige.

Etter lagring, kopier ditt API-token for bruk i din applikasjon eller for å sende det til en utvikler. Du kan kun gjøre dette én gang: hvis du mister ditt API-token, må du slette det og opprette et nytt.

API Token

Bruk API-tokenet ditt med forsiktighet.
Ikke send API-tokenet ditt via en usikker kommunikasjonskanal som e-post eller WhatsApp. Vi anbefaler SimpleX Chat hvis du trenger å sende API-tokenet ditt til en utvikler. Ikke lagre API-tokenet ditt på en usikker enhet. Vi lagrer ikke API-tokenet ditt i det hele tatt, kun en hash av det.

  • Forespørsel
  • Svar
  • 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" } Henter API-status curl -D - https://easywebshop.com/api/status Lagrer responsen i en JSON-fil 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);
?>

Kopiere

I denne dokumentasjonen gir vi eksempler for curl og PHP. Moderne KI blir stadig bedre til å konvertere kode til andre programmeringsspråk som C, Java eller Python.

Kategorier

Visning av kategorier

GET /api/category
Henter alle kategorier
GET /api/category/[categoryName]
Henter alle produkter innenfor en bestemt kategori
Bruk kategorinavnet på nettbutikkens standardspråk
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" } } ] } } ] } Henter alle kategorier curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/category Henter alle produkter innenfor en bestemt kategori curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/category/Cocktails Henter alle kategorier i menneskeleselig JSON-format curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/category?pretty=1 Henter alle kategorier i menneskeleselig XML-format 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>

Kopiere

Kategorier kan kun vises. Det finnes ingen API-implementasjon for å opprette, redigere og slette kategorier, ettersom disse funksjonene sjelden brukes og ville skapt en ytterligere angrepsflate. Håndtering av kategorier kan gjøres via webgrensesnittet.

Varer

Visning av produkter

EasyWebshop følger formatet schema.org/Product når det er mulig.

GET /api/product
Henter de siste 1000 produktene
GET /api/product?offset=1000
Henter 1000 produkter med en forskyvning på 1000
GET /api/product/86400
Henter produkter som ble lagt til eller endret i løpet av de siste 24 timene
GET /api/product/[productID]
Søker etter et produkt med produktID, skiller mellom store og små bokstaver
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" } } ] } Henter de siste 1000 produktene curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/product Henter 1000 produkter med en forskyvning på 1000 curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/product?offset=1000 Henter produkter som ble lagt til eller endret i løpet av de siste 24 timene curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/product/86400 Søker etter et produkt med produktID, skiller mellom store og små bokstaver 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>

Kopiere

Importering av produkter

POST /api/product
Ved suksess vil 201 Created bli returnert
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>

Kopiere

De finner en detaljert forklaring på alle produktfelt på dokumentasjonssiden for Grunnleggende produktadministrasjon og Avansert produktadministrasjon.

ParameterTypeBeskrivelse
productIDstringVare. En unik og brukerdefinert identifikator for produktet.
Unngå spesialtegn og dupliserte eller tvetydige identifikatorer. Ved redigering av et produkt brukes produktID som identifikator. ProduktID kan kun endres via produktadministrasjonen.
parent_productIDstringHvis De ønsker at dette produktet skal være en produktvariant, angi her produktID-en til hovedproduktet. Varianter fungerer som egne produkter. De er koblet til et hovedprodukt i stedet for en kategori, og er derfor ikke synlige i produktlister. Undervarianter anbefales ikke og kan kun angis via produktadministrasjonen.
categorystringNavnet på kategorien på nettbutikkens standardspråk. Ikke aktuelt for produktvarianter.
name:langstringNavn. De kan angi navn og beskrivelser for alle språk, selv om de ikke er aktivert i nettbutikken.
Tilgjengelige språk (ISO 639-1): cs, da, de, el, en, es, fi, fr, it, ja, ko, nl, no, pl, pt, ro, ru, sv, tr, zh
description:langstringBeskrivelse
Tilgjengelige språk (ISO 639-1): cs, da, de, el, en, es, fi, fr, it, ja, ko, nl, no, pl, pt, ro, ru, sv, tr, zh
pricestringPris. Kan være desimaltall, heltall, tomt eller en streng.
stockintegerPå lager. La stå på 0 for ubegrenset lagerbeholdning eller deaktivert lagerstyring.
statusstringStatus
Available, Available but not online, Pre-order, Sold Out, Invisible, Customers only, Price visible for customers, Choose property, Hide status, custom0, custom1, ..., custom9
image:nostringInkluder en bilde-URL for å laste opp produktbilder. Det første bildet er hovedbildet, de neste fire er underbilder. Hvis et produktbilde allerede eksisterer, vil det bli erstattet. Etter opplasting vil bildene skaleres proporsjonalt i henhold til nettbutikkens innstillinger, miniatyrbilder vil bli opprettet automatisk, og bildet vil bli synkronisert til flere filservere. Sørg for at hvert bilde har en gyldig URL, en maksimal filstørrelse på 25 MB, en gyldig filtype (.jpg, .jpeg, .png eller .gif) og en gyldig MIME-type (image/jpeg, image/jpg, image/png, image/gif).
Opplasting av bilder tar tid og serverressurser. Unngå å erstatte de samme bildene ved oppdatering av produkter. Hvis De opplever tidsavbrudd (time-outs), last opp et begrenset antall produkter i puljer på 25 bilder hver.1 - 5
thumbnail:nostringMiniatyrbilder genereres automatisk. Dette er en skrivebeskyttet parameter.
weightdecimalVekt. SI-enhet kilogram.
vat_codeintegerSkattesatser. MVA-sats angitt i fakturainnstillinger.
0, 1, 2
conditionstringTilstand
New, Used, Refurbished
gtinstringEAN code
old_pricestringGammel pris
unitsstringEnheter
mpqintegerMinimumskjøp
purchase_pricedecimalKjøpesum
promobooleanMarkedsfør dette produktet på hjemmesiden til nettbutikken min. Ikke aktuelt for produktvarianter.
label_idintegerEtikett. La stå på 0 for ingen merkelapp. Ikke aktuelt for produktvarianter.
0 - 100
colorsstringFarger. Velg blant de 256 nettsikre fargenavnene på engelsk, atskilt med komma.
paramsstringProdukt tilpassing. Parametere har et spesielt format og angis best via produktadministrasjonsgrensesnittet. Når De har et eksempel, kan De kopiere det for importering.
reviewbooleanAnmeldelser. Aktiver eller deaktiver produktanmeldelser.
last_updatedatetimeSist brukt. Kun lesetilgang.

Disse seksjonene kan kun angis via administrasjonsgrensesnittet: tiered rates, kundegrupper, gavekort, reservasjoner, virtuelle produkter, filtre, varer som passer sammen.

Opptil 100 produkter kan importeres samtidig. Hvis De ønsker å importere flere produkter, kan De gjenta kommandoen hvert 5. minutt.

Redigering av produkter

De kan også redigere produkter ved hjelp av hurtigredigeringsfunksjonen, importfunksjonen og massehandlingsfunksjonen.

PUT /api/product
Ved suksess vil 200 OK bli returnert
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>

Kopiere

Hvis De ønsker å oppdatere produktlageret, oppdater kun feltene status og lagerbeholdning. Husk å angi passende produktstatus for situasjoner som Utsolgt eller Ubegrenset lager.

Opptil 100 produkter kan oppdateres samtidig. Hvis De ønsker å oppdatere flere produkter, kan De gjenta kommandoen hvert 5. minutt.

Sletting av produkter

DELETE /api/product/[productID]
Ved suksess vil 204 No Content bli returnert
  • Forespørsel
  • Svar
  • 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);
?>

Kopiere

Kunder

Visning av kunder

EasyWebshop følger formatet schema.org/Person.

GET /api/customer
Henter de siste 1000 kundene
GET /api/customer?offset=1000
Henter 1000 kunder med en forskyvning på 1000
GET /api/customer/86400
Henter kunder som ble lagt til eller endret i løpet av de siste 24 timene
GET /api/customer/[email]
Henter en bestemt kunde via e-postadresse
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 } } ] } Henter de siste 1000 kundene curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/customer Henter 1000 kunder med en forskyvning på 1000 curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/customer?offset=1000 Henter kunder som ble lagt til eller endret i løpet av de siste 24 timene curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/customer/86400 Henter en bestemt kunde via e-postadresse 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>

Kopiere

Importering av kunder

Hver kunde mottar en e-post for å bekrefte e-postadressen.

POST /api/customer
Ved suksess vil 201 Created bli returnert
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>

Kopiere

Detaljert informasjon finnes på wikisiden for kundeadministrasjon.

ParameterTypeBeskrivelse
emailstringE-postadresse. E-postadressen er den unike identifikatoren for kunden.
givenNamestringFornavn
familyNamestringEtternavn
brandstringBedrift
vatIDstringMVA-nummer
knowsLanguagestringSpråk (ISO 639-1): cs, da, de, el, en, es, fi, fr, it, ja, ko, nl, no, pl, pt, ro, ru, sv, tr, zh
addressCountrystringLand (ISO_3166-1)
addressLocalitystringBy
addressRegionstringProvinsen. Ikke påkrevd for de fleste land, og utelates ofte for å gjøre kassesiden kortere.
postalCodestringPostnummer. Ikke alle land har postnumre.
streetAddressstringGate
houseNostringHusnummer. Noen steder har ikke husnumre.
telephonestringTelefonnummer
memberOfstringKundegruppe
statusstringStatus
Unconfirmed, Confirmed, Denied
deniedbooleanNektet
0 - 1
newsletterbooleanMotta nyhetsbrev. Kun kunder selv kan aktivere dette.
registration_datedatetimeRegistreringsdato. Kun lesetilgang.

Opptil 100 kunder kan importeres samtidig. Hvis De ønsker å importere flere kunder, kan De gjenta kommandoen hvert 5. minutt.

Redigering av kunder

Merk at kun kunder kan oppdatere sine data som et sikkerhetstiltak. De kan oppdatere kundegruppen og kundestatusen (tillatt eller nektet).

PUT /api/customer
Ved suksess vil 200 OK bli returnert
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>

Kopiere

Opptil 100 kunder kan oppdateres samtidig. Hvis De ønsker å oppdatere flere kunder, kan De gjenta kommandoen hvert 5. minutt.

Sletting av kunder

DELETE /api/customer/[email]
Ved suksess vil 204 No Content bli returnert
  • Forespørsel
  • Svar
  • 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);
?>

Kopiere

Bestillinger

Visning av ordrer

EasyWebshop følger formatet schema.org/Order når det er mulig.

GET /api/order
Henter de siste 1000 ordrene
GET /api/order?offset=1000
Henter 1000 ordrer med en forskyvning på 1000
GET /api/order/86400
Henter ordrer som ble lagt inn eller endret i løpet av de siste 24 timene
GET /api/order/[orderNumber]
Henter en bestemt ordre via ordrenummer
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" } } ] } Henter de siste 1000 ordrene curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/order Henter 1000 ordrer med en forskyvning på 1000 curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/order?offset=1000 Henter ordrer som ble lagt inn eller endret i løpet av de siste 24 timene curl -H "Authorization: Bearer YOUR_API_TOKEN" -D - https://easywebshop.com/api/order/86400 Henter en bestemt ordre via ordrenummer 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>

Kopiere

Importering av ordrer

På grunn av den komplekse natur til kasseprosessen, kan ordrer kun legges inn ved å plassere ordren i nettbutikken eller ved å bruke POS-appen.

Redigering av ordrer

PUT /api/order
Ved suksess vil 200 OK bli returnert
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>

Kopiere

Detaljert informasjon finnes på wikisiden for ordrehåndtering.

ParameterTypeBeskrivelse
orderNumberstringOrdrenummer. Ordrenummeret eller ordrekoden er den unike identifikatoren for ordren.
statusstringStatus
ParameterBeskrivelse
OrderReceivedBestilling mottatt
OrderPaymentDueVenter på betaling
OrderPaymentReceivedMottatt betaling
OrderProcessingI ordrebehandling
OrderInTransitVarene er sendt
OrderDeliveredFullført
OrderCancelledAnnulert
referencestringDette er en referanse for interne formål som kan angis for hver ordre. Referansen vil ikke vises til kunden.
mail_customerbooleanSend en e-postvarsling til kunden.

Opptil 100 ordrer kan oppdateres samtidig. Hvis De ønsker å oppdatere flere ordrer, kan De gjenta kommandoen hvert 5. minutt.

Sletting av ordrer

DELETE /api/order/[orderNumber]
Ved suksess vil 204 No Content bli returnert
  • Forespørsel
  • Svar
  • 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);
?>

Kopiere

Merk at ved sletting av ordrer eller endring av status til Kansellert, vil lagerbeholdningen bli lagt tilbake (hvis produktene fortsatt eksisterer), og produkter vil endre status fra Utsolgt til Tilgjengelig der det er aktuelt. Når en kansellering angres, vil lagerbeholdningen trekkes fra produktene igjen.

Begrensninger

EasyWebshop er optimalisert for redundans og ekstremt raske lastetider for nettsteder. Bak kulissene finnes det en serverklynge som er geografisk spredt over flere datasentre i ulike land. Dette medfører en kostnad: når data og filer legges til og oppdateres, må de synkroniseres over serverklyngen, og hurtigbuffere må tømmes på alle servere. Bilder må komprimeres og skaleres til ulike formater for zoom-bilder og miniatyrbilder, SEO-filnavn må kontrolleres og opprettes, og all data må synkroniseres over distribuerte filservere og sikkerhetskopiservere.

Hensikten med begrensningene er å forhindre at én enkelt bruker overbelaster systemene våre, noe som ville skade andre brukere.

API-forespørsler300 forespørsler per 24 timer
Visning av elementer1000 elementer per forespørsel
Importering av elementer100 elementer per forespørsel
Oppdatering av elementer100 elementer per forespørsel
Opplasting av bilder100 bilder per forespørsel (25 Megabyte per image)

Høye API-grenser

Under normale omstendigheter bør standardgrensene være tilstrekkelige. Kun for nettbutikker med et svært stort antall produkter kan grensene utgjøre en hindring.

Under Innstillinger > Flere alternativer > EasyWebshop API kan funksjonen Høye API-grenser aktiveres. Dette gjør det mulig å kjøpe ekstra API-forespørsler.

API Push

API Push sender en HTTPS-forespørsel med JSON- eller XML-data. Disse dataene kan "fanges opp" av en server og behandles.

Hvis du kun ønsker å motta e-post om bestillingene dine til en ekstra destinasjon, bruk administratorkontoer. Du kan også motta øyeblikkelige varsler for innkommende bestillinger.

Under Innstillinger > Moduler > EasyWebshop API > API Push, skriv inn URL-en til applikasjonen din og lagre. Etter lagring vil en Test-knapp vises, som lar deg sende en eksempelforespørsel. For å deaktivere, la URL-feltene stå tomme og lagre.

API Push

Customer PushOrder Push
En HTTPS-forespørsel sendes når en kunde oppretter en konto, og inneholder all informasjon om kunden, tilsvarende Kunde-API-et.En HTTPS-forespørsel sendes når en kunde legger inn en bestilling i nettbutikken, eller når en bestilling plasseres via POS. Denne forespørselen inneholder alle data om bestillingen, de kjøpte produktene og informasjon om kunden, tilsvarende Bestillings-API-et.


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

?>

Kopiere

Tilkoblinger

Koblinger er små nettapplikasjoner som kjører på sin egen server og har sin egen URL. De kan installeres av alle nettbutikker, og koden deres kan dermed gjenbrukes av alle EasyWebshop-brukere.

Under Innstillinger > Moduler > EasyWebshop API > Koblingstokener, klikk på Legg til-knappen for å opprette et nytt API-koblingstoken. Du må oppgi URL-en til koblingen.

Forsikre deg om at du oppretter et API-koblingstoken og ikke et vanlig API-token.

API Connections

Typene koblinger er:
Leveringstjeneste, HTML-widget, Faktura, Produktstrøm, Betalingstjenesteleverandør.

Koblinger har vanligvis et antall filer:

FileBeskrivelse
settings.xmlDette er konfigurasjonsfilen for koblingen.
name
Navnet på koblingen. Bruk kun store og små bokstaver, tall og understreker. Dette navnet brukes som en identifikator.
logo
Filnavnet til en logo i koblingsmappen.
type
Koblingstype, velg mellom:
ds (delivery service), html (HTML widget), invoice, productfeed, psp (Payment Service Provider)
url
URL-en der index.php-filen er lagret.
parameter
Fem valgfrie parametere kan angis av forhandleren ved installasjon eller redigering av koblingen. For eksempel: API-tokenet til en PSP kan angis her av forhandleren.
easywebshop.phpDette er filen som kobler til EasyWebshop API-et.
Angi ditt API-koblingstoken (ikke et vanlig API-token) i denne filen.
index.phpDette er hovedfilen og den første filen som aksesseres når koblingen brukes. Ved bruk av en leveringstjeneste sendes GET-feltene med kundens adresse til denne filen. Ved bruk av en PSP sendes POST-feltene for bestillingen til denne filen.
report.phpDenne filen brukes ved PSP og faktura, og blir vanligvis forespurt i bakgrunnen av PSP-en for å sende oppdateringer om betalingsstatus. Denne filen oppdaterer deretter bestillingsstatusen i nettbutikken til Betaling mottatt.

For å gjøre det enkelt å opprette nye koblinger, har vi holdt eksemplene nedenfor så enkle og direkte som mulig.

Leveringstjeneste

Bruk eksemplet nedenfor for å opprette koblinger til leverings- eller transporttjenester.

Koblingen må installeres av forhandleren, og fraktmetoder må kobles til ved å velge dem.

  1. Kunden er på betalingssiden og velger en fraktmetode. Fordi koblingen din er knyttet til en fraktmetode, utløser dette et popup-vindu med en iframe som peker til din index.php-fil.
  2. Kundens adressedata sendes som GET-variabler i spørrestrengen.
  3. I din kobling kan kunden velge en fraktmetode eller et hentested fra et kart.
  4. Din kobling sender fraktmetodens navn, pris, beskrivelse og en logo til vår bekreftelses-URL (/dsconfirm).
  5. Dataene legges til bestillingen, og kunden mottar en bekreftelse.
  • 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%; }
}

HTML-widget

Widgeter kan brukes for enkelt å sette inn HTML-, CSS- og JavaScript-kode. Brukeren kan velge på hvilke sider av nettstedet han eller hun ønsker å installere denne koden. Det er i bunn og grunn det samme som kopier og lim inn, men mer brukervennlig.

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

Faktura

Faktura fungerer på samme måte som Betalingstjenesteleverandør, men er fokusert på fakturabetaling der kundedata er nødvendig. Når typen er satt til psp, er kun de nødvendige dataene som en PSP trenger for å behandle en betaling tilgjengelige. Når typen er faktura, blir også kundedataene tilgjengelige.

Produktstrøm

Brukes for å hente produktdata, for eksempel til bruk på sammenligningssider.

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

Betalingstjenesteleverandør

Dette er måten å koble en Betalingstjenesteleverandør (PSP) til EasyWebshop.

Koblingen må installeres av forhandleren, og betalingsmetoder må kobles til ved å velge dem.

Etter at kunden har lagt inn en bestilling i nettbutikken, vises siden med Betal nå-knappen. Denne knappen sender inn et HTML-skjema.

  1. Din kobling mottar POST-dataene fra dette skjemaet, som inkluderer bestillingskoden. Med API-koblingstokenet kan du trygt hente bestillingsdataene som er nødvendige for å behandle betalingen.
  2. Koble til PSP-ens API og send bestillingsdataene.
  3. Hvis betalingen utføres vellykket, forespør betalingstjenesteleverandøren report.php-filen, som oppdaterer statusen på bestillingen i nettbutikken til Betaling mottatt.
  4. Kunden blir omdirigert til URL-en for betaling ok eller betaling mislyktes, avhengig av om betalingen var vellykket eller ikke.
  5. Hvis flere betalingsmetoder er angitt, kan kunden velge en annen betalingsmetode etter en mislykket betaling.
  • 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%; }
}

Kopiere

Installere koblinger

Endre URL-en i eksemplet til URL-en for din kobling. Vårt back-end-system leser automatisk din settings.xml-fil og ber brukeren om å oppgi nødvendige data.

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

Du kan legge til EasyWebshop-logoen på nettstedet ditt når koblingen er klar.

Logo

Feilsøking

Vi har finpusset EasyWebshop API-et for å gjøre det så enkelt som mulig. Vi tilbyr også en høykvalitets brukerstøttetjeneste med valgfri assistanse fra en utvikler for mer tekniske spørsmål. Hensikten med API-et er at du kan koble til andre plattformer og applikasjoner. Det er ikke sikkert de har et like brukervennlig API eller det samme supportnivået som vi tilbyr. Husk at når du kontakter oss, kan vi kun tilby hjelp for EasyWebshop og ikke for eksterne applikasjoner.

Hvis du trenger hjelp med programmeringsspråk, er det best å lese dokumentasjonssidene deres. De fleste er svært godt dokumentert. Du kan muligens bruke KI til å generere koden for koblingen din, men vennligst ikke forvent at vår support vil rette feil i koden din.

Under Summer of web design utvikler vi skreddersydde koblinger for våre brukere. Disse koblingene lages av erfarne utviklere. Hvis du trenger en kompleks kobling eller funksjon, er dette veien å gå.

Jeg får feilmeldingen: "Invalid data integrity hash"
  • Kontroller at API-koblingstokenet (ikke et vanlig API-token) er angitt i easywebshop.php-filen
  • Kontroller at URL-en er korrekt angitt
  • Kontroller at koblingen er installert av en nettbutikk

Nyttige lenker

Teknologiene vårt API bruker ble valgt av følgende årsaker:

  • Enkel å implementere
  • Sikker dataoverføring over HTTPS (ingen flere usikre FTP-tilkoblinger)
  • Sanntidskommunikasjon
  • Ingen ekstra servere eller databaser kreves
  • Skalerbar til større datamengder
  • Kan brukes med enhver plattform, rammeverk og programmeringsspråk
  • Ingen problemer med brannmurer
  • Benytter REST, JSON, JSON-LD, XML og HTTPS-standarder og generell praksis
  • Bearer-autentisering med tilpassede tillatelser
  • UTF-8-koding

Hvis du vil bruke curl i PHP, må du installere php-curl-utvidelsen. På Debian-baserte systemer (inkludert Ubuntu), bruk følgende kommando:

sudo apt-get install php-curl

Rull til toppen

Dette nettstedet bruker ikke sporingskapsler og selger ikke personopplysninger.SalgsvilkårPersonsvernerklæring 2009 ‑ 2025 EasyWebshop