У меня проблема с веб-сервисом Magento (версия 1.6.0.0 Magento) в приложении для iPhone. На самом деле я могу войти и получить список продуктов с этим кодом (код списка продуктов): -
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 of Product), но это не работает.
Спасибо за помощь.
Edit: -
Я использую PHP для вызова веб-сервиса Magento, и он работает: -
$proxy = new SoapClient('xxx/api/?wsdl');
$sessionId = $proxy->login('userName', 'apiKey');
echo json_encode($proxy->call($sessionId, 'product.info', 111));
Так что теперь я уверен, что проблема в моем коде.
Проблема (я думаю) заключается в части аргументов (-> <sku>%i</sku>
<-), потому что, если я удалю эту часть, у меня будет та же ошибка. </p>
Есть идеи?