Imansible connettersi all'API SOAP Magento v2 a causa di "imansible caricare l'entity framework; esterna"

Non riesco a connettermi all'API SOAP Magento v2 utilizzando PHP. L'errore che si verifica è:

Errore irreversibile di PHP: exception Uncaught SoapFault: [WSDL] SOAP-ERROR: analisi WSDL: imansible caricare da ' http://www.example.com/index.php/api/v2_soap/index/wsdl/1/ ': imansible caricare l'entity framework; esterna " http://www.example.com/index.php/api/v2_soap/index/wsdl/1/ "

A quanto pare, il WSDL viene caricato, ma il file SOAP esterno che non include.


Codice di connessione PHP:

$client = new SoapClient('http://www.example.com/api/v2_soap?wsdl=1'); $session = $client->login('username', 'password'); 

Snip da v2_soap? Wsdl = 1 file:

 <service name="MagentoService"> <port name="Mage_Api_Model_Server_V2_HandlerPort" binding="typens:Mage_Api_Model_Server_V2_HandlerBinding"> <soap:address location="http://www.example.com/index.php/api/v2_soap/index/"/> </port> </service> 

La versione di Magento è 1.5.1.0 .

Questo problema è causato dal fatto che il server non è in grado di accedere al file dal computer locale. Quindi la ansible causa poteva essere il server DNS o / etc / hosts, ma in realtà era un file .htaccess che bloccava qualsiasi host tranne che dai nostri computer di sviluppo. Ciò ha provocato un errore Proibito 403, che ha provocato l'errore SOAP e così via ..

Recentemente ho riscontrato un problema simile su un server di sviluppo pubblico. Il problema era che stavo usando un file .htaccess per impedire l'uso non autorizzato del sito e ho dimenticato di aggiungere gli indirizzi IP del server alla list. Una volta che l'ho aggiunto, ha risolto il problema.

Assicurati di non avere regole che vietino l'accesso ai tuoi contenuti.

Assicurati che php.ini abiliti SSL. aggiungi questo al tuo file: extension = php_openssl.dll

Ho avuto questo problema e questo è stato risolto.

tl; dr: controlla il nome utente API e la chiave API.

Sfortunatamente, SOAP ti sta dando un messaggio di errore generico che potrebbe significare un numero di cose.

Un ansible candidato è un problema di routing, ovvero il server tenta di submit se stesso una richiesta ma fallisce, forse perché sta usando il proprio indirizzo IP pubblico per farlo e questo non funziona, a causa di ragioni.

Per vedere se questo è il caso sul tuo server, accedi ad esso (ad esempio con SSH) e prova a eseguire il ping del nome host. Se il ping funziona, il routing non è quasi certamente il problema. Se il ping fallisce, provare ad aggiungere il nome host nel file hosts (in genere / etc / hosts) con l'indirizzo IP 127.0.0.1 (o :: 1 se si utilizza IPv6).

Ma un'altra ansible ragione, e una che ho sperimentato di recente, è semplicemente che non hai fornito il nome utente API e la chiave API corretti. SOAP – alless, il modo in cui Magento lo implementa – non sembra avere una risposta di "accesso negato" o "login fallito". Per questo motivo, è inutile testare le funzioni API in un browser. http://www.example.com/api/v2_soap?wsdl=1 funziona in un browser poiché WSDL non è protetto da password. Ma l'endpoint stesso è, quindi http://www.example.com/index.php/api/v2_soap/index/ * fallirà.

Un'altra possibilità, hai cambiato il nome del dominio del tuo negozio di recente e non svuotare le cache dei "file di configuration del webservices"?

Sei su un account di hosting condiviso? È ansible che il tuo provider stia bloccando l'accesso alla port.

Questo errore potrebbe anche essere correlato ai codici SSL che il tuo server è impostato per utilizzare. L'attuale suite di codici raccomandata (notare che questi dovranno essere aggiornati nel tempo) è ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS .

Ovviamente dovresti seguire la procedura raccomandata per aggiornare il tuo sistema operativo pertinente ed i suoi codici SSL.


Se sul tuo server è in esecuzione Plesk Control Panel, versioni 11 in poi, esiste una soluzione particolare:

  1. Aggiorna il pacchetto 'openssl' alla versione 1.0 e successive.

  2. Abilita nginx:

    /usr/local/psa/admin/bin/nginxmng --enable

  3. Crea un model di dominio personalizzato per nginx:

    mkdir -p /usr/local/psa/admin/conf/templates/custom/domain/

    cp /usr/local/psa/admin/conf/templates/default/domain/nginxDomainVirtualHost.php /usr/local/psa/admin/conf/templates/custom/domain

  4. Modifica il file appena copiato:

    vi /usr/local/psa/admin/conf/templates/custom/domain/nginxDomainVirtualHost.php

    Cerca la row <?php if ($OPT['ssl']): ?> E inserisci quanto segue subito dopo:

    ssl_protocols TLSv1.1 TLSv1.2; ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;

    Salva il file.

  5. Riconfigurare i vhost.

    /usr/local/psa/admin/bin/httpdmng --reconfigure-all


Credito: questa correzione è documentata direttamente da Odin: http://kb.odin.com/en/120083

Vai a Admin Dash board> sistema> configuration> web> Ottimizzazione dei motori di ricerca> Usa riscrittura server web "Imposta su No"

Per me è stata la correzione.