Autor | Zpráva | ||
---|---|---|---|
Vilak Profil |
#1 · Zasláno: 6. 7. 2020, 22:02:21
Dobrý den,
momentálně mám problém s vkládáním produktu a API dokumentace webarealu mi moc nepomohla. Moc nechápu 2 věci: 1) Jak vložit description tak, abych do něj mohl vkládat HTML? Podle všeho je nutné HTML zapsat v JSONu, ale jak je to myšleno? I když jsem se snažil HTML konvertovat do JSONu, tak mi to nešlo (viz kód). Jedná se mi třeba o to, abych proměnnou "popis" vložil do description (proměnnou z řádku 26 vložil do 72). Chyba: string(215) "{"http_status":500,"message":"It seems that you did not use to correct body in your request. It is necessary to use json object. For more information look at our documentation: https:\/\/webareal.docs.apiary.io\/#"}" HLAVNÍ OTÁZKA: 2) Jak fungují parametry/vlastnosti produktu? Viz řádek 77-80. Jak můžu vložit ke konkrétnímu produktu konkrétní vlastnosti? U vás v API dokumentaci (webareal.cz) jsem toho moc nenašel, ani popisy tam nemáte, co vlastně co znamená (tedy by nebylo špatné se inspirovat třeba od dokumentace Shoptetu, který to má zpracované velmi dobře). Jak tedy můžu vložit do produktu nějakou vlastnost/parametr? Chyba: string(140) "{"http_status":500,"message":"Some fields are not supported: Z\u00e1ruka, Pr\u016fm\u011br \u0159ezn\u00e9ho n\u00e1stroje, Typ, n\u011bco"}" Pokud dám description bez HTML a odstraním vlastnosti parametru, produkt bez problémů přidám. Dále mám otázky k vlastnostem: 3) Co když budu chtít přidat parametr, který ještě neexistuje? Musím ho prvně vytvořit přes API/ručně? 4) Co když budu chtít přidat hodnotu parametr, parametrj iž existuje, ale hodnota nikoli? Bude to problém? 5) Kde zjistím ID parametru? Předem děkuji za vyčerpávající odpovědi. <?php // prihlaseni $apiServer = 'xxx'; $apiKey = 'xxx'; $username = 'xxx@xxx.cz'; $password = 'xxx'; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://$apiServer/login", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "{\n \"username\": \"$username\",\n \"password\": \"$password\"\n}", CURLOPT_HTTPHEADER => array( "X-Wa-api-token: $apiKey", ), )); // popis produktu $popis = "<h3>TECHNICKÉ INFORMACE:</h3> <ul> <li>Plné dva břity PCD</li> <li>Tělo z vysoce pevné oceli</li> <li>Výška DIA zubu 4,5 mm</li> <li>úhel axiální stopky</li> <li>Ostřeno novou laserovou technologií</li> <li>Možnost naostření (max. 5-6 krát)</li> </ul> <p><img src=\"/fotky101456/dti 2+2.jpg\" alt=\"\" width=\"368\" height=\"79\" /></p> <h3>POUŽITÍ:</h3> <p>Určeno pro všechny CNC stroje a ruční frézky pro spojování a frézování<br />dřevotřískových desek, LTD, MDF a kompozitů na bázi dřeva, HPL.</p> <h3>VÝHODY:</h3> <p>Dokonalé zakončení zpracovávané hrany, tichý provoz.<br />Nezanechává škrábance na obrobku.</p> <h3>ŘEZNÉ PODMÍNKY:</h3> <p><img src=\"/fotky101456/dti 2+2 graf.jpg\" alt=\"\" width=\"399\" height=\"262\" /></p> <p><a href=\"https://www.stopkovefrezy.cz/fotky101456/fotos/_vyrp13_1677DT2--2.jpg\" target=\"_blank\" rel=\"noopener\"><img src=\"https://www.stopkovefrezy.cz/fotky101456/DT2%20(2).jpg\" width=\"200\" height=\"232\" caption=\"false\" /></a></p> <p><span> </span></p>"; //echo $popis; // debug // vlozeni jednoho produktu $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { $jsonResponse = json_decode($response); $token = $jsonResponse->token; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://$apiServer/product", CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_POST => TRUE, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "{ \"name\": \"Figar product 3\", \"secondName\": \"Dejvův produktík\", \"description\": \"$popis\", \"picture\": \"_vyr_11391170501570_tipo_VF_img.jpg\", \"news\": false, \"secondPrice\": 102541, \"price\": 254588, \"Záruka\": \"2 roky\", \"Průměr řezného nástroje\": \"60\", \"Typ\": \"A\", \"něco\": \"něco\", \"visibleOnHomepage\": false, \"productNumber\": \"figar346\", \"previewPicture\": \"_vyr_11391170501570_tipo_VF_img.jpg\", \"bestselling\": false, \"discounted\": false, \"measuringUnit\": \"\", \"discussionEnabled\": false, \"freeShippingEnabled\": false, \"bazaarEnabled\": false, \"amountInStock\": 10, \"availabilityId\": 1, \"weight\": 1, \"unsaleable\": false, \"hidden\": false, \"feedProductName\": \"Figar product 2\", \"feedDescription\": \"produktík ve feedu <3\", \"feedPicture\": \"_vyr_11391170501570_tipo_VF_img.jpg\", \"pictureMagnifier\": \"_vyr_11391170501570_tipo_VF_img.jpg\", \"vatLevel\": 1, \"categories\": [ \"10-0-0-0\", { \"code\": \"10-474-0-0\", \"primary\": true } ] }", CURLOPT_HTTPHEADER => array( "Authorization: Bearer $jsonResponse->token", "X-Wa-api-token: $apiKey" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); var_dump($response); } ?> |
||
Keeehi Profil |
#2 · Zasláno: 6. 7. 2020, 23:18:14
Nemůžeš jen tak plácnout kus HTML kódu do jsonu a očekávat, že to bude fungovat.
To co máš od řádku 69 si nejdříve vytvoř jako obyčejné asociativní pole. A pak na to pole použij funkci json_encode. To ti to pole převede na validní json string, který už budeš moct použít. |
||
Vilak Profil |
#3 · Zasláno: 7. 7. 2020, 11:05:18
Jasně. vkládání HTML jde dobře, zatím takto se produkt přidá:
<?php // prihlaseni $apiServer = 'x'; $apiKey = 'x'; $username = 'x'; $password = 'x'; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://$apiServer/login", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "{\n \"username\": \"$username\",\n \"password\": \"$password\"\n}", CURLOPT_HTTPHEADER => array( "X-Wa-api-token: $apiKey", ), )); $popis = "<h3>TECHNICKÉ INFORMACE:</h3> <ul> <li>Plné dva břity PCD</li> <li>Tělo z vysoce pevné oceli</li> <li>Výška DIA zubu 4,5 mm</li> <li>úhel axiální stopky</li> <li>Ostřeno novou laserovou technologií</li> <li>Možnost naostření (max. 5-6 krát)</li> </ul> <p><img src=\"/fotky101456/dti 2+2.jpg\" alt=\"\" width=\"368\" height=\"79\" /></p> <h3>POUŽITÍ:</h3> <p>Určeno pro všechny CNC stroje a ruční frézky pro spojování a frézování<br />dřevotřískových desek, LTD, MDF a kompozitů na bázi dřeva, HPL.</p> <h3>VÝHODY:</h3> <p>Dokonalé zakončení zpracovávané hrany, tichý provoz.<br />Nezanechává škrábance na obrobku.</p> <h3>ŘEZNÉ PODMÍNKY:</h3> <p><img src=\"/fotky101456/dti 2+2 graf.jpg\" alt=\"\" width=\"399\" height=\"262\" /></p> <p><a href=\"https://www.stopkovefrezy.cz/fotky101456/fotos/_vyrp13_1677DT2--2.jpg\" target=\"_blank\" rel=\"noopener\"><img src=\"https://www.stopkovefrezy.cz/fotky101456/DT2%20(2).jpg\" width=\"200\" height=\"232\" caption=\"false\" /></a></p> <p><span> </span></p>"; $produkt = array( "name" => "Figar product 4", "secondName" => "Dejvův produktík", "description" => "$popis", "picture" => "_vyr_11391170501570_tipo_VF_img.jpg", "news" => false, "secondPrice" => 102541, "price" => 254588, /*"Záruka" => "2 roky", "Průměr řezného nástroje" => "60", "Typ" => "A", "něco" => "něco",*/ "visibleOnHomepage" => false, "productNumber" => "figar346", "previewPicture" => "_vyr_11391170501570_tipo_VF_img.jpg", "bestselling" => false, "discounted" => false, "measuringUnit" => "", "discussionEnabled" => false, "freeShippingEnabled" => false, "bazaarEnabled" => false, "amountInStock" => 10, "availabilityId" => 1, "weight" => 1, "unsaleable" => false, "hidden" => false, "feedProductName" => "Figar product 2", "feedDescription" => "produktík ve feedu <3", "feedPicture" => "_vyr_11391170501570_tipo_VF_img.jpg", "pictureMagnifier" => "_vyr_11391170501570_tipo_VF_img.jpg", "vatLevel" => 1, "categories" => [ "10-0-0-0", [ "code" => "10-474-0-0", "primary" => true ] ] ); $produkt = json_encode($produkt); // vlozeni jednoho produktu $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { $jsonResponse = json_decode($response); $token = $jsonResponse->token; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://$apiServer/product", CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_POST => TRUE, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "$produkt", CURLOPT_HTTPHEADER => array( "Authorization: Bearer $jsonResponse->token", "X-Wa-api-token: $apiKey" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); var_dump($response); } ?> Takže díky moc Keehi! ;) Každopádně nemáte někdo zkušenosti s webarealem a s vkládáním parametrů produktů přes jejich API? stále na to nedokážu dojít. Jejich podpora už 5. den nereaguje. |
||
Časová prodleva: 8 dní
|
|||
Vilak Profil |
#4 · Zasláno: 15. 7. 2020, 12:08:59
Zdravím, mám tento script, který mi funguje. Každopádně funguje vždy jen na 1. produktu, u druhého a každého dalšího produktu to vypíše:
" } Warning: curl_exec() expects parameter 1 to be resource, null given in D:\xampp\htdocs\stopkovefrezy\api-add-products.php on line 67 Warning: curl_error() expects parameter 1 to be resource, null given in D:\xampp\htdocs\stopkovefrezy\api-add-products.php on line 68 Warning: curl_close() expects parameter 1 to be resource, null given in D:\xampp\htdocs\stopkovefrezy\api-add-products.php on line 70 Notice: Trying to get property 'token' of non-object in D:\xampp\htdocs\stopkovefrezy\api-add-products.php on line 76 Notice: Trying to get property 'token' of non-object in D:\xampp\htdocs\stopkovefrezy\api-add-products.php on line 91 string(46) "{"message":"Authorization header is required"}" Chyba bude v proměnné $curl, protože pokud $curl přejmenuji třeba na $curl1, funguje to. Kde je problém? Co je tu špatně? Chybné řádky jsou označeny "// CHYBA". Moc nevím, co mám dělat dál, i když jsem se to snažil hledat. api-add-products.php <?php // hlavicka include "include/help-functions.php"; include_once "include/login.php"; // vkladane produkty z include "get-csv-to-array/dgm.php"; // DGM frezovaci hlavy // include "get-csv-to-array/dte.php" // DTE frezovaci hlavy //vkladani produktu $i = 0; foreach (array_slice($products, 1) as $a) { if ($i >= 3) { break; } $i++; pr($a); $name = $a['name']; if ($tocivost == "S") { $img = "symetricke-zuby-freza.png"; } else { $img = "asymetricke-zuby-freza.png"; } $produkt = array( "name" => $name, "secondName" => $name, "description" => $a['description'], "picture" => $img, "news" => false, "secondPrice" => str_replace(",", ".", $a['cena_na_web']), // cenikova cena "price" => str_replace(",", ".", $a['cena_bez_dph']), // cena bez dph /*"Použití na materiál" => "Masiv", "Průměr řezného nástroje" => $a['prumer_nastroje'], // JAK VLOŽIT TENTO PARAMETR TŘEBA? "Typ" => "$a['typ'], "něco" => "něco",*/ "visibleOnHomepage" => false, "productNumber" => $a['kod'], "previewPicture" => $img, "bestselling" => false, "discounted" => false, "measuringUnit" => "", "discussionEnabled" => false, "freeShippingEnabled" => false, "bazaarEnabled" => false, "amountInStock" => 10, "availabilityId" => 1, "weight" => 0, "unsaleable" => false, "hidden" => false, "feedProductName" => $name, "feedPicture" => $img, "pictureMagnifier" => $img, "vatLevel" => 1, "categories" => [ // DOKONČIT! "10-0-0-0", // pred vkladanim je nutne mit kategorie vytvorene! [ "code" => "10-474-0-0", "primary" => true ] ] ); $produkt = json_encode($produkt); // vlozeni jednoho produktu $response = curl_exec($curl); // CHYBA $err = curl_error($curl); // CHYBA curl_close($curl); // CHYBA if ($err) { echo "cURL Error #:" . $err; } else { $jsonResponse = json_decode($response); $token = $jsonResponse->token; // CHYBA $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://$apiServer/product", CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_POST => TRUE, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "$produkt", CURLOPT_HTTPHEADER => array( "Authorization: Bearer $jsonResponse->token", // CHYBA "X-Wa-api-token: $apiKey" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); var_dump($response); } $response = null; $err = null; $curl = null; $produkt = null; } ?> login.php <?php // prihlaseni $apiServer = ''; $apiKey = ''; $username = ''; $password = ''; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://$apiServer/login", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "{\n \"username\": \"$username\",\n \"password\": \"$password\"\n}", CURLOPT_HTTPHEADER => array( "X-Wa-api-token: $apiKey", ), )); ?> |
||
blaaablaaa Profil |
#5 · Zasláno: 15. 7. 2020, 12:28:06
Vilak:
Na konci iterace nastavíte $curl na null. Takže v dalším opakování už se provádí curl_exec(null), což vyústí v chybu viz warningy a pak už se to sype celé ... |
||
Vilak Profil |
#6 · Zasláno: 15. 7. 2020, 12:34:45
Tak $curl mám nastavené na null v řádku 105, což je na konci foreach. Nebo kde by to mělo být?
|
||
blaaablaaa Profil |
#7 · Zasláno: 15. 7. 2020, 12:51:50
Vilak:
Pak doporučuji odkrokovat si to a uvidíte. |
||
Vilak Profil |
#8 · Zasláno: 15. 7. 2020, 13:05:59
To už právě nevím, jak.
|
||
blaaablaaa Profil |
#9 · Zasláno: 15. 7. 2020, 13:10:36
Tak to napíšu ještě jinak. V první iteraci je v $curl připojení, ve druhém opakování už tam máte nastavené null a snažíte se tedy posílat požadavek na null ...
|
||
tttttttt Profil * |
#10 · Zasláno: 15. 7. 2020, 13:35:51
Vilak:
Když ten kód proškrtám, vypadá takto: <?php $curl = curl_init(); // include_once "include/login.php"; foreach (array_slice($products, 1) as $a) { $response = curl_exec($curl); // CHYBA $err = curl_error($curl); // CHYBA curl_close($curl); // CHYBA $curl = curl_init(); $response = curl_exec($curl); curl_close($curl); $curl = null; } ?> |
||
Vilak Profil |
#11 · Zasláno: 15. 7. 2020, 13:41:02
Jasně, každopádně jak dál postupovat? I když jsem z toho udělal (v proškrkaném režimu) toto:
<?php foreach (array_slice($products, 1) as $a) { $curl = curl_init(); // include_once "include/login.php"; $response = curl_exec($curl); // CHYBA $err = curl_error($curl); // CHYBA curl_close($curl); // CHYBA $curl = curl_init(); $response = curl_exec($curl); curl_close($curl); $curl = null; } ?> |
||
Serg Profil |
#12 · Zasláno: 15. 7. 2020, 13:46:33
Příjde mi, že tam jsou zamíchané dva curl poždavaky. Jeden na získání tokenu a druhý pro vložení produktu, a oba se přepisují do stejné proměnné, nehledě na to že na konci každého průchodu foreach cyklu se ta proměna nastaví na null jak už bylo řečeno, takže na začátku cyklu by bylo potřeba opět zavolat curl_init pro nový požadavek.
Nestačí ten token získat jen jednou a při každém vkládání produktu použít ten samý token? To by pak stačilo řádky 67 - 76 přesunout do login.php (a vynechat else aby to dávalo smysl). |
||
Vilak Profil |
#13 · Zasláno: 15. 7. 2020, 14:15:48
Serg:
Super, to mi funguje. řádky 67-76 jsem dal do login.php a funguje to. a else jsem vynechal. Ještě mám v plánu z login.php udělat jen pomocnou funkci, kterou si zavolám. Řešení tu pak vložím, až to budu mít kompletní. Díky moc. |
||
Časová prodleva: 4 roky
|
0