#web-services #api #magento #soap #wsdl
#веб-службы #API #magento #soap #wsdl
Вопрос:
Я пытаюсь вызвать некоторые методы из Magento API V.1, но когда я вызываю startSession
метод для получения идентификатора сеанса, в результате я получаю null. Я использую Magento 1.5.1.0. Вот мой код (я должен сохранить файл WSDL локально перед созданием SOAP-клиента из-за ошибки в PHP 5.3, связанной с большими файлами WSDL.):
// Create a SOAP client
$data = file_get_contents("http://127.0.0.1/magento/index.php/api/soap/?wsdl");
file_put_contents("wsdl.xml", $data);
$proxy = new SoapClient("wsdl.xml");
// Log-in to the magento API
$sessionId = $proxy -> login('apiUser', 'apiKey');
Это полный POST-запрос, отправленный в Magento:
POST /magento/index.php/api/soap/index/ HTTP/1.1
Host: localhost:8070
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.3.0
Content-Type: text/xml; charset=utf-8
SOAPAction: "urn:Mage_Api_Model_Server_HandlerAction"
Content-Length: 383
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Magento" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:startSession/>
</SOAP-ENV:Body>
И это (пустой) ответ POST, полученный от Magento:
HTTP/1.1 302 Found
Date: Fri, 07 Oct 2011 14:57:01 GMT
Server: Apache/2.2.11 (Win32) mod_ssl/2.2.11 OpenSSL/0.9.8k PHP/5.3.0
X-Powered-By: PHP/5.3.0
Location: http://127.0.0.1/magento/
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
Кто-нибудь сталкивался с этим раньше? Мне кажется странным, что я вообще не получаю сообщение SOAP в возвращаемых данных.
Спасибо 🙂
ОБНОВЛЕНИЕ: на данный момент я все еще не знаю причину этой проблемы, и я просто переключился на новую установку Magento на другой компьютер. Кажется, там все работает нормально.
Комментарии:
1. Глупый вопрос, но установлено ли и включено ли расширение PHP SOAP в вашей среде?
2. На самом деле,
/api/soap/?wsdl
это soap v1 wsdl, вам нуженapi/v2_soap?wsdl=1
URL-адрес, чтобы получить soap v2 wsdl.3. @B00MER Да, расширение PHP SOAP установлено и включено, я перепроверил его прямо сейчас.
4. @Zyava Да, вы правы. На самом деле я использовал SOAP V1 WSDL. Однако я попытался запустить сеанс с использованием SOAP V2 WSDL и наблюдал точно такое же поведение (пустой ответ HTTP POST).
5. попробуйте
var_dump($proxy->__getLastRequest())
иvar_dump($proxy->__getLastResponse())
после$proxy -> login('apiUser', 'apiKey')
, чтобы увидеть, что отправляется в magento и что он возвращает.
Ответ №1:
Я не знаю, почему вы вызываете file_get_contents это
$data = file_get_contents("http://127.0.0.1/magento/index.php/api/soap/?wsdl");
file_put_contents("wsdl.xml", $data);
$proxy = new SoapClient("wsdl.xml");
измените с помощью этого:
$client = new SoapClient('http://magentohost/api/v2_soap?wsdl=1');
// If somestuff requires api authentification,
// then get a session token
$session = $client->login('apiUser', 'apiKey');
// If you don't need the session anymore
$client->endSession($session);
Комментарии:
1. я хочу получить информацию о продуктах, мой код: justpaste.it/4yyqf и мой вывод : snag.gy/y7iZav.jpg можете ли вы, пожалуйста, помочь мне устранить ошибку? @Josua Марсель Крисано
2. пожалуйста, подождите @Gem, я проверю это сейчас
3. Хорошо, я жду @Josua Марсель Крисано
4. могу ли я узнать реальный URL-адрес? @gem
5. Я не имею права делиться этими деталями, надеюсь, вы понимаете, что я отслеживаю каждую деталь. Могу ли я получить помощь по основному троблшоту @Josua Марсель Крисано