【问题标题】:Magento Web Service "product.info" error: Product not existsMagento Web 服务“product.info”错误:产品不存在
【发布时间】:2012-03-26 10:54:46
【问题描述】:

iPhone 应用程序中的 Magento Web 服务(Magento 版本 1.6.0.0)有问题。实际上,我可以使用此代码(产品列表代码)登录并获得产品列表:-

NSMutableString *parameters = [NSMutableString stringWithFormat:@"<sessionId>%@</sessionId><resourcePath>%@</resourcePath>", session, @"product.list"];    


NSString *operation=[NSString stringWithString:@"call"];
NSString *xmlNamespace=[NSString stringWithString:storeWsdlLink];
NSString *adress=[NSString stringWithString:storeURL];


NSString *operatorTag = [NSString stringWithFormat:@"<%@ xmlns=\"%@\">%@</%@>\n", operation, xmlNamespace, parameters, operation];

NSString *soapMessage = [NSString stringWithFormat:
                         @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
                         "<s:Envelope xmlns:a=\"http://www.w3.org/2005/08/adressing\" xmlns:s=\"http://www.w3.org/2003/05/soap-envelope\">\n"
                         "  <s:Header>\n"
                         "    <To xmlns=\"http://www.w3.org/2005/08/adressing\">%@</To>\n"
                         "    <a:Action>http://tempuri.org/IService1/%@</a:Action>\n"
                         "  </s:Header>\n"
                         "  <s:Body>\n"
                         "    %@"
                         "  </s:Body>\n"
                         "</s:Envelope>\n", adress, operation, operatorTag
                         ]; 

ASIHTTPRequest *asiRequest = [[ASIHTTPRequest alloc]initWithURL:[NSURL URLWithString:adress]];
[asiRequest setDelegate:self];
[asiRequest setURL:[NSURL URLWithString:adress]];
[asiRequest setTimeOutSeconds:30];
[asiRequest addRequestHeader:@"application/soap+xml; charset=utf-8" value:@"Content-Type"];
[asiRequest setRequestMethod:@"POST"];
[asiRequest setPostBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
[asiRequest startAsynchronous];

如果我将“parameters”替换为:-

parameters = [NSMutableString stringWithFormat:@"<sessionId>%@</sessionId><resourcePath>%@</resourcePath><sku>%i</sku>", session, @"product.info", 12345];

我收到“Product not exists.”错​​误消息和“101”代码错误。

在一些论坛中,他们建议在“12345”(产品的 SKU)之后添加一个空格,但这不起作用。

感谢您的帮助。

编辑:-
我使用 PHP 调用 Magento Web 服务,它可以工作:-

$proxy = new SoapClient('xxx/api/?wsdl');
$sessionId = $proxy->login('userName', 'apiKey');
echo json_encode($proxy->call($sessionId, 'product.info', 111));

所以现在我确定问题出在我的代码中。 问题(我认为)是参数部分( --> &lt;sku&gt;%i&lt;/sku&gt;

有什么想法吗?

【问题讨论】:

    标签: iphone web-services api magento


    【解决方案1】:

    请尝试使用“parameters”这个语句:-

    parameters = [NSMutableString stringWithFormat:@"<sessionId>%@</sessionId><resourcePath>%@</resourcePath><sku>%@</sku>", session, @"product.info", @"12345"];
    

    首先,SKU 必须被视为一个字符串,因为这就是 Magento 对待 SKU 的方式。现在,如果您仔细查看this article 中此方法product.info 的WSDL 定义,您会发现它需要5 个参数:-

    • 产品 ID 或 SKU(必填)
    • 商店查看 ID 或代码(可选)
    • 所需/加载的属性列表(可选)
    • 标识符类型(可选,但此参数可从 Magento 版本 1.5.1.0 获得)

    现在如果您只提供“产品 ID 或 SKU”的第一个参数(这是必需的),那么在调用此方法 @987654327 时,所有其他参数都将设置为 NULL @.
    这样的调用并没有错,但是由于第四个参数没有具体提到"sku""id",所以Magento试图通过分析其第一个参数的数据类型(无论是字符串还是整数等)。所有这些分析都在这个类Mage_Catalog_Helper_Product的这个方法getProduct()中进行。

    所以我认为你需要将 SKU 的值作为字符串放在 parameters 变量中,以便 Magento 可以理解它是字符串 & 所以它是 Product SKU。

    希望对你有帮助。

    【讨论】:

    • 感谢您的重播,但我之前尝试过但不起作用,在 php 中它与字符串一起工作但我应该在 SKU (SKU.'') 中添加一个空格(我认为) magento 知道这是 SKU 而不是 id。如果您有其他建议,请告诉我。
    • @MalekRadhouani - SKU 是每个产品的唯一标识符,其数据类型为 string。因此,如果您要为每个此类 SKU 添加一个 ` `(空格)后缀,那么代码肯定存在其他问题。我希望你明白我的意思。
    • 是的,我知道,但是我从其他论坛获得了这个解决方案,其他人使用相同版本的 magento (1.6) 遇到与我相同的问题,并且 magento api 站点中给出的代码仅适用于添加了空间,所以我认为问题来自这个版本的magento,我会搜索magento网站中是否声明了一个错误,如果是的话我会告诉你,否则我会在我的代码中搜索并给你解决方案。谢谢。
    • @MalekRadhouani - 如果有的话,我还会搜索任何其他合适的选项;否则我会等待你的解决方案。非常感谢分享!
    • 我在 magento 站点 [link]magentocommerce.com/bug-tracking/list/?p=1 的问题列表中搜索,但我没有找到这个问题,我的解决方案(对于 iphone)是创建一个 php 脚本来调用带有空格的 magento WS添加到 sku 值。示例 : if($_POST['action']=='login' && isset($_POST['apiUser']) && isset($_POST['apiKey'])) { echo ($proxy->login($_POST ['apiUser'], $_POST['apiKey']));所以我用所需的动作来调用它,它不是一个优雅的解决方案,但它对我有用。谢谢。
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多