Shopware Kunde via REST API anlegen

Beim Versuch einen Kunden über die REST API anzulegen, bekomme ich folgenden Fehler:

Server error: `POST http://<>/sales-channel-api/v1/customer` resulted in a `500 Internal Server Error` response: {"errors":[{"code":"0","status":"500","title":"Internal Server Error","detail":"Call to a member function set() on null" (truncated...)

Selber Fehler wurde auch hier bereits kommuniziert:
https://github.com/shopware/platform/issues/61 

Ich vermute das es an dem Format der übermittelten Daten im POST request liegen könnte.
Die notwendigen Felder zum Kunden anlegen sind wohl vorhanden; laut https://docs.shopware.com/en/shopware-platform-dev-en/sales-channel-api/sales-channel-customer-api?category=shopware-platform-dev-en/sales-channel-api

Die Kunden-Daten werden in folgendem Format (JSON) an die API geschickt:

{
  "salutationId":"c5bcc829391a4282b7b5ae9381e3169d",
  "firstName":"Max",
  "lastName":"Mustermann",
  "email":"test@test.de",
  "billingAddress": {
    "street":"Musterweg 1",
    "zipcode":"44444",
    "city":"Musterstadt",
    "countryId":"5530bc8a03bd47a086ade379d1260bac"
  }
}

GET requests funktionieren über den entsprechenden API endpoint problemlos; z.B. sales-channel-api/v1/country.
Daher die Vermutung, dass die Daten falsch übermittelt werden.

Adressen:

   $uuid = md5($customer[„customer_id“]."~".$customer[„contact_id“]."~".$addr[„address_id“], false);

                    $address = [

                        „city“ => (string)$addr[‚city‘],

                        „countryId“ => (string)$countryId,

                        „firstName“ => (string)$addr[‚firstname‘],

                        „lastName“ => (string)$addr[‚lastname‘],

                        „salutationId“ => $salutationId,

                        „street“ => (string)$addr[‚street‘],

                        „city“ => (string)$addr[‚city‘],

                        „zipcode“ => (string)$addr[‚postcode‘],

                        „company“ => (string)$addr[‚company‘],

                        „id“ => (string)$uuid,

                        „languageId“ => $languageId,

                        „active“ => true,

                        „customerId“ => $uuidCustomer

                    ];

if ($customer[‚default_billing‘] != null && $customer[‚default_billing‘] == $addr[„address_id“]) {

                        $defaultBillingAddressId == $uuid;

                    }

                    if ($customer[‚default_shipping‘] != null && $customer[‚default_shipping‘] == $addr[„address_id“]) {

                        $defaultShippingAddressId == $uuid;

                    }

                    $addresses = $address;

Kunden:

$data = [

                    „id“ => (string)$uuidCustomer,

                    „groupId“ => $groupId,

                    „addresses“ => $addresses,

                    „customerNumber“ => (string)$customerNumber,

                    „defaultBillingAddressId“ => (string)$defaultBillingAddressId,

                    „defaultPaymentMethodId“ => $paymentMethodId,

                    „defaultShippingAddressId“ => (string)$defaultShippingAddressId,

                    „email“ => (string)$customer[‚email‘],

                    „firstName“ => (string)$customer[‚firstname‘],

                    „lastName“ => (string)$customer[‚lastname‘],

                    „salesChannelId“ => (string)$channelId,

                    „salutationId“ => (string)$salutationId,

                    „languageId“ => $languageId,

                    „active“ => true

                ];

 

Leider kann ich nicht den gesamten Code posten, weil das Feld zu klein ist, aber vielleicht hilfts.

Sieh dir am besten die CustomerGenerator.php in den Demodaten an, anhand dessen habe ich es gemacht.

Das einzige was mir fehlt ist das aussenden einer Mail, das geht bei mir über den Mailservice nicht.

1 „Gefällt mir“