Mam już kilka połączeń, ale dla mnie nie mogę się dowiedzieć, jak to zrobić product_attribute.create
praca. Zawsze dostaję 102 Invalid request parameters
lub 623 Wrong Method Signature
.
nawiązanie połączenia w ten sposób my $res = $self->_useragent->call( call => $self->_session, @{$payload} );
(uwaga: useragent to a XML :: RPC obiekt.
To Dumper $payload
;
$VAR1 = [
"product_attribute.create",
[
"test",
{
"frontend_label" => [
{
"label" => "Test ME",
"store_id" => 0
}
],
"scope" => "store",
"frontend_input" => "text"
}
]
];
Przeczytałem Dokumentacja API ale określenie, jak powinno wyglądać połączenie w Perlu, jest trudne.
Odpowiedzi:
1 dla odpowiedzi № 1Nie znam biblioteki XML-RPC, której używasz w perlu, ale błąd, który widzisz, jest wyjątkiem Magento API, skonfigurowanym w
<!--File: app/code/core/Mage/Catalog/etc/api.xml -->
<!-- ... -->
<invalid_parameters>
<code>102</code>
<message>Invalid request parameters.</message>
</invalid_parameters>
<!-- ... -->
Używając nazwy wyjątku, możesz znaleźć miejsce, w które Magento ją rzucił
#File: app/code/core/Mage/Catalog/Model/Product/Attribute/Api.php
//...
if (empty($data["attribute_code"]) || !is_array($data["frontend_label"])) {
$this->_fault("invalid_parameters");
}
//...
Więc zgaduję, że twoje połączenie jest poprawne, po prostu brakuje ci attribute_code
.
0 dla odpowiedzi nr 2
Po przekopaniu kodu Magento skopiowałem go z zestawu testów i przekonwertowałem na perl, wydaje się działać. Może wszystkie atrybuty są wymagane.
$VAR1 = [
"product_attribute.create",
[
{
"default_value" => "1",
"is_configurable" => 0,
"used_in_product_listing" => 0,
"is_visible_on_front" => 0,
"apply_to" => [
"simple"
],
"is_comparable" => 0,
"is_used_for_promo_rules" => 0,
"is_required" => 0,
"scope" => "store",
"is_unique" => 0,
"frontend_input" => "text",
"is_searchable" => 0,
"attribute_code" => "unique_code",
"is_visible_in_advanced_search" => 0,
"frontend_label" => [
{
"label" => "some label",
"store_id" => "0"
}
]
}
]
];
Dalsze eksperymenty w pewnym stopniu oparte na Odpowiedź Alana Stormazasugeruj, że wymagane są następujące pola, ponieważ nie udało mi się pomyślnie utworzyć żądania bez zdefiniowania wszystkich tych pól.
$VAR1 = [
"product_attribute.create",
[
{
"frontend_input" => "text",
"attribute_code" => "test1374438470",
"frontend_label" => [
{
"store_id" => 0,
"label" => "Test ME"
}
]
}
]
];