I am trying to create a global product attribute that is used for configurable product.
This is how I would do it using the admin backend:
With the following options (for example):
So, I tried to do the above using the SOAP API (v1) like this:
$client = new SoapClient('http://domain.com/api/soap?wsdl');
$session = $client->login('apiUser', 'apiPass');
$attributeData = [
'attribute_code' => 'test',
'scope' => 'global',
'frontend_input' => 'select',
'options' => [
'values' => [
0 => 'Red',
1 => 'Green',
2 => 'Blue'
]
],
'default_value' => '',
'is_configurable' => 1,
'used_in_product_listing' => 1,
'is_visible_on_front' => 0,
'apply_to' => '',
'is_comparable' => 0,
'is_used_for_promo_rules' => 0,
'is_required' => 0,
'is_unique' => 0,
'is_searchable' => 0,
'is_visible_in_advanced_search' => 0,
'frontend_label' => [[
'store_id' => 0,
'label' => 'Test'
]]
];
try
{
$result = $client->call($session, 'product_attribute.create', $attributeData);
var_dump($result);
}
catch (SoapFault $sf)
{
var_dump($sf);
}
$client->endSession($session);
When I execute this script, I get the following error:
Any ideas what I am doing wrong here?
Here is the sample code. You may try.
<?php
$user = 'user';
$password = '123456789';
$client = new SoapClient('http://domain.com/api/soap/?wsdl');
$session = $client->login($user, $password);
// Create new attribute
$attributeToCreate = array(
"attribute_code" => "test_attribute",
"scope" => "global",
"frontend_input" => "select",
"is_unique" => 0,
"is_required" => 0,
"is_configurable" => 1,
"is_searchable" => 0,
"is_visible_in_advanced_search" => 0,
"used_in_product_listing" => 0,
"additional_fields" => array(
"is_filterable" => 1,
"is_filterable_in_search" => 1,
"position" => 1,
"used_for_sort_by" => 1
),
"frontend_label" => array(
array(
"store_id" => 0,
"label" => "A test attribute"
)
)
);
$attributeId = $client->call(
$session,
"product_attribute.create",
array(
$attributeToCreate
)
);
// add options
$attributeCode = $attributeToCreate['attribute_code'];
$selectOptions = array('Value 1','Value 2','Value 3','Value 4');
foreach ($selectOptions as $opt) {
$client->call(
$session,
"product_attribute.addOption",
array(
$attributeCode,
array(
"label" => array(
array(
"store_id" => 0,
"value" => $opt
)
),
"order" => 0,
"is_default" => 0
)
)
);
}
// add attribute to a attribute set
$setId = 4; //attribute set id
$result = $client->call(
$session,
"product_attribute_set.attributeAdd",
array(
$attributeId, // created attribute id
$setId
)
);
var_dump($attributeId);
$client->endSession($session);
?>