Dick Montage Posted May 19, 2009 Share Posted May 19, 2009 I'm looking at getting PHP talking to SharePoint... Initially just posting an item to a SharePoint list from PHP. SharePoint exposes a number of web services (http://niklouch.activesharepoint.com/phpint/_vti_bin/Lists.asmx?WSDL). I am trying to talk to these using SOAP (via the nuSoap PHP library). I believe I am using it correctly but possibly not. The response I am getting from the server is debugged here (http://www.niklouch.com/sites/work/php_sp/test2.php) - basically: "Server was unable to process request. --> The root element is missing." Has anyone worked on something like this before? For reference: SharePoint SOAP WSDL: http://niklouch.activesharepoint.com/phpin...Lists.asmx?WSDL SharePoint WebService: http://niklouch.activesharepoint.com/work/...UpdateListItems My debugged output: http://www.niklouch.com/sites/work/php_sp/test2.php Code: <?PHP /* Requires the NuSOAP library */ require_once('nusoaplib/nusoap.php'); /* Username and password, separated by a colon. Domain may be optional, depending on setup */ $auth = "webtest:webtest"; /* Location of the Lists.asmx file */ $wsdl = "http://niklouch.activesharepoint.com/phpint/_vti_bin/Lists.asmx?WSDL"; /* GUID of the list */ $guid = "{48A2B76C-2E23-4ED0-9C12-DC98897C228A}"; /* Setup NuSOAP. Sharepoint requires NTLM Authorization. Recent version of CURL needed for this */ $client = new nusoap_client($wsdl, true); $client->setCredentials("","","ntlm"); $client->setCurlOption(CURLOPT_USERPWD, $auth); $err = $client->getError(); if ($err) { echo '<h2>Constructor error</h2><pre>' . $err . '</pre>'; echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->getDebug(), ENT_QUOTES) . '</pre>'; exit(); } /* XML for the request */ $xml = ' <UpdateListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/"> <listName>'.$guid.'</listName> <updates> <Batch> <Method ID="1" Cmd="New"> <Field Name="ID" /> <Field Name="Title">My Title</Field> </Method> </Batch> </updates> </UpdateListItems> '; /* Invoke the Web Service */ $result = $client->call('UpdateListItems', $xml); /* Check for Errors */ if(isset($fault)) { echo("<h2>Error</h2>". $fault); } /* Debugging Info */ echo("<h2>Request</h2><pre>" . htmlspecialchars($client->request, ENT_QUOTES) . "</pre>"); echo("<h2>Response</h2><pre>" . htmlspecialchars($client->response, ENT_QUOTES) . "</pre>"); echo("<h2>Debug</h2><pre>" . htmlspecialchars($client->debug_str, ENT_QUOTES) . "</pre>"); unset($client); ?> Link to comment Share on other sites More sharing options...
0 Dick Montage Posted May 20, 2009 Author Share Posted May 20, 2009 Anyone? Link to comment Share on other sites More sharing options...
0 jokeripa Posted May 20, 2009 Share Posted May 20, 2009 How much data are you posting? Post something much smaller, if that works then try increasing your request timeout time. Link to comment Share on other sites More sharing options...
0 Dick Montage Posted May 20, 2009 Author Share Posted May 20, 2009 Oh I'm posting 1 item with just a title, nothing more. Never really got into the whole web services over PHP thing. May need to try another webservice (simpler) first and then move on to this... But it's been set as my "Get this working for your 1st day of work" task for my new job! :s Link to comment Share on other sites More sharing options...
0 jokeripa Posted May 20, 2009 Share Posted May 20, 2009 Yeah, I'm not the best person to ask either, however the above worked once for me doing something similar. Maybe the problem is that you are only posting a title? I'm assuming theres a content section this title is applied to (unless its a name of a directory or something?) That could possibly be what its relating to when returning 'The root element is missing'. EDIT: Btw, what the new job? Your confused smiley makes it seem your not sure why they asked you do this.. are you being asked to do this by those who think that because your in the I.T department somewhere you should know all everything computer related ever? Link to comment Share on other sites More sharing options...
0 Dick Montage Posted May 20, 2009 Author Share Posted May 20, 2009 LOL - no I made a sharepoint list that just contains a title, nothing more. And the confused smiley is sorta because this was not advertised as part of the role, but I mentioned I was also a SharePoint developer, and so they sprung into "Wow - we want a SharePoint connector for our product"... Makes sense totally, but PHP and SharePoint are two languages never destined to play well together, and "SharePoint development" to me has always been within either the SharePoint environment or at least with .net based languages - so I can use the .net libraries... It would be a VERY cool piece of engineering, and I know how I wanna make it - but it just isn't seeming to work. Link to comment Share on other sites More sharing options...
0 jokeripa Posted May 21, 2009 Share Posted May 21, 2009 I'm really not sure.. Never tried using PHP with any other language yet, just starting to really get to grips with PHP itself only recently. This is probably wrong, but when I go to activesharepoint.com it asks me to login to web2003.activeisp.com, is it possible your wsdl variable is set to the wrong target? Link to comment Share on other sites More sharing options...
0 AnthonySterling Posted June 2, 2009 Share Posted June 2, 2009 I would guess you're sending a new line character of sorts before your XML payload, apply trim to $xml prior to invoking the SOAP call. Link to comment Share on other sites More sharing options...
0 Muhammad Kamran Rafi Posted December 16, 2011 Share Posted December 16, 2011 Is it necessary for NuSoap library that the sharepoint site must allow anonymous access? Well, I want to do the same but I am not able to do. I searched alot and alot but didn't find any solution which worked for me :( Can you please help. Thanks Link to comment Share on other sites More sharing options...
Question
Dick Montage
I'm looking at getting PHP talking to SharePoint... Initially just posting an item to a SharePoint list from PHP.
SharePoint exposes a number of web services (http://niklouch.activesharepoint.com/phpint/_vti_bin/Lists.asmx?WSDL).
I am trying to talk to these using SOAP (via the nuSoap PHP library).
I believe I am using it correctly but possibly not. The response I am getting from the server is debugged here (http://www.niklouch.com/sites/work/php_sp/test2.php) - basically:
Has anyone worked on something like this before?
For reference:
SharePoint SOAP WSDL: http://niklouch.activesharepoint.com/phpin...Lists.asmx?WSDL
SharePoint WebService: http://niklouch.activesharepoint.com/work/...UpdateListItems
My debugged output: http://www.niklouch.com/sites/work/php_sp/test2.php
Code:
Link to comment
Share on other sites
8 answers to this question
Recommended Posts