#php #web-services #curl #soap
#php #веб-сервисы #завиток #мыло
Вопрос:
Я должен отправить некоторые данные на сервер с помощью SOAP. Я реализовал это, но я получаю сообщение об ошибке.
Ошибка не является ошибкой SOAP или PHP etc, это результат ошибки из-за их прикладного протокола.
Другая сторона настаивает на том, что это потому, что я отправляю данные SOAP1.1, и им требуется SOAP1.2. Насколько я могу судить, я отправляю 1.2.
Чтобы проверить, я создал простую страницу на своем сервере для сбора заголовков и данных, чтобы я мог видеть, что на самом деле отправляется.
Я что-то упускаю, или, основываясь на том, что я отправляю ниже, это на самом деле SOAP1.2, как я подозреваю?
PS, я проверил эту статью, чтобы получить больше информации о различиях: http://wso2.com/library/articles/differentiating-between-soap-versions-looking-soap-message/Спасибо миллион,
Джон
Заголовки:
SERVER: Array
(
[CONTENT_LENGTH] => 1286
[CONTENT_TYPE] => application/soap xml; charset=utf-8
[DOCUMENT_ROOT] => /home/viewport/public_html
[GATEWAY_INTERFACE] => CGI/1.1
[GEOIP_ADDR] => 1.2.3.4
[HTTP_ACCEPT] => */*
[HTTP_EXPECT] => 100-continue
[HTTP_HOST] => example.com
[PATH] => /bin
[QUERY_STRING] =>
[REDIRECT_STATUS] => 200
[REMOTE_ADDR] => 1.2.3.4
[REMOTE_PORT] => 46608
[REQUEST_METHOD] => POST
[REQUEST_URI] => /soap/index.php
[SCRIPT_FILENAME] => /home/example/public_html/soap/index.php
[SCRIPT_NAME] => /soap/index.php
[SERVER_ADDR] => 11.1.1.1
[SERVER_ADMIN] => root@localhost
[SERVER_NAME] => example.com
[SERVER_PORT] => 80
[SERVER_PROTOCOL] => HTTP/1.1
[SERVER_SIGNATURE] =>
[SERVER_SOFTWARE] => Apache
[UNIQUE_ID] => WASuooHowGwAAFv9EK4AAAAB
[PHP_SELF] => /soap/index.php
[REQUEST_TIME] => 1476701858
)
и данные:
xml: <?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<EditionContactCustomer xmlns="http://tempuri.org/">
<Title>Spares</Title>
<FirstName>John</FirstName>
<Surname>Mc</Surname>
<AddressLine1></AddressLine1>
<PostTown>plett</PostTown>
<County>Western Cape</County>
<PostCode></PostCode>
<email>john@example.com</email>
<TelephoneNumber>081</TelephoneNumber>
<MobileNumber>081</MobileNumber>
<WorkTelephoneNumber></WorkTelephoneNumber>
<Notes>this is a test note.</Notes>
<ContactDate>2016-10-17</ContactDate>
<ContactTime>10:57:38</ContactTime>
<VehicleRecordID></VehicleRecordID>
<IntroductionSource>Existing</IntroductionSource>
<EnquirySource>WEB</EnquirySource>
<EnquiryType>WEB_FORM</EnquiryType>
<GUID></GUID>
<ReferenceID></ReferenceID>
<UserName></UserName>
<LinkUrl></LinkUrl>
<ImageData></ImageData>
</EditionContactCustomer>
</soap12:Body>
</soap12:Envelope>
Комментарии:
1. Каков ваш фактический PHP-код?
2. извините, я забыл упомянуть, что я на самом деле не использую SOAP-клиент. Я просто создаю xml, а затем использую curl для его публикации. Приведенный выше результат является результатом публикации curl..
3. Но …… почему?
Ответ №1:
Чтобы правильно отправить SOAP 1.2, вам нужен правильный параметр «soap_version» в конструкции SoapClient.
$client = new SoapClient($url, array(
"soap_version" => SOAP_1_2,
"login" => "username",
"password" => "password"
));
Где $url — это ваше местоположение WSDL, онлайн или файл://