Beim Abrufen der V2-WSDL über diese URL:
www.example.com/shop/api/v2_soap?wsdl=1
Es definiert die falsche URL für Anfragen:
<service name="MagentoService">
<port name="Mage_Api_Model_Server_V2_HandlerPort" binding="typens:Mage_Api_Model_Server_V2_HandlerBinding">
<soap:address location="http://example.com/shop/index.php/?type=v2_soap"/>
</port>
</service>
Wie Sie oben sehen können, wird diese URL zurückgegeben:
www.example.com/shop/index.php/?type=v2_soap
Obwohl es sein sollte:
www.example.com/shop/index.php/api/v2_soap/index/
Ich habe einen Großteil des Magento-Kerncodes durchsucht und glaube, dass dieser Wert in /app/code/core/Mage/Api/Model/Wsdl/Config/Base.php in Zeile 53 festgelegt wird:
// set up default WSDL template variables
$this->_wsdlVariables = new Varien_Object(
array(
'name' => 'Magento',
'url' => htmlspecialchars(Mage::getUrl('*/*/*', array('_query' => $queryParams)))
)
);
Dieser Teil scheint zu scheitern:
Mage::getUrl('*/*/*' ...
Wenn ich das ändere zu:
Mage::getUrl('api/v2_soap/index' ...
Die richtige URL wird zurückgegeben.
Diese Frage scheint genau das gleiche Problem zu beschreiben, aber es gab nie eine Antwort darauf:
Vielen Dank im Voraus für jede Hilfe!
AKTUALISIEREN
Obwohl ich noch keine dauerhafte Lösung für dieses Problem gefunden habe, habe ich nach einigem Suchen eine vorübergehende Lösung gefunden. Im Wesentlichen erweitere ich die SoapClient-Klasse und überschreibe die __doRequest-Methode, um Anforderungen abzufangen und die Standort-URL zu optimieren, bevor die Anforderung gesendet wird:
class SoapClientLocation extends \SoapClient
{
public function __doRequest( $req, $location, $action, $version = SOAP_1_1, $one_way = NULL )
{
$location = str_replace( '?type=v2_soap', 'api/v2_soap/index/', $location, $one_way );
return parent::__doRequest( $req, $location, $action, $version );
}
}
$this->client = new SoapClientLocation( $this->config['api']['url'] );
quelle
Antworten:
Es können zwei Probleme sein:
www.example.com/shop/index.php/api/v2_soap/?wsdl
anstelle vonwww.example.com/shop/api/v2_soap?wsdl=1
(beachten Sie die hinzugefügtenindex.php
)error_reporting
/display_errors
in Ihremindex.php
.Langer Hinweis zum letzten Punkt: Der
SoapClient
ist kein Browser und sendet daher keine Cookies. Magento wiederum mag Cookies und daher sendet Magento einen Hinweis (wenn error_reporting aktiviert ist), der Hinweis macht Ihr XML ungültig / nicht einmal lass es laden. (SOAP-ERROR: Parsing WSDL: Couldn't find <definitions>
)quelle
Das Problem ist das
Setzt den aktuellen Speicher auf "admin" (weitere Informationen in Alans Blog-Beitrag http://alanstorm.com/magento_api_adapater_xml_rpc ).
Wenn Sie die Option "Automatische Umleitung zur Basis-URL" festgelegt haben, kann auf die API nicht zugegriffen werden.
Meine Lösung war zuzuhören
Und setzen Sie diesen Konfigurationsknoten auf Null, wenn der URI 'api' enthält. Dh
quelle