Я - веб-разработчик, работающий на заднем конце моего сайта. Они хотят интегрировать свою существующую систему CRM с новым сайтом, поэтому сайт может выполнять CRUD-запросы против системы. Тем не менее, я изо всех сил пытаюсь успешно аутентифицироваться в системах Microsoft, и мне бы хотелось, чтобы кто-то помог спланировать лучшую стратегию, чтобы получить эту работу.Интеграция между MS Dynamics CRM 2013 и LAMP
Обзор системы:
Сервер: MS Dynamics CRM 2013 (Интернет облицовочного развертывание), с помощью Active Directory для проверки подлинности
Клиента: ЛАМПЫ (Буду стереосистему и обновите Drupal 7, но это немного, я на самом деле знаю ! как использовать)
во-первых, я попробовал метод аутентификации описан ниже, в «Откройте для конечной точки URL OAuth» раздела:
http://msdn.microsoft.com/en-gb/library/dn531009.aspx#bkmk_oauthurl
Для этого я использовал следующий завиток из командной строки:
curl -H "Authorization: Bearer" http://crm.example.com/XRMServices/2011/Organization.svc -v
который дает следующий результат:
* Hostname was NOT found in DNS cache
* Trying xx.xx.xx.xx...
* Connected to crm.example.com (xx.xx.xx.xx) port 80 (#0)
> GET /XRMServices/2011/Organization.svc HTTP/1.1
> User-Agent: curl/7.35.0
> Host: crm.example.com
> Accept: */*
> Authorization: Bearer
>
< HTTP/1.1 200 OK
< Cache-Control: private
< Content-Length: 3165
< Content-Type: text/html; charset=UTF-8
* Server Microsoft-IIS/8.0 is not blacklisted
< Server: Microsoft-IIS/8.0
< X-AspNet-Version: 4.0.30319
< Set-Cookie: ReqClientId=ee9c75fe-db2e-4775-a71e-c2708c46748b; expires=Tue, 14-Oct-2064 09:16:06 GMT; path=/; HttpOnly
< X-Powered-By: ASP.NET
< Date: Tue, 14 Oct 2014 09:16:06 GMT
<
<HTML>...
Но нет упоминания о разрешительном :(URI
I также попробовал ту же команду с URL-адресами, заканчивающимися «discovery.svc», «organization.svc/web», «discovery.svc/web». Последние два действительно включают в себя поле «WWW-Authenticate» в ответ следующим образом:
< WWW-Authenticate: Negotiate
< WWW-Authenticate: NTLM
Который ведет меня поверить, что я пытался неправильный метод и следует искать в проверке подлинности NTLM МС.
Я установил, что PHP-cURL может использовать NTLM, поэтому мой второй подход включал отправку SOAP-запроса из кода. Аналогично коду в этой StackOverflow теме:
php - access dynamics crm 2011 with web services
Вот мой код:
//sample SOAP envelope from StackOverflow thead
$SOAPEnv = <<<ENV
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<Execute xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<request i:type="b:AssignRequest"
xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts"
xmlns:b="http://schemas.microsoft.com/crm/2011/Contracts">
<a:Parameters xmlns:c="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
<a:KeyValuePairOfstringanyType>
<c:key>Target</c:key>
<c:value i:type="a:EntityReference">
<a:Id>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</a:Id>
<a:LogicalName>account</a:LogicalName>
<a:Name i:nil="true" />
</c:value>
</a:KeyValuePairOfstringanyType>
<a:KeyValuePairOfstringanyType>
<c:key>Assignee</c:key>
<c:value i:type="a:EntityReference">
<a:Id>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</a:Id>
<a:LogicalName>systemuser</a:LogicalName>
<a:Name i:nil="true" />
</c:value>
</a:KeyValuePairOfstringanyType>
</a:Parameters>
<a:RequestId i:nil="true" />
<a:RequestName>Assign</a:RequestName>
</request>
</Execute>
</s:Body>
</s:Envelope>
ENV;
$headers = array(
'Method: POST',
'Connection: Keep-Alive',
'User-Agent: PHP-SOAP-CURL',
'Content-Type: text/xml; charset=utf-8',
"SOAPAction: http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute",
);
$url = 'http://crm.example.com/XRMServices/2011/Organization.svc/web';
$username = 'myusername';
$password = '[email protected]';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $SOAPEnv);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$output = curl_exec($ch);
И это даст ответ SOAP:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">a:FailedAuthentication</faultcode>
<faultstring xml:lang="en-GB">Access is denied.</faultstring>
</s:Fault>
</s:Body>
</s:Envelope>
отрадно, что это Ответ SOAP, поэтому я чувствую, что я рядом. Это, безусловно, аутентификация с учетными данными, которые я предоставляю, потому что, если я их изменю, я не получу SOAP. Но я считаю, что должен быть еще один уровень аутентификации, чтобы конечная точка SOAP знала, что я законный клиент.
Так что я немного застрял, поскольку документация по использованию SOAP с Dynamics, похоже, написана с точки зрения SDK от Microsoft, и, конечно же, не помогает кому-то из моего опыта, который знает только PHP.
Если бы кто-нибудь мог ответить на мой подход, я был бы очень признателен. Если бы вы могли указать мне в правильном направлении, чтобы продолжить дальше, это было бы еще лучше. И у меня не хватает времени на проект, поэтому выложите это экспертам.Пожалуйста, обратите внимание, что я относительно новый разработчик так заранее извиняюсь, если у вас есть немой вниз ваши ответы немного :)
Большое спасибо, Ashwah
Как вы собираетесь это делать? Вы сделали какой-то прогресс? Я потратил немного времени на подключение Drupal к CRM Online. У меня есть работа, но я никогда не взламывал головоломку Active Directory. Мои расследования находятся в моем блоге. http://crmtroubleshoot.blogspot.com.au/search/label/soap Active Directory - SOAP - CRM, похоже, является повторяющимся вопросом о stackoverflow, и я бы с удовольствием узнал, если вы это выяснили – Campey
Завершено не делая сами аутентификацию. Придется использовать разработчика MS для создания некоторого промежуточного программного обеспечения, чтобы поговорить с Dynamics API. Жаль, что так сложно сделать что-то вроде этой кросс-платформы. Хотя, возможно, для лучшего удобства, это означало, что мы могли бы воспользоваться некоторыми более функциональными функциями CRM. – AshTheSmash