通过SOAP API v1在magento中创建一个新的DropDown(select)产品属性(带选项)

时间:2015-09-20 12:29:07

标签: php magento soap

我正在尝试创建用于可配置产品的全局产品属性。

这就是我使用admin后端的方式:

JSFiddle

使用以下选项(例如):

enter image description here

所以,我尝试使用SOAP API(v1)完成上述操作:

$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);

执行此脚本时,出现以下错误:

请求参数无效。

enter image description here

我在这里做错了什么想法?

1 个答案:

答案 0 :(得分:2)

以下是示例代码。你可以试试。

<?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);

?>