soapclient por enviar ejemplo php soap wsdl soap-client

php - por - Enviar entrada XML a WSDL usando SoapClient



web service php soap ejemplo (2)

Tengo este WSDL: https://secure.softwarekey.com/solo/webservices/XmlCustomerService.asmx?WSDL

Estoy intentando usar SoapClient para enviar una solicitud al método CustomerSearch .

El código que estoy usando es el siguiente:

$url = ''https://secure.softwarekey.com/solo/webservices/XmlCustomerService.asmx?WSDL''; $client = new SoapClient($url); $CustomerSearch = array( ''AuthorID'' => $authorID, ''UserID'' => $userID, ''UserPassword'' => $userPassword, ''Email'' => $customerEmail ); $xml = array(''CustomerSearch'' => $CustomerSearch); $result = $client->CustomerSearch(array(''xml'' => $xml));

Cuando ejecuto el código, obtengo la siguiente excepción de PHP:

Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object has no ''any'' property

También he intentado esto para el XML:

$xml = " <?xml version=/"1.0/" encoding=/"utf-8/"?> <CustomerSearch> <AuthorID>$authorID</AuthorID> <UserID>$userID</UserID> <UserPassword>$userPassword</UserPassword> <Email>$customerEmail</Email> </CustomerSearch> ";

Lo que me da los siguientes resultados (de un print_r):

object(stdClass)#4 (1) { ["CustomerSearchResult"]=> object(stdClass)#5 (1) { ["any"]=> string(108) "-2Invalid Xml Document" } }

La documentación dice que el XML de entrada debería verse más o menos así:

<CustomerSearch> <AuthorID></AuthorID> <UserID></UserID> <UserPassword></UserPassword> <SearchField></SearchField> <SearchField></SearchField> <!-- ...additional SearchField elements --> </CustomerSearch>

Soy bastante nuevo para Soap y he intentado meterme (pasando XML en bruto y mecanografiado) y parece que no funciona. Cualquier idea sobre lo que puedo estar haciendo mal sería muy apreciada.


intente pasar $client->CustomerSearch($CustomerSearch); o pasa una cuerda


Creo que debes buscar más en la documentación (con respecto a any parámetro). Pero su solicitud debería ser algo como esto:

$url = ''https://secure.softwarekey.com/solo/webservices/XmlCustomerService.asmx?WSDL''; $client = new SoapClient($url); $xmlr = new SimpleXMLElement("<CustomerSearch></CustomerSearch>"); $xmlr->addChild(''AuthorID'', $authorID); $xmlr->addChild(''UserID'', $userID); $xmlr->addChild(''UserPassword'', $userPassword); $xmlr->addChild(''Email'', $customerEmail); $params = new stdClass(); $params->xml = $xmlr->asXML(); $result = $client->CustomerSearchS($params);

EDITAR : Así es como lo hice en un proyecto similar. Puede que no sea la mejor práctica. SoapVar podría ser la mejor manera de hacerlo ( ejemplo de ANY_XML con ANY_XML ).