tutorial services sales_order info php soap magento wsdl

php - services - magento web service tutorial



No se puede conectar a Magento SOAP API v2 debido a que "no se pudo cargar la entidad externa" (8)

No puedo conectarme a Magento SOAP API v2 mediante PHP. El error que se produce es:

Error grave de PHP: excepción de SoapFault no detectada: [WSDL] SOAP-ERROR: Análisis WSDL: No se pudo cargar desde '' http://www.example.com/index.php/api/v2_soap/index/wsdl/1/ '': no se pudo cargar la entidad externa " http://www.example.com/index.php/api/v2_soap/index/wsdl/1/ "

Como parece, el WSDL se está cargando, pero el archivo SOAP externo que no incluye.

Código de conexión PHP:

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

Recortar de v2_soap? Wsdl = 1 archivo:

<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 versión de 1.5.1.0 es 1.5.1.0 .


¿Estás en una cuenta de hosting compartido? Es posible que su proveedor esté bloqueando el acceso al puerto.


Asegúrese de que php.ini habilita SSL. agrega esto a tu archivo: extension = php_openssl.dll

Tuve este problema y eso fue lo que lo arregló.


Este error también podría estar relacionado con los cifrados SSL que su servidor está configurado para usar. El conjunto de cifrados recomendado actual (tenga en cuenta que estos deberán actualizarse a tiempo) es 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 .

Obviamente, debe seguir el procedimiento recomendado para actualizar su sistema operativo relevante y sus cifrados SSL.

Si su servidor está ejecutando Plesk Control Panel, versiones 11 en adelante, hay una solución particular:

  1. Actualice el paquete ''openssl'' a la versión 1.0 y superior.

  2. Habilitar nginx:

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

  3. Cree una plantilla de dominio personalizada para 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. Edite el archivo que acaba de copiar:

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

    Busque la línea <?php if ($OPT[''ssl'']): ?> E inserte lo siguiente inmediatamente después:

    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;

    Guarda el archivo.

  5. Reconfigure los vhosts.

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

Crédito: Odin documenta esta solución directamente: http://kb.odin.com/en/120083


Este problema se debe a que el servidor no puede acceder al archivo desde la máquina local. Por lo tanto, la causa posible podría haber sido el servidor DNS o / etc / hosts, pero en realidad fue un archivo .htaccess que bloquea cualquier host, excepto desde nuestras computadoras de desarrollo. Esto dio lugar a un error 403 Prohibido, que resultó en un error de SOAP y así sucesivamente ..



Recientemente he experimentado un problema similar en un servidor de desarrollo orientado al público. El problema era que estaba usando un archivo .htaccess para evitar el uso no autorizado del sitio y olvidé agregar las propias direcciones IP del servidor a la lista. Una vez que lo agregué, resolvió el problema.

Asegúrese de no tener ninguna regla que prohíba el acceso a su contenido.


Vaya a Tablero de administración> sistema> configuración> web> Optimización de motor de búsqueda> Usar reescritura del servidor web "Definirlo en No"

Para mí fue la solución.


tl; dr: comprueba el nombre de usuario de la API y la clave de la API.

Desafortunadamente, SOAP le está dando un mensaje de error genérico que podría significar varias cosas.

Un posible candidato es un problema de enrutamiento, es decir, el servidor intenta enviarse una solicitud, pero falla, tal vez porque utiliza su propia dirección IP pública para hacerlo y esto no funciona, debido a razones.

Para ver si este es el caso en su servidor, inicie sesión en él (por ejemplo, con SSH) e intente hacer ping al nombre del host. Si el ping funciona, es casi seguro que el enrutamiento no es el problema. Si el ping falla, intente agregar el nombre de host en su archivo de hosts (generalmente / etc / hosts) con la dirección IP 127.0.0.1 (o :: 1 si está en IPv6).

Pero otra posible razón, y una que experimenté recientemente, es simplemente que no ha proporcionado el nombre de usuario y la clave API correctos. SOAP (al menos, la forma en que Magento lo implementa) no parece tener una respuesta de "acceso denegado" o "inicio de sesión fallido". Debido a esto, es imposible probar las funciones de la API en un navegador. http://www.example.com/api/v2_soap?wsdl=1 funciona en un navegador ya que el WSDL no está protegido por contraseña. Pero el punto final en sí mismo es, por lo que http://www.example.com/index.php/api/v2_soap/index/ * fallará.

Otra posibilidad, ¿cambió el nombre de dominio de su tienda recientemente y no vació los cachés de "archivos de configuración de servicios web"?