Отправка ввода XML в WSDL с помощью SoapClient

У меня есть этот WSDL: https://secure.softwarekey.com/solo/webservices/XmlCustomerService.asmx?WSDL

Я пытаюсь использовать SoapClient для отправки запроса в CustomerSearch. метод.

Код, который я использую, выглядит следующим образом:

$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));

Когда я запускаю код, я получаю следующее исключение PHP:

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

Я также пробовал это для XML:

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

Что дает мне следующие результаты (из print_r):

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

В документации говорится, что входной XML должен выглядеть как-то так. нравится:

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

Я новичок в Soap, и я пытался возиться (передавая необработанные данные, набирая XML), и, похоже, не могу заставить это работать. Буду очень признателен за любое понимание того, что я могу делать неправильно.


person Axel    schedule 16.05.2013    source источник
comment
привет у меня тоже такая же проблема. Я попробовал то, что он(@denormalizer) предложил, это ‹/any› является проблемой Exception Error! SOAP-ERROR: Кодировка: объект не имеет свойства «любое»   -  person user1187    schedule 06.01.2015
comment
Как вы решили это, пожалуйста, дайте мне решение, спасибо   -  person user1187    schedule 06.01.2015
comment
Смотрите принятый ответ ниже.   -  person Axel    schedule 06.01.2015
comment
привет, Аксель, я попробовал приведенный ниже ответ с CustomerSearchS, он работает, но он не работает с CustomerSearch из-за ‹/any›, я думаю, он показывает ошибку. Я не знаю, это из-за того, что он показывает ошибку   -  person user1187    schedule 06.01.2015
comment
Пожалуйста, не могли бы вы помочь мне, спасибо, Аксель   -  person user1187    schedule 06.01.2015
comment
Я рекомендую вам открыть новый вопрос с кодом, который вы используете. Не забудьте включить полный код и полные сообщения об ошибках, которые вы получаете.   -  person Axel    schedule 06.01.2015
comment
я не знаю, в чем проблема, я новичок в wsdl, а также я задал вопрос по этому поводу   -  person user1187    schedule 06.01.2015
comment
но у меня нет правильного ответа на это   -  person user1187    schedule 06.01.2015
comment
Решение вашей проблемы в комментариях к несвязанному вопросу/ответу — не лучшее место, чтобы попытаться решить вашу проблему. Я призываю вас сосредоточиться на ответах на заданный вами вопрос. Я не могу помочь вам так же, как другие, более опытные в этом вопросе.   -  person Axel    schedule 06.01.2015
comment
stackoverflow.com/questions/27653095/ это мой вопрос, у меня нет правильного ответа   -  person user1187    schedule 06.01.2015
comment
Я понимаю, и я видел ваш вопрос. Пожалуйста, сосредоточьте обсуждение вашей проблемы на вашем собственном вопросе. Решение этого в этом разделе комментариев не является подходящим местом. Кто-то поможет вам, просто работайте с ними :)   -  person Axel    schedule 06.01.2015
comment
если вы знаете ответ, можете ли вы ответить на мой вопрос большое спасибо   -  person user1187    schedule 06.01.2015


Ответы (2)


Я думаю, вам нужно больше изучить документацию (что касается параметра any). Но ваш запрос должен быть примерно таким:

$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);

EDIT: вот как я сделал это в подобном проекте. Это может быть не лучшая практика. SoapVar может быть лучшим способом сделать это (SoapVoar пример с ANY_XML).

person denormalizer    schedule 17.05.2013
comment
Спасибо, это подвело меня к правильному пути. Я обновил ваш ответ точным кодом, который работал у меня. Вместо этого я использовал CustomerSearchS, так как вы можете передать XML в виде строки. Я также использовал addChild для создания правильного формата XML. - person Axel; 17.05.2013
comment
для меня я получаю эту ошибку Exception Error! SOAP-ERROR: Кодировка: объект не имеет свойства «любое» - person user1187; 06.01.2015
comment
$client-›CustomerSearch($params); когда я звоню в CustomerSearch, скажите мне причину этого - person user1187; 06.01.2015
comment
я имею в виду, что здесь есть - person user1187; 06.01.2015
comment
Я не совсем уверен, я задал этот вопрос более 2 лет назад. Если у вас возникла проблема, и приведенный выше код не работает, я бы рекомендовал скомпилировать код, который вы используете, в новый вопрос и задать его (включая все детали того, что вы пытаетесь сделать). - person Axel; 06.01.2015

попробуйте передать $client->CustomerSearch($CustomerSearch); или передать строку

person Rahul11    schedule 16.05.2013
comment
Я пробовал это. $client->CustomerSearch($CustomerSearch) возвращает ответ Invalid XML Document. - person Axel; 17.05.2013
comment
$result = $client-›CustomerSearch(array('xml' =› 'string')); xml определяется как строка - person Rahul11; 17.05.2013
comment
XML — это не строка, это массив. Я пытался передать XML в виде строки, я пытался передать XML через new SoapVar(xml, XSD_STRING);$, а затем передать его методу Soap. - person Axel; 17.05.2013