2012-05-19 3 views
3

Я пытаюсь извлечь некоторые данные из Microsoft Dynamics CRM 2011 Online, который находится на удаленном хосте; он работает, если я вручную (из браузера) зарегистрировался и выполнил мой с моего сервера, который запускает PHP на хосте Linux, но, конечно, я хочу аутентифицировать и запускать операции CRUD без моего посредничества :).PHP curl talk to Microsoft Dynamics CRM 2011

Но он продолжает показывать мне «Объект переместился сюда». страницы для аутентификации. Если я установил CURLOPT_FOLLOWLOCATION => 1, он отобразит страницу входа в систему crm.

Если кто-нибудь может предложить любую подсказку для урегулирования ситуации ... спасибо!

<?php 

$useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"; 
$urlValue = "/LeadSet?$select=Address1_City,FirstName,LastName"; 

$username = "domain\user"; 
$pass  = "pass"; 


$handle = curl_init();  
curl_setopt_array($handle, 
     array (
      CURLOPT_USERAGENT => $useragent, 
      CURLOPT_USERPWD => $username . ':' . $pass, 
      CURLOPT_HTTPAUTH => CURLAUTH_ANY, 
      CURLOPT_SSL_VERIFYPEER => false, 
      CURLOPT_SSL_VERIFYHOST => false, 
      CURLOPT_URL => 'https://myhost.com/xrmservices/2011/OrganizationData.svc', 
      CURLOPT_POST => 1, 
      CURLOPT_POSTFIELDS  => $urlValue, 
      CURLOPT_RETURNTRANSFER => true, 
     ) 
); 

$response = curl_exec($handle); 
curl_close($handle); 

header('Content-Type: text/plain;'); 
print_r($response); 
+0

действительно ли он использует * http authentication *? Я предполагаю, что это не так, потому что вы говорите, что оно перенаправляется на форму входа в систему, и, как правило, когда ваш браузер представлен фактической формой входа в html, результирующее состояние входа в систему поддерживается через файлы cookie, а не HTTP-аутентификацию. убедиться. – goat

+0

@chris он не соскабливает. Он использует [Odata REST API для Microsoft Dyanmic CRM 2011] (http://msdn.microsoft.com/en-us/library/gg309461.aspx). Он использует [Обычная проверка подлинности] (http://msdn.microsoft.com/en-us/data/gg192997.aspx). –

ответ

1

Я боюсь, что у меня есть ответ на мой собственный вопрос, что я пытаюсь для того чтобы достигнуть не возможно, из-за этого: аутентификация возможна только в приложении.

Как было отмечено здесь:

http://msdn.microsoft.com/en-us/library/gg334279

И я пытаюсь проверить подлинность с удаленного сайта.

+0

Примите это как ответ. –

1

Помогает ли добавить следующую опцию CURL?

CURLOPT_HTTPAUTH => CURLAUTH_NTLM 

Это сделало трюк для меня. По-видимому, сервер, к которому я подключаюсь, не поддерживает базовую HTTP-аутентификацию, но поддерживает NTLM. Могу помочь в вашем случае.

+0

была thad microsoft динамика 2011 crm? Я тоже пробовал NTLM. Но это не помогло. В конце я решил проблему с использованием библиотеки SOAP-подключений – NenadP

+0

Да, это было с Dynamics 2011. Кстати, вы можете подключиться к интерфейсу остального с вашим веб-браузером? Это может помочь оценить, какую аутентификацию использует ваш веб-браузер (именно так я узнал, что должен использовать аутентификацию NTLM). – Geert

+0

Мне было нужно, чтобы это автоматически срабатывало без моего вмешательства, поэтому я все равно отказался от этого подхода. Спасибо за подсказки, ты. Я попытался немного поработать с Fiddler. – NenadP

2

Я решаю da problem сделать аутентификацию по ntml, этот код показывает, как извлекать контакты из CRM в формате JSON.

$url='http://<server_adress>/organizationName/XRMServices/2011/OrganizationData.svc/ContactSet'; 
$ch = curl_init(); 
$headers = array(
     'Method: GET', 
     'Connection: keep-alive', 
     'User-Agent: PHP-SOAP-CURL', 
     'Content-Type: application/json; charset=utf-8', 
     'Accept: application/json', 
     'Host <server network adress>'); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM); 
curl_setopt($ch, CURLOPT_USERPWD, '<user>:<password>'); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
$response = curl_exec($ch); 
curl_close($ch); 
//echo $response; 
$array=json_decode($response, true); 
$size=count($array['d']['results']); 
echo "Numero de registos:".$size."<p>"; 
echo "Contactos:<p>"; 
for($i=0;$i<$size;$i++){ 
echo "Nome: ". $array['d']['results'][$i]['FullName']."<p>"; 
echo "Cidade: ". $array['d']['results'][$i]['Address1_City']."<p>"; 
echo "Emprego: ". $array['d']['results'][$i]['JobTitle']."<p>"; 
echo "Morada: ". $array['d']['results'][$i]['Address1_Name']."<p>"; 
echo "Telefone: ". $array['d']['results'][$i]['Address1_Telephone1']."<p>"; 
echo "Email: ". $array['d']['results'][$i]['EMailAddress1']."<p>"; 
echo "Pais: ". $array['d']['results'][$i]['Address1_Country']."<p>"; 
echo "Codigo-postal: ". $array['d']['results'][$i]['Address1_PostalCode']."<p>"; 
echo "Criado por: ". $array['d']['results'][$i]['CreatedBy']['Name']."<p>"; 
echo "...................................................................................<p>";  
} 

Если кто-то знает, как делать операции crud в конечной точке отдыха, пожалуйста, скажите мне.

Смежные вопросы