Я использую PHP5 и Codeigniter для подключения к веб-сервису .NET через запросы SOAP. У меня проблемы с обновлением этого набора данных. Это мой первый опыт работы с Codeigniter (хотя здесь он мало учитывается), SOAP, классом PHP SimpleXML и веб-сервисами .NET в целом. Например, это обновить профиль пользователя. У меня нет проблем с получением ответов, но я не уверен, как обновить это, основываясь на изменениях пользователя в профиле.
Моя строка из запроса на дамп: (Примечание: меня интересует 0, которое является началом набора данных. 1111 - это имя пользователя, а следующие 1111 - пароль)
11111111 0RandyFloydGM1955-11-05T00: 00: 00-04: 00317787129131789770001910 Проспект Э. МарквудаIndianapolisIN46227falsefalse
Это дает мне ошибку 400 Bad Request. Кажется очевидным, что это происходит из-за пробела между 0 и последним 1. Делая htmlspecialchars (), я вижу, что, похоже, объявление xml не нужно.
<?xml version="1.0"?> <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml- msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"><dsEmployee xmlns="http://SHSSrv/dsEmployee.xsd"><Employee diffgr:id="Employee1" msdata:rowOrder="0"><EmplId>0</EmplId><FirstName>Randy</FirstName><LastName>Floyd</LastName><MI>G</MI><Sex>M</Sex><DOB>1955-11-05T00:00:00-04:00</DOB><HomePhoneArea>317</HomePhoneArea><HomePhone>7871291</HomePhone><WorkPhoneArea>317</WorkPhoneArea><WorkPhone>8977000</WorkPhone><Address1>1920 E. Markwood Avenue</Address1><Address2/><City>Indianapolis</City><St>IN</St><ZIP>46227</ZIP><ReceiveNewsLetter>false</ReceiveNewsLetter><PagerArea/><PagerNo/><EmailAddress>randy@test.com</EmailAddress><SpanishContact>false</SpanishContact></Employee></dsEmployee></diffgr:diffgram>
Взяв исходный ответ и просто отправив его обратно в качестве обновления, работает следующим образом.
111111110RandyFloydGM1955-11-05T00: 00: 00-04: 00317787129131789770001910 E. Markwood AvenueIndianapolisIN46227falsefalse
И с htmlspecialchars () выглядит так (без объявления XML):
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml- msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"><dsEmployee xmlns="http://SHSSrv/dsEmployee.xsd"><Employee diffgr:id="Employee1" msdata:rowOrder="0"><EmplId>0</EmplId><FirstName>Randy</FirstName><LastName>Floyd</LastName><MI>G</MI><Sex>M</Sex><DOB>1955-11-05T00:00:00-04:00</DOB><HomePhoneArea>317</HomePhoneArea><HomePhone>7871291</HomePhone><WorkPhoneArea>317</WorkPhoneArea><WorkPhone>8977000</WorkPhone><Address1>1920 E. Markwood Avenue</Address1><Address2/><City>Indianapolis</City><St>IN</St><ZIP>46227</ZIP><ReceiveNewsLetter>false</ReceiveNewsLetter><PagerArea/><PagerNo/><EmailAddress>randy@test.com</EmailAddress><SpanishContact>false</SpanishContact></Employee></dsEmployee></diffgr:diffgram>
Вот код:
function employee_update_request()
{
ini_set( 'soap.wsdl_cache_ttl' , 0 );
//Get XML from the Employee Profile Request
$response = $this->employee_profile_request();
//Turn the string into an object to manipulate
$dataset = simplexml_load_string($response->any);
//Manipulate some data from the update form
$dataset->dsEmployee->Employee->EmailAddress = "randy@test.com";
$dataset->dsEmployee->Employee->Address1 = "1920 E. Markwood Avenue";
$any = $dataset->saveXML();
//Add back the string to the original response object returned from web service
$response->any = $any;
//Get username and password for the params
$username = $this->session->userdata('username');
$password = $this->session->userdata('password');
$params = array('sUserId' => $username, 'sPassword' => $password, 'dsEmployee' => $response);
//SOAP Options
$options = array(
'soap_version'=>SOAP_1_1,
'exceptions'=> 0,
'trace'=> 1,
'uri' => "http://www.w3.org/2003/05/soap-envelope"
);
//New soap client with options
$client = new SoapClient('http://localhost/SHSSRV/SHSSrv.asmx?WSDL', $options);
//Request the employee profile fromt the webservice, passing in credentials
$update_request = $client->EmployeeUpdateRequest($params);
$update_response = $update_request->EmployeeUpdateRequestResult;
return $update_response;
}
Мне действительно нужна помощь, мне нужно выяснить, как лучше всего обновлять эти данные. Могу ли я каким-то образом удалить объявление или мне следует попросить каким-либо образом изменить веб-сервис .NET? У меня нет прямого доступа к этому, но я могу поговорить с разработчиком, если есть лучший способ все вместе.
Спасибо!