2

我已经接到了几个电话,但是对于我的生活,我无法弄清楚如何product_attribute.create工作。我总是得到一个102 Invalid request parametersor 623 Wrong Method Signature

像这样进行调用my $res = $self->_useragent->call( call => $self->_session, @{$payload} );(注意:useragent 是一个XML::RPC对象。

这个Dumper $payload

 $VAR1 = [
      'product_attribute.create',
      [
        'test',
        {
          'frontend_label' => [
                                {
                                  'label' => 'Test ME',
                                  'store_id' => 0
                                }
                              ],
          'scope' => 'store',
          'frontend_input' => 'text'
        }
      ]
    ];

我已经阅读了API 文档,但要弄清楚 Perl 中的调用应该是什么样子是很棘手的。

4

2 回答 2

1

我不熟悉您在 perl 中使用的 XML-RPC 库,但您看到的错误是 Magento API 异常,配置为

<!--File: app/code/core/Mage/Catalog/etc/api.xml -->
<!-- ... -->
<invalid_parameters>
    <code>102</code>
    <message>Invalid request parameters.</message>
</invalid_parameters>    
<!-- ... -->

使用异常的名称,您可以找到 Magento 将其抛出的位置

#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');
}
//...

所以,我猜你的电话是正确的,你只是错过了一个attribute_code.

于 2013-07-20T22:46:17.460 回答
0

在对 Magento 的代码进行了一些挖掘之后,我从测试套件中复制了它并将其转换为 perl,它似乎可以工作。也许所有属性都是必需的。

$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'
                                }
                              ]
        }
      ]
    ];

基于Alan Storm's Answer 的进一步实验表明,以下字段是必需的,因为如果没有至少定义所有这些字段,我无法成功创建请求。

 $VAR1 = [
      'product_attribute.create',
      [
        {
          'frontend_input' => 'text',
          'attribute_code' => 'test1374438470',
          'frontend_label' => [
                                {
                                  'store_id' => 0,
                                  'label' => 'Test ME'
                                }
                              ]
        }
      ]
    ];
于 2013-07-20T19:51:52.807 回答