Magento Forum

   
Page 1 of 2
Produkt API Fehler, wo ist da der Wurm drin? 
 
Rico Winter
Sr. Member
 
Avatar
Total Posts:  108
Joined:  2009-03-20
Leipzig
 

Hallo Leute,

Ich wollte mich mal ein wenig mit der Api von Magento beschäftigen… Leider wirft er ständig neue obskure Fehlermeldungen aus…
So erzeugt das…

foreach ($output as $line => $out)
{
    
if ($line >0)
    
{
        $pref 
explode(";",$out);
        echo 
count($pref);
        
$newProductData = array(
        
'store'=> $pref[0]
        
'name' => utf8_encode($pref[6]),
        
'description' => utf8_encode($pref[36]),
        
'short_description' => utf8_encode($pref[7]),
        
'weight' => $pref[17],
        
'status' => $pref[9],
        
'shop'=> 0,
        
'price' => $pref[33]
        
);
52           $result$client->call($sess_id'product.create', array('simple'0$pref[1]$newProductData));
        if (
$resut 0)
        
{
            
echo $result.NL;
        
}
        
else
        
{
            
echo "Error".NL;
        
}    
    }
}

... diese lustige Ausgabe…

Fatal error: Uncaught SoapFault exception: [102] Invalid data given. Details in error message. in magento_api.php:52 Stack trace: #0 [internal function]: SoapClient->__call(’call’, Array) #1 magento_api.php(52): SoapClient->call(’unn9tnuognar5pa...’, ‘product.create’, Array) #2 {main} thrown in magento_api.php on line 52

Ich hab keine Ahnung, was er mir damit sagen will…

Kann mir da einer von euch helfen?

Danke

Rico

 
Magento Community Magento Community
Magento Community
Magento Community
 
timste
Guru
 
Total Posts:  645
Joined:  2007-12-26
Leipzig
 

kannst du mal den code vor deiner foreach posten?

gruss

 
Magento Community Magento Community
Magento Community
Magento Community
 
Rico Winter
Sr. Member
 
Avatar
Total Posts:  108
Joined:  2009-03-20
Leipzig
 

Das steht vor der foreach..

define('NL',"<br>");
$host 'localhost/magento';
$host 'http://'.$host.'/index.php/api/soap/?wsdl';
echo 
$host.NL;

// Can be added in Magento-Admin -> Web Services
$apiuser'user';
$apikey '123456';
$file ='C:\data.csv';
if (!
file_exists($file))
{
    
die('Datei existiert nicht');
}

