Order ändern per API

Hallo,

ich versuche über eine C# Implementierung den Trackingcode und den Bestellstatus zu verändern.

Ich bekomme immer die Response zurück: success":true,„data“:{„id“:2,„location“:"http:\/\/localhost\/shopware5\/api\/orders\/2\

Die Bestellung wird jedoch nicht verändert.

Habe nun versucht das ganze per Restlet zu machen um zu prüfen ob es an der Programmierung liegt.

Dies hier „http://localhost/shopware5/api/orders/2?orderStatusId=7“ liefert auch wieder eine positive Antwort ohne das die Bestellung geändert wird: („success“:true,„data“:{„id“:2,„location“:„http://localhost/shopware5/api/orders/2“).

 

Habe es nun per curl hiermit versucht:

curl -X PUT --digest --user ApiUser:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --header "Content-Type: application/json; charset=utf-8" --data '{"trackingCode":"4711", "comment":"API Kommentar"}' http://localhost/shopware5/api/orders/2

Dabei bekomme ich folgenden Fehler:

curl: (3) [globbing] unmatched close brace/bracket in column 24
{„success“:false,„message“:„Invalid method or invalid json string.“}

 

Es wäre nett wenn mich jemand mal auf den richtigen Weg schubsen könnte, bzw. mir sagen könnte über welches Log, etc. ich weiterführende Informationen zu meinen Request erhalten kann.

Vielen Dank!

Hallo @nu_81‍,

über C# Request kannst du Ihre Code eitragen, damit kann man weiß was ist das Probleme hier.

über http://localhost/shopware5/api/orders/2?orderStatusId=7 es würde in jeden fall nicht funktioniert weil PUT Aktion benutzen das POST data nicht GET data.

über Ihre Curl request dass ist ein bekannte Probleme mit Json Data in inline Request schaue mal :

https://stackoverflow.com/questions/7172784/how-do-i-post-json-data-with-curl-from-a-terminal-commandline-to-test-spring-res

https://stackoverflow.com/questions/18314796/couchdb-curl-windows-command-line-invalid-json

VG,

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

über http://localhost/shopware5/api/orders/2?orderStatusId=7 es würde in jeden fall nicht funktioniert weil PUT Aktion benutzen das POST data nicht GET data.

Hier habe ich aber als Methode Put eingestellt:

Ich würde gerne außerhalb von C# das ganze  laufen lassen um zu schauen ob es überhaupt funktioniert und nicht irgendetwas blockiert, o.ä.

Finde es aber auch ehrlich gesagt unfassbar, dass ein success Return kommt, aber nichts passiert und scheinbar auch nirgendwo etwas protokolliert, bzw. ein Fehler ausgegeben wird…

public class Order
{
  private int? id;
  private int number;
..
  private int orderStatusId;
  private string trackingCode;
..

  public int? Id
  {
    get { return this.id; }
    set { this.id = value; }
  }

  public int Number
  {
    get { return this.number; }
    set { this.number = value; }
  }
}

public class Put
{
  RestClient client = new RestClient("http://localhost/shopware5/api");
  client.Authenticator = new DigestAuthenticator("ApiUser", "xxxxxxxxxxxxxxxxxxx");

  string id = 2;
  Order orderNew = new Order();
  
  orderNew.OrderStatusId = 7;
  orderNew.Comment = "Ueber API";
  orderNew.TrackingCode = "4711";

  String json = JsonConvert.SerializeObject(orderNew, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });

  List> parameters = new List>();
  parameters.Add(new KeyValuePair("id", id));

  var request = new RestRequest("orders/{id}", Method.PUT);
  request.RequestFormat = DataFormat.Json;

  foreach (KeyValuePair parameter in parameters)
  {
    request.AddUrlSegment(parameter.Key, parameter.Value); 
  }

  request.AddParameter("application/json; charset=utf-8", json, ParameterType.RequestBody);

  IRestResponse response = client.Execute(request);


  string content = response.Content;
  //{\"success\":true,\"data\":{\"id\":2,\"location\":\"http:\\/\\/localhost\\/shopware5\\/api\\/orders\\/2\"}}
  

  
  
  

}

Dies ist der C# Code (vereinfacht).

Die Put Methode liefert eine success Meldung, es wird jedoch keine Änderung an der Bestellung ausgeführt.

 

@nu_81 schrieb:

über http://localhost/shopware5/api/orders/2?orderStatusId=7 es würde in jeden fall nicht funktioniert weil PUT Aktion benutzen das POST data nicht GET data.

Hier habe ich aber als Methode Put eingestellt:

image

Ich würde gerne außerhalb von C# das ganze  laufen lassen um zu schauen ob es überhaupt funktioniert und nicht irgendetwas blockiert, o.ä.

Finde es aber auch ehrlich gesagt unfassbar, dass ein success Return kommt, aber nichts passiert und scheinbar auch nirgendwo etwas protokolliert, bzw. ein Fehler ausgegeben wird…

 

Hallo @nu_81,

ich meine das Putaction funktion beim Shopware accept the data , die in \_POST also  das RequestBoday und nicht die Data kommt von _GET (querystring), deshalb er hat deine ‘orderStatusId’  value ignoriert .
 

VG,

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

@nu_81 schrieb:

public class Order
{
private int? id;
private int number;

private int orderStatusId;
private string trackingCode;

public int? Id
{
get { return this.id; }
set { this.id = value; }
}

public int Number
{
get { return this.number; }
set { this.number = value; }
}
}

public class Put
{
RestClient client = new RestClient(“http://localhost/shopware5/api”;
client.Authenticator = new DigestAuthenticator(“ApiUser”, “xxxxxxxxxxxxxxxxxxx”);

string id = 2;
Order orderNew = new Order();

orderNew.OrderStatusId = 7;
orderNew.Comment = “Ueber API”;
orderNew.TrackingCode = “4711”;

String json = JsonConvert.SerializeObject(orderNew, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });

List> parameters = new List>();
parameters.Add(new KeyValuePair(“id”, id));

var request = new RestRequest(“orders/{id}”, Method.PUT);
request.RequestFormat = DataFormat.Json;

foreach (KeyValuePair parameter in parameters)
{
request.AddUrlSegment(parameter.Key, parameter.Value);
}

request.AddParameter(“application/json; charset=utf-8”, json, ParameterType.RequestBody);

IRestResponse response = client.Execute(request);

string content = response.Content;
//{“success”:true,“data”:{“id”:2,“location”:“http:\/\/localhost\/shopware5\/api\/orders\/2”}}

}

Dies ist der C# Code (vereinfacht).

Die Put Methode liefert eine success Meldung, es wird jedoch keine Änderung an der Bestellung ausgeführt.

 

 

 

also ich bin nicht ein C# Programmierer aber wie ich sehe Ihre Json werde wie so gezeigt:

 

{
  "OrderStatusId": 7,
  "Comment": "Ueber API",
  "TrackingCode": "4711",
  "Number": 0
}

  bitte überprüfen ob es ist wie so , dann Ihre probleme ist mit die erste Buchstaben.

Shopware Api code wartet auf ‘orderStatusId’ nicht ‘OrderStatusId’

bitte Überprüfen und gib mir Bescheid , ob es ist das Probleme , dann vielleicht ich darf C# lernen  Wink.

VG,

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

Hallo ahmadsaad,

vielen Dank, genau das war es.

In C# muss natürlich auch auf die klein/groß Schreibung geachtet werden.

Das hat mein Problem gelöst.

Gruß