Shopware 6 API - Hilfe

Hallo alle,

ich bin gerade dabei mich mit der Shopware 6 API zu beschäftigen.

An diesem Punkt muss ich gleich dazu sagen, dass ich zwar etwas Ahnung von programmieren habe, nur mit Rest APIs hab ich bis jetzt nie was zu tun gehabt.

Ich habe mir nun für den Hauptbenutzer (der Admin) einen Zugangsschlüssel generiert.

Ansonsten hätte ich eigentlich keine Stelle in der Software gefunden, wo ich die API explizit aktivieren oder deaktivieren kann.

Um was es mir geht:

Ich möchte die Preise automatisch anpassen.

Bei Shopware 5 habe ich das automatisiert per Software direkt in der Datenbank gemacht.

Bei Shopware 6 scheint mir dies nicht mehr so leicht zu sein, vor allem da ich für jedes Produkt Staffelpreise habe.

Als Programmiersprache verwende ich VB.NET

Allerdings klappt bei mir schon die Authentifizierung nicht und ich bekomme folgenden Fehler:

„{“„errors“„:[{“„code“„:“„0"“,„„status““:„„404"“,“„title“„:“„Not Found“„,“„detail“„:“„No route found for \u0022GET https://www.phoenix-der-lebenskraft-b2b.at/api/v2/sales-channel-api/v2/0\u0022"“}]}"

Interessanterweise bekomme ich die gleiche Meldung, wenn ich lediglich die auf die API abzielende URL eingebe: https://www.phoenix-der-lebenskraft-b2b.at/api

Ich habe daher die Vermutung, dass es nicht am APIKey liegt, sondern die gesamte API generell nicht funktioniert.

Wem es interessiert, hier ist das VB.NET Programm, mit welchem ich die Preise ändern möchte…

https://www.phoenix-der-lebenskraft-b2b.at/ConsoleApp3.rar

Den API Key habe ich natürlich rausgenommen.

Vielleicht findet sich ja wer der mir hier helfen kann.

Lg Andreas

grundsätzlich das Vorgehen ja so:

  • Token erzeugen mit den Credentials (ist ist auf jeden Fall ein POST)
  • Dann alle Calls mit Hilfe des Tokens im Header

Der Link auf das Archiv führt zu einem 404.

LG

Servus und erstmal vielen herzlichen Dank für deine Antwort!

Ich spiele da wirklich schon eine Zeit herum und bekomme immer noch meinen 404 Error.

Ich bin mir daher nicht ganz sicher ob meine Shopware Installation ein Problem hat, oder ob mein Code faul ist, von dem ich eher ausgehe.

Daher meine Frage:

Sind Dir / Euch irgendwelche konkreten Codebeispiele bekannt mit denen man dem Interface ein Lebenszeichen entlocken kann?

Egal ob mit PHP, .NET direkt mit CURL oder was auch immer. Hätte eigentlich angenommen, dass man diese zu Hauf findet aber scheint nicht so zu sein.

Lg Andreas

Hab mir jetzt mal ein ganz einfaches Skript mit Curl gebaut, aber leider bekomme ich das selbe Ergebnis:

curl -X GET https://www.phoenix-der-lebenskraft-b2b.at/api/v3/customer-group -H ‚Accept: application/json‘ -H ‚Authorization: Basic BASE64User:Pass‘

BASE64User:Pass setzt sich zusammen aus dem Username:Passwort von dem User für welchen ich eine Integration erstellt habe.

Spuckt wieder 404 aus…

Nach längerem Suchen hier ein PHP Script gefunden das die Authentiofizierung machen sollte:

Klappt aber auch nicht - der Token den ich mir mit var_dump ausgeben lassen möchte ist NULL…

<?PHP

$token_url = "http://phoenix-der-lebenskraft-b2b.at/api/oauth/token";

//	client 
$client_id = "xxx";
$client_secret = "xxx";

$access_token = getAccessToken();

var_dump($access_token);

function getAccessToken() {
    global $token_url, $client_id, $client_secret;

    $curl = curl_init();

    curl_setopt_array($curl, [
        CURLOPT_URL => $token_url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 600,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => "grant_type=client_credentials&client_id=".$client_id."&client_secret=".$client_secret."",
        CURLOPT_HTTPHEADER => [
            "content-type: application/x-www-form-urlencoded"
        ],
        CURLOPT_SSL_VERIFYPEER => false,
    ]);

    $response = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl);

    if ($err) {
        echo "cURL Error #:" . $err;
    } else {
        return json_decode($response)->access_token;
    }

}
      
?>