Managed Server
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: eKomi API Plugin

    Parker

    • Mitglied
    • Beiträge: 135
    • Geschlecht:
    eKomi API Plugin
    am: 04. Juli 2017, 14:15:47
    Hi Freunde! Hat jemand von Euch eine Lösung gefunden, um den eigenen modified Shop an die API von eKomi anzubinden? Die selbst bieten nur ein Plugin für Gambio GX2 an und ansonsten habe ich noch ein Plugin für xt:c ergooglet. Im Forum hier habe ich nur Anleitungen für das JS-Widget gefunden.

    Letztlich würde ich mich freuen, wenn das System automatisch nach Versand der Bestellungen die Aufforderung zur Bewertung versenden würde, wie es bei Käufersiegelbewertungen und Trusted Shops funktioniert. Alternativ kann man wohl auch einen FTP-Upload machen. Müsste man wohl mit 'nem Script die Tabelle orders abfragen.
    Falls jemand hier eKomi nutzt, wie machst Du das?

    Linkback: https://www.modified-shop.org/forum/index.php?topic=37442.0
    Managed Server

    awids

    • Experte
    • Beiträge: 3.803
    • Geschlecht:
    Re: eKomi API Plugin
    Antwort #1 am: 04. Juli 2017, 14:31:27
    Hallo Parker,

    ich habe vor 2 Wochen für uns die eKomi-Integration per FTP/CSV-Upload umgesetzt. Hierzu habe ich ein Script geschrieben, welches per Cronjob aufgerufen wird und täglich um 16:00 Uhr eine CSV erstellt.

    Auf technischer Seite habe ich die Tabelle "orders" um die Spalte "ekomi_exported" erweitert und frage im Script nun nach "orders_status" (bei uns "3" für Versendet) und "ekomi_exported" mit Eintrag "0". Nach erfolgreicher CSV-Erstellung werden alle exportierten Bestellungen geupdatet (ekomi_exported = 1) und beim nächsten Export nicht mehr berücksichtigt.

    Für eKomi habe ich dann im Ordner /export einen Unterordner /ekomi angelegt und hierfür einen FTP-Zugang erstellt, den ich bei eKomi als Remote-Zugang eingegeben habe. Die CSVs werden nach Erstellung dann auch innerhalb von 4 Stunden abgeholt, verarbeitet und in einen weiteren (von eKomi angelegten) Unterorder /old verschoben.

    LG Alex

    Parker

    • Mitglied
    • Beiträge: 135
    • Geschlecht:
    Re: eKomi API Plugin
    Antwort #2 am: 19. Juli 2017, 14:18:46
    Ich hab es mal so gelöst, dass ich folgende Datei ins Root-Verzeichnis des Shops geworfen habe und diese via Cronjob aufrufe; daher auch der Output via "echo", da mein Hoster mir diesen per Mail zusendet.
    Vorher habe ich natürlich die Tabelle "orders" in der Datenbank um die Spalte "ekomi_exported", Typ boolean, Standardwert "0" erweitert.

    Code: PHP  [Auswählen]
    <?php
    // Export new orders to csv file for eKomi
    //  @author:    Parker
    //  @created:   2017-07-14

    include ('includes/configure.php');
    include ('includes/application_top.php');
    error_reporting(0);

    // Set parameters for CSV Export
    $csvfile = "temp/eKomi_orders/ekomi_orders.csv";
    $csvb = "\"";    // field bracket, e.g. \", or ', or none
    $csvd = ";";    // column devider, e.g. ; , \t
    $csvlb = "\n";   // line breack, e.g. \n

    // modified error reporting
    if(GB_ERROR_REPORTING) {
        error_reporting(-1);
    } else {
        error_reporting(0);
    }

    // Get orders from DB
    $sql_get = "SELECT
                `orders_id`,`customers_id`,`delivery_firstname`,`delivery_lastname`,`delivery_company`,`delivery_street_address`,`delivery_suburb`,`delivery_city`,`delivery_postcode`,`delivery_state`,`delivery_country`,`delivery_country_iso_code_2`,`customers_email_address`,`date_purchased`,`language`,`currency`
            FROM `orders`
            WHERE `ekomi_exported` = 0 AND `orders_status` = 3"
    ;

    $orders = mysql_query($sql_get) or die ("Sql error : " . mysql_error( ));
    $orders_array = xtc_db_fetch_array($orders);
    $orders_count = mysql_num_fields($orders);

    // Mark Orders in DB
    $orders_row = array();
    while($row = mysql_fetch_assoc($orders)) {
        $orders_row[] = $row;
    }
    $order_list = "Orders that have been exported to eKomi at ".date("d.m.Y H:i:s").":".$csvlb;
    $order_list .= "---------------------------------------------------------------".$csvlb;
    foreach ($orders_row as $ordertm) {
        $sql_write = "UPDATE `orders`
                        SET `ekomi_exported` = 1
                        WHERE `orders_id` = "
    .$ordertm['orders_id'];
        // echo($sql_write);
        $order_list .= "OderID:".$ordertm['orders_id']." | Name: ".$ordertm['delivery_firstname']." ".$ordertm['delivery_lastname']." | Firma: ".$ordertm['delivery_company']."\n";
        mysql_query($sql_write);
    }
    echo($order_list);

    // ### Make csv
    // create header
    $header_csv .= $csvb."orders_id".$csvb.$csvd;
    $header_csv .= $csvb."customers_id".$csvb.$csvd;
    $header_csv .= $csvb."delivery_firstname".$csvb.$csvd;
    $header_csv .= $csvb."delivery_lastname".$csvb.$csvd;
    // $header_csv .= $csvb."delivery_company".$csvb.$csvd;
    // $header_csv .= $csvb."delivery_street_address".$csvb.$csvd;
    // $header_csv .= $csvb."delivery_suburb".$csvb.$csvd;
    // $header_csv .= $csvb."delivery_city".$csvb.$csvd;
    // $header_csv .= $csvb."delivery_postcode".$csvb.$csvd;
    // $header_csv .= $csvb."delivery_state".$csvb.$csvd;
    $header_csv .= $csvb."delivery_country".$csvb.$csvd;
    $header_csv .= $csvb."delivery_country_iso_code_2".$csvb.$csvd;
    $header_csv .= $csvb."customers_email_address".$csvb.$csvd;
    $header_csv .= $csvb."date_purchased".$csvb.$csvd;
    $header_csv .= $csvb."language".$csvb.$csvd;
    $header_csv .= $csvb."currency".$csvb.$csvd;
    $header_csv .= $csvlb;
    // create CSV data
    $data = "";
    foreach ($orders_row as $ordertocsv) {
        $line = '';
        $line .= $csvb.$ordertocsv['orders_id'].$csvb.$csvd;
        $line .= $csvb.$ordertocsv['customers_id'].$csvb.$csvd;
        $line .= $csvb.$ordertocsv['delivery_firstname'].$csvb.$csvd;
        $line .= $csvb.$ordertocsv['delivery_lastname'].$csvb.$csvd;
        // $line .= $csvb.$ordertocsv['delivery_company'].$csvb.$csvd;
        // $line .= $csvb.$ordertocsv['delivery_street_address'].$csvb.$csvd;
        // $line .= $csvb.$ordertocsv['delivery_suburb'].$csvb.$csvd;
        // $line .= $csvb.$ordertocsv['delivery_city'].$csvb.$csvd;
        // $line .= $csvb.$ordertocsv['delivery_postcode'].$csvb.$csvd;
        // $line .= $csvb.$ordertocsv['delivery_state'].$csvb.$csvd;
        $line .= $csvb.$ordertocsv['delivery_country'].$csvb.$csvd;
        $line .= $csvb.$ordertocsv['delivery_country_iso_code_2'].$csvb.$csvd;
        $line .= $csvb.$ordertocsv['customers_email_address'].$csvb.$csvd;
        $line .= $csvb.$ordertocsv['date_purchased'].$csvb.$csvd;
        $line .= $csvb.$ordertocsv['language'].$csvb.$csvd;
        $line .= $csvb.$ordertocsv['currency'].$csvb.$csvd;
        $data .= trim($line) . "$csvlb";
    }
    $data = str_replace("\r" , "" , $data);
    if ($data == "") {
        $data = "No new orders found!\n";
    }
    // print "$header_csv\n$data";
    file_put_contents($csvfile, $header_csv.$data);

    ?>

    Funktionsweise:
    • liest die Tabelle orders aus (Felder definiert in Zeile 25), die noch nicht exportiert sind (ekomi_exported=0) und versendet wurden (orders_status=3, was je Shop variieren kann).
    • Setzt das Kennzeichen in der Spalte "ekomi_exported" auf 1, bei allen zuvor ausgelesenen Zeilen (Zeile 33ff).
    • Schreibt CSV inkl. Header (Zeile 50ff).
    Der Export sieht dann beispielsweise so aus:

    "orders_id";"customers_id";"delivery_firstname";"delivery_lastname";"delivery_country";"delivery_country_iso_code_2";"customers_email_address";"date_purchased";"language";"currency";
    "2068**";"57**";"Era****";"Dr****";"Deutschland";"DE";"Era***@***.com";"2017-07-16 14:02:45";"german";"EUR";
    "2068**";"57**";"Erö****";"Br****";"Deutschland";"DE";"kün***@***.de";"2017-07-16 14:46:31";"german";"EUR";
    "2068**";"57**";"Syi****";"Wa****";"Deutschland";"DE";"Syi***@***.de";"2017-07-16 20:16:06";"german";"EUR";
    "2068**";"57**";"Von****";"De****";"Deutschland";"DE";"häl***@***.de";"2017-07-17 08:25:17";"german";"EUR";

    Wichtig zu beachten ist, dass beim ersten Export alle jemals getätigten Bestellungen exportiert werden. Die CSV-Datei wird immer neu überschrieben.
    Man kann das schöner machen und eleganter programmieren, aber dafür würde ich viel zu lange brauchen. Ich hoffe nur, dass das jemandem hilft, der oder die das gleiche Problem hat.  :)
    @awids: Vielleicht magst Du ja mit uns teilen, wie Du es gemacht hast?
    3 Antworten
    3711 Aufrufe
    21. Juli 2009, 11:16:46 von mantis
    4 Antworten
    771 Aufrufe
    02. September 2022, 08:56:22 von Tomcraft
    1 Antworten
    3922 Aufrufe
    30. Januar 2013, 23:33:57 von jannemann
    0 Antworten
    1413 Aufrufe
    23. Mai 2017, 17:00:24 von awids