Метод входа в Magento API возвращает null

#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 Марсель Крисано