$client
= new SoapClient($host);
try 
{
  $sess_id
$client->login($apiuser$apikey);

catch (Exception $e
{
  
echo "==> Error: ".$e->getMessage();
  exit();
}


$output 
file($file);
$pref = array();

 
Magento Community Magento Community
Magento Community
Magento Community
 
timste
Guru
 
Total Posts:  645
Joined:  2007-12-26
Leipzig
 

ahem, was willst du machen?

so sieht es bei mir aus wenn ich ein SKU abfrage

$proxy = new SoapClient(’http://192.168.0.1/smagento/index.php/api/soap/?wsdl’);
$sessionId = $proxy->login(’key’, ‘key’);

print_r($proxy->call($sessionId, ‘product.info’, ‘SKU’));

nix mit file…

 
Magento Community Magento Community
Magento Community
Magento Community
 
Rico Winter
Sr. Member
 
Avatar
Total Posts:  108
Joined:  2009-03-20
Leipzig
 

Aus der File “data.csv” läd er die Produkte, die soll er mehr oder weniger mit:

$result$client->call($sess_id'product.create', array('simple'0$pref[1]$newProductData));
in die magento datenbank schreiben… Dabei ist $pref[1] an dieser Stelle die SKU.

 
Magento Community Magento Community
Magento Community
Magento Community
 
timste
Guru
 
Total Posts:  645
Joined:  2007-12-26
Leipzig
 

meiner meinung nach fehlt die set_id, die ist bei dir 0, der wert nach simple
bau das ganze mal in eine try catch rein dann bekommst du eine ordentliche fehlermeldung

gruss

 
Magento Community Magento Community
Magento Community
Magento Community
 
Rico Winter
Sr. Member
 
Avatar
Total Posts:  108
Joined:  2009-03-20
Leipzig
 
timste - 25 March 2009 04:20 AM

meiner meinung nach fehlt die set_id, die ist bei dir 0, der wert nach simple
bau das ganze mal in eine try catch rein dann bekommst du eine ordentliche fehlermeldung

Try/catch bringt mir die selbige Fehelrmeldung, nur kürzer : “Error: Invalid data given. Details in error message.” cheese

Die set_id hab ich auf 0, weil ich kein Attribut Set angelegt habe bzw. der das default benutzen soll.
Das Array $newProductData ist imho gut aufgebaut

Hier die ausgabe mit print_r:

Array ( [0] => simple [1] => 0 [2] => 100009 [3] => Array ( [store] => 0 [name] => Absaugkanüle [description] => test [short_description] => 10 Stk, blau, sterilisierbar bis 135°C [weight] => 0,046 [status] => 1 [shop] => 0 [price] => 10,99 ) )

Hmm, kein Plan, was ich noch machen soll, das beschäftigt mich jetzt schon seit der Mittagspause grrr

 
Magento Community Magento Community
Magento Community
Magento Community
 
timste
Guru
 
Total Posts:  645
Joined:  2007-12-26
Leipzig
 

meiner meinung nach brauchst du selbst für das default eine set_id

ansonsten die werte die du übergibst solange reduzieren bist du ein produkt anlegen kannst

gruss

 
Magento Community Magento Community
Magento Community
Magento Community
 
Rico Winter
Sr. Member
 
Avatar
Total Posts:  108
Joined:  2009-03-20
Leipzig
 
timste - 25 March 2009 04:35 AM

meiner meinung nach brauchst du selbst für das default eine set_id

Und die ist nicht 0? shock
Ok, mit 1 tut ers cheese
Aber nur bis er mir sagt: “Error: Wert des Attributs “SKU” muß eindeutig sein”

Ok, das scheint jetzt elemantar irgendwie am Input zu liegen… Aber theoretischerweise sollte diese SKU eindeutig sein, da ich keinerlei andere Produkte mit dieser Nummer habe, weder in der CSV noch in der Datenbank (die ist leer)… *grübel*

Danke erstmal für deine Hilfe, bis dahin passt ja jetzt alles :D

 
Magento Community Magento Community
Magento Community
Magento Community
 
timste
Guru
 
Total Posts:  645
Joined:  2007-12-26
Leipzig
 

vielleicht hast du deine eindeutige SKU schon mal in der DB?

ich frage vorher ab ob der artikel da ist, wenn nein ANLEGEN, wenn ja UPDATEN wink

gruss

 
Magento Community Magento Community
Magento Community
Magento Community
 
Rico Winter
Sr. Member
 
Avatar
Total Posts:  108
Joined:  2009-03-20
Leipzig
 

Ja, ney… Das Prob ist das der nur den ersten Artikel ordentlich aus der csv ausliest, da er das Zeilenweise macht und die csv… Naja… Die is total vermurkst…
Hier mal ein Auszug für 2 Artikel (WaWi - SelectLine)

ShopNumber;Number;OriginalNumber;SupplierNumber;ProducerNumber;Producer;Description; Extension; ArtGroup; QuantityUnit; PriceUnit;ValidFrom;ValidTill;PriceLink;CanDiscount;CanAllowance;Stock;Weight;Taxes;MainLanguage;Flag1;Flag2;Flag3;Flag4;Flag5;Flag6;
Flag7;Flag8;FreeField1;FreeField4;FreeField5;FreeField6;FreeField7;FreeField8;FreeField9;FlagPDF;LongText;InfoText2;ListPrice;FreeField3;
FreeField2;InfoText1;Order
0; 100009;100009; 71000; 0460; 71290; Absaugkanüle bambino; 10 Stk,blau, sterilisierbar bis 135°C; KI; Beutel; 1;;;100012;1;1;20;0,046;;;0;0;0;0;0;0;0;0;Blau;6-12;13-3;1000xx;pe0460;10,99;12 Stück;0;"<ul>
<li>ergonomisch geformt</li>
<li>geräuscharm durch hochglanzpolierte Innenfläche</li>
<li>lange Gebrauchsdauer ohne Verfärbungen</li>
<li>sterilisierbar bis 135°C</li>
</ul>

<ul>
<li>Länge: 11,1 cm / Ø Anschluss: 16 mm</li>
</ul>”;Kunststoff;;;;;
0;100010;100010;71000;0461;71290;Absaugkanüle bambino;10 Stk, gelb, sterilisierbar bis 135°C;KI;Beutel;1;;;100012;1;1;22;0,061;;;0;0;0;0;0;0;0;0;Gelb;6-12;13-3;1000xx;pe0461;10,99;12 Stück;0;"<ul>
<li>ergonomisch geformt</li>
<li>geräuscharm durch hochglanzpolierte Innenfläche</li>
<li>lange Gebrauchsdauer ohne Verfärbungen</li>
<li>sterilisierbar bis 135°C</li>
</ul>

Das ist aber nicht Zeilenweise… Muss ich mir für das Einlesen was Anderes einfallen lassen…

 
Magento Community Magento Community
Magento Community
Magento Community
 
timste
Guru
 
Total Posts:  645
Joined:  2007-12-26
Leipzig
 

die zeilenumbrüche sind das problem genau

kannst du ja mit suchen ersetzen rausfiltern

gruss

 
Magento Community Magento Community
Magento Community
Magento Community
 
Rico Winter
Sr. Member
 
Avatar
Total Posts:  108
Joined:  2009-03-20
Leipzig
 

Die Zeilenumbrüche stellen sich wirklich als ernsthaftes Problem dar… Entferne ich diese, ist es nur noch eine Zeile (die dann die Werte von ca. 3k Artikeln enthält) und das ist natürlich Mist… Als Alternative hab ich versucht, das ganze nicht als csv, sondern als XML einzulesen, aber da ich keine Ahnung habe, wie ich in php XML Parsen bzw. auslesen kann, bin ich auch daran gescheitert… Im Prinzip ist die Struktur der XML ja recht einfach: (korrespondierend zu den 2 Artikeln der vorhin geposteten csv jetzt nur einer der xml)

<?xml version="1.0" encoding="UTF-8"?>
<Varo>
<
Articles>
<
Article>
<
ShopNumber>0</ShopNumber>
<
Number>100009</Number>
<
OriginalNumber>100009</OriginalNumber>
<
SupplierNumber>71000</SupplierNumber>
<
ProducerNumber>0460</ProducerNumber>
<
Producer>71290</Producer>
<
Description>Absaugkanüle</Description>
<
Extension>10 Stkblausterilisierbar bis 135°C</Extension>
<
ArtGroup>KI</ArtGroup>
<
QuantityUnit>Beutel</QuantityUnit>
<
PriceUnit>1</PriceUnit>
<
LongText><ul>
<
li>ergonomisch geformt</li>
<
li>geräuscharm durch hochglanzpolierte Innenfläche</li>
<
li>lange Gebrauchsdauer ohne Verfärbungen</li>
<
li>sterilisierbar bis 135°C</li>
</
ul>

<
ul>
<
li>Länge11,1 cm Ø Anschluss16 mm</li>
</
ul></LongText><InfoText2>Kunststoff</InfoText2></Article>

Habs mit simple_xml probiert, mit DOM und wer weiß nicht was noch… Aber XML war noch nie wirklich meine Stärke… Mir hats schon gereicht in C# damit ne Klasse zu serialisieren bzw. wieder deserialisiren....

Wenn ich die File mit fopen und dann fgetcsv bearbeiten will, kommt auch nur murks bei raus downer

 
Magento Community Magento Community
Magento Community
Magento Community
 
timste
Guru
 
Total Posts:  645
Joined:  2007-12-26
Leipzig
 

zurück zu CSV, wo ist das problem mit chr(10) bzw chr(13) unnötige zeilenumbrüche auszufiltern.

Simple_XML geht aber auch easy

nachher vielleicht mal ein paar links dazu

gruss

 
Magento Community Magento Community
Magento Community
Magento Community
 
Rico Winter
Sr. Member
 
Avatar
Total Posts:  108
Joined:  2009-03-20
Leipzig
 
timste - 25 March 2009 07:21 AM

zurück zu CSV, wo ist das problem mit chr(10) bzw chr(13) unnötige zeilenumbrüche auszufiltern.

Simple_XML geht aber auch easy

nachher vielleicht mal ein paar links dazu

gruss

Das Prob is, das es nicht geht tongue laugh Es sind nicht nur die Umbrüche, sondern auch Double-Quotes (") die mir ständig reinwurschteln… Entferne ich alle Umbrüche, besteht die csv nur noch aus einer Zeile…

Das mit dem xml ist nicht der Renner, ich mag xml, aber xml mag mich nicht… Habs versucht und versucht, und habs vorerst bei csv belassen… Obwohl das zwar auch nicht funktioniert, aber dafür weiß ich wenigstens im Ansatz, wo etwas steht cheese und kann es dann ganz bequem, sogar mit nur einer Hand aus nem Array löffeln…

Die csv enthält nen ellenlangen Text (Attribut: Longtext) was nicht nur html Zeichen (li ul br) enthält, sondern eben auch die Quotes, habs mit stripslashes versucht, irgendwie zu entfernen, habs aber nicht hinbekommen… Blöde stripslashes… Lass ich sie drinnen, unterbrechen sie kurzer Hand den php source, und der fängt dann mitten im Text auf einmal ne Liste an…

Ich mach erstmal Feierabend für heute, werd mich morgen damit weiter auseinandersetzen…

Ich danke dir erstmla für deine Zeit, und eventuell liest man sich morgen wieder.

Gruß Rico

 
Magento Community Magento Community
Magento Community
Magento Community
 
ZeOner
Member
 
Avatar
Total Posts:  55
Joined:  2008-03-06
Hannover
 

du must beim export in csv um deine strings quotes fassen und in den strings dann vorhandene quotes escapen!
die sehen dann so aus: \”

und nach jedem produkt ein \n für zeilen umbruch einfügen.
dann solltest du soviele zeilen wie produkte in der csv datei haben.

mfg

ZeOner

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
    Back to top
Page 1 of 2