SW 5.2 - API Kundenimport -> Country

Guten Morgen zusammen,

Bislang (5.1.6) war es möglich die Kundendaten unter Angabe der CountrId zu importieren:

 $clientArray = array( 'groupKey' =\> '110', 'paymentId' =\> 5, // Vorkasse 'shopId' =\> 1, 'active' =\> true, ...   'newsletter' =\> false, 'paymentPreset' =\> 5, // Vorkasse 'billing' =\> array( 'number' =\> $customer-\>ID, 'salutation' =\> 'mr', 'company' =\> $customer-\>get('billing\_company'), 'firstName' =\> $customer-\>get('first\_name'), 'lastName' =\> $customer-\>get('last\_name'), 'street' =\> $customer-\>get('billing\_address\_1').$customer-\>get('billing\_address\_2'), 'zipCode' =\> $customer-\>get('billing\_postcode'), 'city' =\> $customer-\>get('billing\_city'), **'countryId' =\> $countryId** ), );

Das führt mit 5.2RC aber zu folgender Exception:
A country is required.

Die API hat sich hier im Source deutlich geändert - nun wird ein Country Objekt erwartet. Allerdings funktioniert auch folgendes leider nicht:

 $clientArray = array( 'groupKey' =\> '110', 'paymentId' =\> 5, // Vorkasse 'shopId' =\> 1, 'active' =\> true, ... 'paymentPreset' =\> 5, // Vorkasse 'billing' =\> array( 'number' =\> $customer-\>ID, 'salutation' =\> 'mr', 'company' =\> $customer-\>get('billing\_company'), 'firstName' =\> $customer-\>get('first\_name'), 'lastName' =\> $customer-\>get('last\_name'), 'street' =\> $customer-\>get('billing\_address\_1').$customer-\>get('billing\_address\_2'), 'zipCode' =\> $customer-\>get('billing\_postcode'), 'city' =\> $customer-\>get('billing\_city'), **'country' =\> array( 'id' =\> $countryId )** ), );

Aber das führt zu einer Exception, da ein Country Objekt erwartet allerdings NULL übergeben wird:
Fatal error: Uncaught TypeError: Argument 1 passed to Shopware\Models\Customer\Address::setCountry() must be an instance of Shopware\Models\Country\Country, null given

Jetzt bin ich mit meinem Latei leider am Ende - hat jemand einen Tipp für mich?

Danke & liebe Grüße,
Michael

Hi,

die Id des Countries muss in dem Feld „country“ stehen:

array(
    'groupKey' => '110',
    'paymentId' => 5, // Vorkasse
    'shopId' => 1,
    'active' => true,
    ...
    'paymentPreset' => 5, // Vorkasse
    'billing' => array(
        'number' => $customer->ID,
        'salutation' => 'mr',
        'company' => $customer->get('billing_company'),
        'firstName' => $customer->get('first_name'),
        'lastName' => $customer->get('last_name'),
        'street' => $customer->get('billing_address_1').$customer->get('billing_address_2'),
        'zipCode' => $customer->get('billing_postcode'),
        'city' => $customer->get('billing_city'),
        'country' => $countryId
    ),
);

Siehe: shopware/Customer.php at 5.2 · shopware/shopware · GitHub

1 Like

Danke…

Aber soll „billing“ jetzt überhaupt noch verwendet werden? Wäre „address“ hier nicht die bessere Alternative?

Liebe Grüße

ich hänge mich hier mal dran.

Wie läuft dies nun im optimalen Fall bei SW 5.2 ab?

Ich bekomme beim Import eines Kunden ebenfalls eine Meldung:
 

Fatal error: Uncaught This value should not be blank.
This value should not be blank.
This value should not be blank.

  thrown in /var/www/clients/client1/web31/web/engine/Shopware/Bundle/AccountBundle/Service/Validator/CustomerValidator.php on line 99
503 Service Unavailable

 

Schön wäre bei einer Fehlermeldung zu wissen, welcher Wert nicht passt.

 

Das Array sieht so aus:
 

array(8) {
  ["email"]=>
  string(43) "m-3yc9a729ojnujqcs@checkout-sandbox.lvl.bln"
  ["accountMode"]=>
  string(1) "1"
  ["groupKey"]=>
  string(2) "EK"
  ["internalComment"]=>
  string(32) "ZBQTAZ8P"
  ["customercomment"]=>
  string(0) ""
  ["billing"]=>
  array(12) {
    ["company"]=>
    string(0) ""
    ["salutation"]=>
    string(2) "mr"
    ["firstName"]=>
    string(6) "Marcel"
    ["lastName"]=>
    string(7) "Fischer"
    ["street"]=>
    string(8) "Straße 2"
    ["zipCode"]=>
    string(5) "93072"
    ["city"]=>
    string(3) "Ort"
    ["country"]=>
    string(1) "2"
    ["stateId"]=>
    string(0) ""
    ["phone"]=>
    string(16) "+49 30 1234 5678"
    ["additional_address_line1"]=>
    string(0) ""
  }
  ["shipping"]=>
  array(11) {
    ["company"]=>
    string(0) ""
    ["salutation"]=>
    string(2) "mr"
    ["firstName"]=>
    string(6) "Thomas"
    ["lastName"]=>
    string(8) "Xiao-Chu"
    ["street"]=>
    string(8) "Straße 2"
    ["zipCode"]=>
    string(5) "79072"
    ["city"]=>
    string(3) "Ort"
    ["country"]=>
    string(1) "2"
    ["stateId"]=>
    string(0) ""
    ["additional_address_line1"]=>
    string(0) ""
  }
  ["paymentID"]=>
  int(5)
}

 

Okay, ich habe meinen Fehler gefunden.
Name und Anrede muss dirkt in das Hauptarray mit.

Somit klappt es. Billing und Shipping Sätze werden automatisch als Address Satz angelegt.

Daher sieht es soweit korrekt aus.

Ich bekomme beim Import eines Kunden ebenfalls eine Meldung:
 

Fatal error: Uncaught This value should not be blank.
This value should not be blank.
This value should not be blank.

thrown in /var/www/clients/client1/web31/web/engine/Shopware/Bundle/AccountBundle/Service/Validator/CustomerValidator.php on line 99
503 Service Unavailable

 

Schön wäre bei einer Fehlermeldung zu wissen, welcher Wert nicht passt.

 

+1

Ich sitze hier auch vor einem Kundendatensatz, bekomme diese Felder, hab aber keine Ahnung was denn jetzt noch fehlt.

Das wäre wirklich eine ungemeine Arbeitserleichterung, in der Form könnte auch direkt nichts da stehen.