REST-API Bestellung importieren

Hallo,

ich möchte über die Rest-API Bestellungen importieren. Hierzu habe ich eine Array erstellt das ich per json_encode umwandle und per POST an die API schicke.

Leider motzt die API:

HTTP: 400

Could not decode json

json_last_error: Syntaxerror
Raw:

**Bad request!**

Ich kann wohl davon ausgehen das ich einen Fehler in meinem Array habe. Leider kann ich diesen nicht finden. Auch wenn ich das JSON Ergebnis checke kann ich keinen Fehler ausmachen. Vielleicht sieht hier jemand woch ich den Fehler mache im array:

 $import['orders'] = array( //Allgemeine Daten "customerId" =\> $kundenInformationen['data']['0']['id'], "paymentId" =\> $kundenInformationen['data']['0']['paymentId'], "dispatchId" =\> 9, "shopId" =\> 1, "invoiceAmount" =\> $result[$i][2], "invoiceAmountNet" =\> $result[$i][3], "invoiceShipping" =\> 0, "invoiceShippingNet" =\> 0, "orderTime" =\> $result[$i][4], "net" =\> 0, "taxFree" =\> 0, "languageIso" =\> 'd', "currency" =\> $result[$i][5], "currencyFactor" =\> 1, "paymentStatusId" =\> 17, "orderStatusId" =\> 0, //Rechnungsadresse "billing" =\> ["customerId" =\> $kundenInformationen['data']['0']['id'], "countryId" =\> 1, "stateId" =\> 3, ], //Lieferadreese "shipping" =\> ["customerId" =\> $kundenInformationen['data']['0']['id'], "countryId" =\> 1, "stateId" =\> 3, ]); //Artikeldaten While ($i \< count($result)) { $ArtikelId = $client-\>get('articles/'.$result[$i][7].'?useNumberAsId=true'); $import['orders']['details'][$i] = array( "articleId" =\> $ArtikelId['data']['id'], "taxId" =\> $result[$i][9], "taxRate" =\> 1, "statusId" =\> 0, "articleNumber" =\> $result[$i][7], "articleName" =\> $result[$i][10], "price" =\> $result[$i][9], "quantity" =\> 1, ); $i++; } 

Vielen Dank für die Mühe im voraus!

Hallo, 

 

Kannst du bitte das Json request eintragen??

 

Vg, 

Ahmad

Hallo,

ich habe jetzt mal json_last_error_msg  eingebaut und erhalte folgende Meldung:

HTTP: 400

Could not decode json

json_last_error: Syntaxerror
Raw:

Bad request!

Your browser (or proxy) sent a request that this server could not understand.

If you think this is a server error, please contact the webmaster.

Error 400

localhost
Apache/2.4.35 (Win32) OpenSSL/1.1.0i PHP/7.2.11

 

Hier der Json String:

{„orders“:{„customerId“:1,„paymentId“:5,„dispatchId“:9,„shopId“:1,„invoiceAmount“:„80.79“,„invoiceAmountNet“:„67.89“,„invoiceShipping“:0,„invoiceShippingNet“:0,„orderTime“:„2012-08-31 08:51:46“,„net“:0,„taxFree“:0,„languageIso“:„d“,„currency“:„EUR“,„currencyFactor“:1,„paymentStatusId“:17,„orderStatusId“:0}}

 

Wenn ich die API direkt anspreche mit:

 $client-\>post('orders', [//Allgemeine Daten "customerId" =\> $kundenInformationen['data']['0']['id'], "paymentId" =\> $kundenInformationen['data']['0']['paymentId'], "dispatchId" =\> 9, "shopId" =\> 1, "invoiceAmount" =\> $result[$i][2], "invoiceAmountNet" =\> $result[$i][3], "invoiceShipping" =\> 0, "invoiceShippingNet" =\> 0, "orderTime" =\> $result[$i][4], "net" =\> 0, "taxFree" =\> 0, usw... dann funktioniert es einwandfrei. Da ich aber die Artikel Dynamisch generieren muss, dachte ich mir das ein Array die einfachste Lösung wäre. 

Ich hoffe mit diesen Infos kannst du schon was anfangen.

Beste Grüße

@Magnum schrieb:

ich möchte über die Rest-API Bestellungen importieren. Hierzu habe ich eine Array erstellt das ich per json_encode umwandle und per POST an die API schicke.

In deinem Post ist aber leider nur das

$client->get('articles/'.$result[$i][7].'?useNumberAsId=true');

zu sehen aber nicht dein wirklicher Code der mit deinem Array den POST/PUT Request macht.

{
  "orders": {
    "customerId": 1,
    "paymentId": 5,
    "dispatchId": 9,
    "shopId": 1,
    "invoiceAmount": "80.79",
    "invoiceAmountNet": "67.89",
    "invoiceShipping": 0,
    "invoiceShippingNet": 0,
    "orderTime": "2012-08-31 08:51:46",
    "net": 0,
    "taxFree": 0,
    "languageIso": "d",
    "currency": "EUR",
    "currencyFactor": 1,
    "paymentStatusId": 17,
    "orderStatusId": 0
  }
}

Wenn du diesen JSON Payload schickst ist das „order“ Element doch zu viel oder.

Laut Doku geht es so:

$client->post('orders', [
    "customerId" => 1,
    "paymentId" => 4,
    "dispatchId" => 9,
    "partnerId" => "",
    "shopId" => 1,
    // ...
    ]
);

„orders“ ist der Pfad der API (/api/orders) und der JSON Payload ist ein Array das direkt mit " customerId", etc. anfängt. Rein mit den gegebenen Informationen sieht es für mich danach aus.

1 „Gefällt mir“

Hallo @Magnum‍,

ja naturlisch benutzen ein Array ist einfacher und es ist die richtig weg.

Shopware Api Client würde diese Array zu Json encoding.

ich möchte die Json Post nur zu sehen was ist das falsche eintrag in ihre request.

also wie stormerMike hat gesagt das Problem in deine Request diese ‘orders’ key am Anfang diese Array.

was du darfst jetzt machen anderen Ihre Array zu :

$order = array(
    //Allgemeine Daten
    "customerId" => $kundenInformationen['data']['0']['id'],
    "paymentId" => $kundenInformationen['data']['0']['paymentId'],
    "dispatchId" => 9,
    "shopId" => 1,
    "invoiceAmount" => $result[$i][2],
    "invoiceAmountNet" => $result[$i][3],
    "invoiceShipping" => 0,
    "invoiceShippingNet" => 0,
    "orderTime" => $result[$i][4],
    "net" => 0,
    "taxFree" => 0,
    "languageIso" => 'd',
    "currency" => $result[$i][5],
    "currencyFactor" => 1,
    "paymentStatusId" => 17,
    "orderStatusId" => 0,
    //Rechnungsadresse
    "billing" => [
        "customerId" => $kundenInformationen['data']['0']['id'],
        "countryId" => 1,
        "stateId" => 3,
    ],
    //Lieferadreese
    "shipping" => [
        "customerId" => $kundenInformationen['data']['0']['id'],
        "countryId" => 1,
        "stateId" => 3,
    ]);
//Artikeldaten
While ($i < count($result)) {
    $ArtikelId = $client->get('articles/'.$result[$i][7].'?useNumberAsId=true');
    $order['details'][$i] = array(
        "articleId" => $ArtikelId['data']['id'],
        "taxId" => $result[$i][9],
        "taxRate" => 1,
        "statusId" => 0,
        "articleNumber" => $result[$i][7],
        "articleName" => $result[$i][10],
        "price" => $result[$i][9],
        "quantity" => 1,
    );
    $i++;
}

dann schick deine Request wie so :

 

$client->post('orders', $order);

 

VG,

Tel.: +49 755 - 183 990 00 | Web: http://enbit.de/

1 „Gefällt mir“

Hallo,

vielen Dank für eure Korrektur im Bezug auf das Array. Hat wie erwartet sofort funktioniert. Manchmal sieht man die Lösung einfach nicht!

Beste Grüße