Hallo zusammen, ich versuche grade mittels einem neu installierten Shops auf Basis von GX3 (neuste Version, grade runtergeladen) in die tiefen der API vorzudringen. Die Beschreibung zur API habe ich mir angeschaut und versucht mittels HTML und JS Code z.B. ein Produkt zu erstellen. Die Vorgehensweise ist mir grundsätzlich nicht fremd aber ich habe meine Schnittstellen immer mittels XHR Request bedient. Hat jemand zufällig ein Beispiel einer HTML Seite für mich parat ? Danke
Ich weiß ja nicht, wie deine XMLHttpRequest-Implementierungen aussieht, aber die API funktioniert in Regel ganz gut. Was genau ist denn das Problem?
Anlehnend an andere funktionierende würde ich es so machen: HTML Seite mit : HTML: <html> <head> <title>Shop API Test</title> <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript" charset="utf-8" src="init.js"></script> </head> <body> <form> <div> <a href="#" onclick="send();">Speichern & versenden</a> </div> </form> </body> </html> dann eine JS Datei mit: function send() { var obj = { "isActive": false, "sortOrder": 0, "orderedCount": 1, "productModel": "ABC123", "ean": "", "price": 16.7983, "discountAllowed": 0, "taxClassId": 1, "quantity": 998, "weight": 0, "shippingCosts": 0, "shippingTimeId": 1, "productTypeId": 1, "manufacturerId": 0, "isFsk18": false, "isVpeActive": false, "vpeID": 0, "vpeValue": 0, "name": { "en": "test article", "de": "Testartikel" }, "description": { "en": "[TAB:page 1] Test Product Description (Page 1) [TAB: Page 2] Test Product Description (Page 2)", "de": "[TAB:Seite 1] Testartikel Beschreibung (Seite 1) [TAB:Seite 2] Testartikel Beschreibung (Seite 2)" }, "shortDescription": { "en": "Test product short description.", "de": "Testartikel Kurzbeschreibung" }, "keywords": { "en": "", "de": "" }, "metaTitle": { "en": "", "de": "" }, "metaDescription": { "en": "", "de": "" }, "metaKeywords": { "en": "", "de": "" }, "url": { "en": "", "de": "" }, "urlKeywords": { "en": "test-article", "de": "Testartikel" }, "checkoutInformation": { "en": "", "de": "" }, "viewedCount": { "en": 0, "de": 32 }, "images": [ { "filename": "artikelbild_1_1.jpg", "isPrimary": false, "isVisible": true, "imageAltText": { "en": "", "de": "" } }, { "filename": "artikelbild_1_2.jpg", "isPrimary": false, "isVisible": true, "imageAltText": { "en": "", "de": "" } }, { "filename": "artikelbild_1_3.jpg", "isPrimary": false, "isVisible": true, "imageAltText": { "en": "", "de": "" } } ], "settings": { "detailsTemplate": "standard.html", "optionsDetailsTemplate": "product_options_dropdown.html", "optionsListingTemplate": "product_options_dropdown.html", "showOnStartpage": false, "showQuantityInfo": true, "showWeight": false, "showPriceOffer": true, "showAddedDateTime": false, "priceStatus": 0, "minOrder": 1, "graduatedQuantity": 1, "onSitemap": true, "sitemapPriority": "0.5", "sitemapChangeFrequency": "daily", "propertiesDropdownMode": "dropdown_mode_1", "startpageSortOrder": 0, "showPropertiesPrice": true, "usePropertiesCombisQuantity": false, "usePropertiesCombisShippingTime": true, "usePropertiesCombisWeight": false }, "addonValues": { "productsImageWidth": "0", "productsImageHeight": "0" } } console.log(obj); var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status === 200) { console.log(xhr.responseText); } else { alert("Load failed: " + xhr.statusText + " oh oh..."); } } }; xhr.onerror = function() { alert("Fehler:\n" + xhr.status + ' - ' + xhr.statusText); }; xhr.open("POST", "http://testshop.qimp.com/api.php/v2/products", true); xhr.withCredentials = true; xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); xhr.setRequestHeader("Access-Control-Allow-Origin", "*"); xhr.setRequestHeader("Authorization", 'Basic ' + btoa('jgr@schumannsolutions.de:ARyHUjUN')); xhr.send(obj); } Haut aber nicht hin. Auch wenn ich die Credentials veränder oder wegnehme sind es immer andere Fehler. Ich habe das meiner Meinung nach auch mal JSON konform aufgebaut. Und zwar so: HTML: function send() { $.ajax({ url: "http://testshop.qimp.com/api.php/v2/products", type: "POST", data: { "isActive": false, "sortOrder": 0, "orderedCount": 1, "productModel": "ABC123", "ean": "", "price": 16.7983, "discountAllowed": 0, "taxClassId": 1, "quantity": 998, "weight": 0, "shippingCosts": 0, "shippingTimeId": 1, "productTypeId": 1, "manufacturerId": 0, "isFsk18": false, "isVpeActive": false, "vpeID": 0, "vpeValue": 0, "name": { "en": "test article", "de": "Testartikel" }, "description": { "en": "[TAB:page 1] Test Product Description (Page 1) [TAB: Page 2] Test Product Description (Page 2)", "de": "[TAB:Seite 1] Testartikel Beschreibung (Seite 1) [TAB:Seite 2] Testartikel Beschreibung (Seite 2)" }, "shortDescription": { "en": "Test product short description.", "de": "Testartikel Kurzbeschreibung" }, "keywords": { "en": "", "de": "" }, "metaTitle": { "en": "", "de": "" }, "metaDescription": { "en": "", "de": "" }, "metaKeywords": { "en": "", "de": "" }, "url": { "en": "", "de": "" }, "urlKeywords": { "en": "test-article", "de": "Testartikel" }, "checkoutInformation": { "en": "", "de": "" }, "viewedCount": { "en": 0, "de": 32 }, "images": [ { "filename": "1.jpg", "isPrimary": false, "isVisible": true, "imageAltText": { "en": "", "de": "" } } ], "settings": { "detailsTemplate": "standard.html", "optionsDetailsTemplate": "product_options_dropdown.html", "optionsListingTemplate": "product_options_dropdown.html", "showOnStartpage": false, "showQuantityInfo": true, "showWeight": false, "showPriceOffer": true, "showAddedDateTime": false, "priceStatus": 0, "minOrder": 1, "graduatedQuantity": 1, "onSitemap": true, "sitemapPriority": "0.5", "sitemapChangeFrequency": "daily", "propertiesDropdownMode": "dropdown_mode_1", "startpageSortOrder": 0, "showPropertiesPrice": true, "usePropertiesCombisQuantity": false, "usePropertiesCombisShippingTime": true, "usePropertiesCombisWeight": false }, "addonValues": { "productsImageWidth": "0", "productsImageHeight": "0" } }, dataType: "json", success: function (result) { switch (result) { case true: processResponse(result); break; default: resultDiv.html(result); } }, error: function (xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); } }); }; dann bekomme ich error code 200. Was wirklich helfen würde währe eine Vorlage die funktioniert und die nur noch angepasst wird. Danke
Bitte benutzt für so lange Texte und Codes die Code-Box (das kleine "+" in der Menüleiste) Das ist besser lesbar, man muss nicht ewig scrollen und es schleichen sich keine Leerzeichen oder Smileys ein.
Sollte auch so sein aber in der Console des Chrome wird nach der Meldung 200 auch noch eine andere Meldung mit der ich nichts anfangen kann. Ich hab mal die Fehlermeldungen rangehängt. Aber hat denn keiner eine funktionierende Vorlage ? Ich kann doch nicht der einzige sein der so etwas vorhat.
Deine Bilder funktionieren leider nicht. Lad die mal über die Datei Hochladen Funktion hier im Forum hoch.
Ich würde an deiner Stelle mal folgendes machen. das sieht umständlich aus.: Erstmal mit einem einfachen Tool ein paar Requests zusammensetzen, die funktionieren, und dann diese erprobten Requests nehmen und dann erst in eigenen Code giessen. Gut um ein wenigs auszuprobieren ist zb "Postman", gibts als Chrome Erweiterung gratis im Store.
So, noch mal auf Null gesetzt. So langsam bin ich am Verzweifeln, denn das klappt alles nicht. Weis jemand in diesem Forum ob es einen User gibt, der so eine Anforderung gegen Bezahlung programmieren kann? Wie gesagt, ich brauche nur einen Denkanstoß und ein funktionierendes Template das mir vielleicht eine Adresse importieren kann. Alles weitere kann ich mir daraus ableiten. Die Zeit die ich bis jetzt in erfolglose Versuche investiert habe kommt mir wahrscheinlich teurer als jemanden zu finden der mir so eine Vorlage programmiert.
@sven_schumann hast du nicht schon in einem anderen Post von einem gelungenen Verbindung berichtet? Ich habe das gerade mal mit Postman getestet und es klappt wunderbar. Shop- Version 3.3.1.0
Hallo michael_klausner nicht ganz. In meiner HTML/JS Vorlage habe ich eine 200 Statusmeldung zurückbekommen. Danach bekam ich aber eine Fehlermeldung. Diese sind auf den Bildern im post #10 zu sehen. Vieleicht sollte ich auch dazu sagen, das ich kein reiner Programmierer bin. Wir setzten eine DAM Software mit der unsere Kunden ihre Daten, dies sind überwiegend Bilder, verwalten und mit zusätzlichen Informationen füllen können. Diese können anderen Parteien ( z.b. Herstellen ) mittels eines Uploadlinks zur Verfügung gestellt und weiterbearbeitet bzw. interpretiert werden. Hierzu haben wir von dem Hersteller unserer DAM Software eine API Beschreibung und eine Testvorlage bekommen. Diese haben wir dann in HTML Templates eingefügt, so das auf einfache weise Daten über Input Felder oder selectboxen in das System kommen. Diese werden dann mittels post und XMLHTTPRequest an die API übertragen und eingepflegt. Hierbei ist es unabhängig ob die Daten in ein Array oder einer Form stehen. Genau so hatte ich es hier auch überlegt, der post wo ich meine erste Überlegung, angelehnt an unsere Datenübermittlung geschrieben hatte ist leider nicht mehr vorhanden. Dort war der Quellcode drin. Mit Postman habe ich noch nicht gearbeitet, ohne das nötige Hintergrundwissen ist es schwer dort reinzukommen. Vieleicht bin ich auch visuell veranlagt. Mittels einer funktionierenden HTML/JS Vorlage hätte ich wahrscheinlich weniger Probleme.
Lade dir Postman und teste das mal ganz in Ruhe... Postman ist sozusagen Visuell. Doku zur Schnittstelle => (Link nur für registrierte Nutzer sichtbar.) Ich habe auch vor mich da einzuarbeiten, aber bisher noch keine Zeit dazu gehabt, aber einfach mal das Beispiel (Link nur für registrierte Nutzer sichtbar.) mit Postman probiert.. klappt auf Anhieb Dort kannst du dir auch ganz bequem die codierte Basic Authorization herausfischen, denn soweit ich gesehen habe, hast du die nicht benutzt.
Mahlzeit zusammen! Da ich mich kaum mit diesen Sprachen und dem Background auskenne, ich aber sehr gerne alle Vorteile der API nutzen möchte, habe ich eine Frage: Gibt es hier im Forum willige Programmierer, die gerne gegen eine Einrichtungspauschale (je Lieferant) dies für mich übernehmen? Es geht um den zyklischen Import der Daten des Lieferanten und Bestellungen über die API?! Vielen Dank im Voraus! Mit freundlichen Grüßen Sebastian
Dazu solltest du bitte ein eigenes Thema aufmachen. sonst findet das hier doch keiner und hat auch nix mit dem eigentlichem Problem zu tun.