2011-06-30 27 views
7

Estoy haciendo mi primer intento de conectarme a un servidor SOAP desde PHP, y no entiendo cómo iniciar sesión y obtener los datos que necesito El servicio al que intento conectarme es el servicio Hawley USA http://hawleyusa.com/thcServices/StoreServices.asmx). He estado viendo algunas publicaciones sobre cómo conectarme, y obtengo los conceptos básicos. Verifiqué que tengo habilitado SOAP en mi PHP, y estoy tratando de obtener una lista de inventario. Aquí está el código que estoy usando:"Error de referencia de objeto no establecido en una instancia de un objeto" al conectar al servidor SOAP desde PHP

<?php 
ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache 
$wsdl_path = "http://hawleyusa.com/thcServices/StoreServices.asmx?WSDL"; 

$login_id = 'mylogin_id'; 
$password = 'mypassword'; 

$client = new SoapClient($wsdl_path); 

try { 
    echo "<pre>\n"; 
    print($client->InventoryList(array("LoginID" => $login_id, "Password" => $password))); 
    echo "\n"; 
} 
catch (SoapFault $exception) { 
    echo $exception;  
} 

Sin embargo, cuando ejecuta este código, me sale este error:

SoapFault exception: [soap:Server] Server was unable to process request. ---> Object reference not set to an instance of an object. in /Users/steve/Sites/mysite/hawley_client.php:12 

Cuando la depuración, puedo ver la instancia $ cliente inicia, por lo que' No estoy seguro de por qué estoy recibiendo este error.

Segunda pregunta: ¿Estoy pasando la identificación de usuario y la contraseña correctamente?

Gracias.

actualización: Me tiró $ cliente -> __ getLastRequest, y esto es lo que tengo:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"    xmlns:ns1="http://hawleyusa.com/thcServices/"> 
<SOAP-ENV:Body> 
<ns1:InventoryList/> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

para que pueda ver lo que estoy perdiendo mi ID de usuario y contraseña. ¿Cómo los agrego a mi llamada a InventoryList?

+0

A partir del 2017/06/09, el WSDL no está disponible y la pregunta es incompleta ... – Alfabravo

Respuesta

21

Estás cerca. Al mirar el WSDL, el método InventoryList toma un objeto llamado "solicitud". Modificar su línea llamada ligeramente:

$client->InventoryList(array("request" => array("LoginId" => $login_id, "Password" => $password)); 
+0

Hmm, lo intenté antes, pero debo haber hecho algo mal. De todos modos, eso me acerca, pero ahora me sale este error: Error fatal capturable: el objeto de la clase stdClass no se pudo convertir a cadena en /Users/steve/Sites/mysite/hawley_client.php en la línea 15 Línea 15 es esta línea, por cierto Al mirar los encabezados, la información se envía correctamente ahora. – wonder95

+0

Major facepalm aquí: estaba usando print() con un objeto. Cambiado a var_dump, y funciona. Gracias. – wonder95

Cuestiones relacionadas