Bestellung über Rest-API anlegen

Hi,

leider komme ich immer noch nicht wirklich weiter mit meinem Wrapper für die Api, ich bekomme es einfach nicht hin eine Bestellung anzulegen. Obwohl alle Daten die ich in der Bestellung verwende (Kunde, Artikel, Adresse, Rechnungsadresse…) in meinem Testdatensatz vorhanden sind bekomme ich nur ein ‘Resource not found’ zurück. Gibt es eine Möglichkeit den Fehler etwas weiter einzugrenzen? Hier ist der fragliche Code:
 

require 'httparty'
require 'pp'

class SwApiWrapper

  include HTTParty
  base_uri 'localhost/shopware/api'
  digest_auth 'demo', 'MyToken'

  def post_order(data)
    self.class.post('/orders', :body => data.to_json)
  end

end

Shopware=SwApiWrapper.new

order= {'customerId' => 1,
        'paymentId' => 5,
        'dispatchId' => 9,
        'shopId' => 1,
        'invoiceAmount' => 201.86,
        'invoiceAmountNet' => 169.63,
        'invoiceShipping' => 0,
        'invoiceShippingNet' => 0,
        'net' => 0,
        'taxFree' => 0,
        'currencyFactor' => 1,
        'remoteAddress' => '::1',

        'details' => {
                      'articleId' => 2,
                      'taxId' => 1,
                      'taxRate' => 19,
                      'statusId' => 0,
                      'articleNumber' => 'SW10002',
                      'price' => 149.95,
                      'quantity' => 1,
                      'articleName' => 'TITANIUM CARBON GS',
                      'shipped' => 0,
                      'shippedGroup' => 0,
                      'mode' => 0,
                      'esdArticle' => 0,
        },

        'documents' => {},

        'billing' => {
            'id' => 1,
            'customerId' => 2,
            'countryId' => 2,
            'stateId' => 3,
            'company' => '',
            'salutation' => 'mr',
            'firstName' => 'Max',
            'lastName' => 'Meier',
            'street' => 'Mustergasse 55',
            'zipCode' => '12345',
            'city' => 'Musterstadt',
        },

        'shipping' => {
            'id' => 2,
            'countryId' => 2,
            'stateId' => 3,
            'customerId' => 2,
            'company' => '',
            'salutation' => 'mr',
            'firstName' => 'Max',
            'lastName' => 'Meier',
            'street' => 'Mustergasse 55',
            'zipCode' => '12345',
            'city' => 'Musterstadt'
        },
        'paymentStatusId' => 17,
        'orderStatusId' => 0
}

pp Shopware.post_order(order)

Die remoteAddress ::1 hatte ich gewählt weil andere Bestellungen in meiner Testumgebung diesen Wert hatten, ich habe in der Doku nicht herausfinden können was dieser aussagt… Tausend Dank für die Hilfe!

Hallo rtuzth,

ich hatte mir deine Daten die du an die API schickst genauer angeschaut. 

Da fehlen noch die Werte für  languageIso und  currency , siehe Doku.

Anschließend konnte ich deinen Order mittels curl Problemlos über die API auf einer frischen Shopware Instanz anlegen:

 curl -u API\_USER:API\_PASS -X POST http://localhost:8088/api/orders -d '{"customerId" : 1,"paymentId" : 5,"dispatchId" : 9,"shopId" : 1,"invoiceAmount" : 201.86,"invoiceAmountNet" : 169.63,"invoiceShipping" : 0,"invoiceShippingNet" : 0,"net" : 0,"taxFree" : 0, "languageIso": "1", "currency": "EUR", "currencyFactor" : 1,"remoteAddress" : "::1","details" : [{"articleId" : 2,"taxId" : 1,"taxRate" : 19,"statusId" : 0,"articleNumber" : "SW10002","price" : 149.95,"quantity" : 1,"articleName" : "TITANIUM CARBON GS","shipped" : 0,"shippedGroup" : 0,"mode" : 0,"esdArticle" : 0}],"documents" : {},"billing" : {"id" : 1,"customerId" : 2,"countryId" : 2,"stateId" : 3,"company" : "","salutation" : "mr","firstName" : "Max","lastName" : "Meier","street" : "Mustergasse 55","zipCode" : "12345","city" : "Musterstadt"},"shipping" : {"id" : 2,"countryId" : 2,"stateId" : 3,"customerId" : 2,"company" : "","salutation" : "mr","firstName" : "Max","lastName" : "Meier","street" : "Mustergasse 55","zipCode" : "12345","city" : "Musterstadt"},"paymentStatusId" : 17,"orderStatusId" : 0}' 

Ergebnis :

 {"success":true,"data":{"id":1,"location":"http:\/\/localhost:8088\/api\/orders\/1"}} 

 

Ich würde vorschlagen, den Ablauf deines Requests etwas tiefer zu debuggen um zu schauen, was letzendlich an die API geschickt wird.

1 „Gefällt mir“

Mache ich, vielen Dank! Sorry dass ich hier mit solchen Anfängerfragen auflaufe, Shopware und ich werden nicht warm miteinander…