Frage zum Datenimport mittels API

Thema wurde von sven_schumann, 5. Dezember 2016 erstellt.

  1. sven_schumann

    sven_schumann Mitglied

    Registriert seit:
    6. September 2016
    Beiträge:
    13
    Danke erhalten:
    0
    Danke vergeben:
    1
    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
     
  2. Developer

    Developer Erfahrener Benutzer

    Registriert seit:
    7. November 2012
    Beiträge:
    2.885
    Danke erhalten:
    617
    Danke vergeben:
    113
    Ich weiß ja nicht, wie deine XMLHttpRequest-Implementierungen aussieht, aber die API funktioniert in Regel ganz gut.

    Was genau ist denn das Problem?
     
  3. sven_schumann

    sven_schumann Mitglied

    Registriert seit:
    6. September 2016
    Beiträge:
    13
    Danke erhalten:
    0
    Danke vergeben:
    1
    #3 sven_schumann, 5. Dezember 2016
    Zuletzt von einem Moderator bearbeitet: 6. Dezember 2016
    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
     
  4. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    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.
     
  5. sven_schumann

    sven_schumann Mitglied

    Registriert seit:
    6. September 2016
    Beiträge:
    13
    Danke erhalten:
    0
    Danke vergeben:
    1
    Danke,
    hab ich nicht gewusst werde es nächstes mal so machen.
     
  6. Wilken (Gambio)

    Wilken (Gambio) Erfahrener Benutzer

    Registriert seit:
    7. November 2012
    Beiträge:
    18.737
    Danke erhalten:
    7.309
    Danke vergeben:
    2.208
    Ohne das ich das jetzt alles analyisert hab: HTTP Status 200 ist "OK"...
     
  7. sven_schumann

    sven_schumann Mitglied

    Registriert seit:
    6. September 2016
    Beiträge:
    13
    Danke erhalten:
    0
    Danke vergeben:
    1
    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.
    [​IMG]
    [​IMG]

    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.
     
  8. sven_schumann

    sven_schumann Mitglied

    Registriert seit:
    6. September 2016
    Beiträge:
    13
    Danke erhalten:
    0
    Danke vergeben:
    1
    Hab ich noch vergessen
    [​IMG]
     
  9. Wilken (Gambio)

    Wilken (Gambio) Erfahrener Benutzer

    Registriert seit:
    7. November 2012
    Beiträge:
    18.737
    Danke erhalten:
    7.309
    Danke vergeben:
    2.208
    Deine Bilder funktionieren leider nicht. Lad die mal über die Datei Hochladen Funktion hier im Forum hoch.
     
  10. sven_schumann

    sven_schumann Mitglied

    Registriert seit:
    6. September 2016
    Beiträge:
    13
    Danke erhalten:
    0
    Danke vergeben:
    1
  11. Wilken (Gambio)

    Wilken (Gambio) Erfahrener Benutzer

    Registriert seit:
    7. November 2012
    Beiträge:
    18.737
    Danke erhalten:
    7.309
    Danke vergeben:
    2.208
    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.
     
  12. sven_schumann

    sven_schumann Mitglied

    Registriert seit:
    6. September 2016
    Beiträge:
    13
    Danke erhalten:
    0
    Danke vergeben:
    1
    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.
     
  13. Anonymous

    Anonymous Mitglied

    Registriert seit:
    7. November 2016
    Beiträge:
    17
    Danke erhalten:
    1
    Danke vergeben:
    1
    @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
     
  14. sven_schumann

    sven_schumann Mitglied

    Registriert seit:
    6. September 2016
    Beiträge:
    13
    Danke erhalten:
    0
    Danke vergeben:
    1
    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.
     
  15. Anonymous

    Anonymous Mitglied

    Registriert seit:
    7. November 2016
    Beiträge:
    17
    Danke erhalten:
    1
    Danke vergeben:
    1
    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.
     
  16. Bastiii

    Bastiii Neues Mitglied

    Registriert seit:
    24. Juli 2018
    Beiträge:
    1
    Danke erhalten:
    0
    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
     
  17. Dennis (MotivMonster.de)

    Dennis (MotivMonster.de) G-WARD 2013/14/15/16

    Registriert seit:
    22. September 2011
    Beiträge:
    30.984
    Danke erhalten:
    6.096
    Danke vergeben:
    1.079
    Beruf:
    Mann für alles :)
    Ort:
    Weilburg
    Dazu solltest du bitte ein eigenes Thema aufmachen. sonst findet das hier doch keiner und hat auch nix mit dem eigentlichem Problem zu tun.