Я пытаюсь создать лидерство в динамическом CRM, используя API в PHP, но получаю 400 html-ошибок. В моем динамическом CRM используется проверка подлинности Active Directory. Я могу успешно получить ведущий список, используя API, но не могу его создать. Вот мой код:
$xml = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <Create xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <entity xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts"> <a:Attributes xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic"> <a:KeyValuePairOfstringanyType> <b:key>Firstname/b:key> <b:value i:type="c:string" xmlns:c="http://www.w3.org/2001/XMLSchema">TestTopic</b:value> </a:KeyValuePairOfstringanyType> <a:KeyValuePairOfstringanyType> <b:key>Lastname</b:key> <b:value i:type="c:string" xmlns:c="http://www.w3.org/2001/XMLSchema">testName</b:value> </a:KeyValuePairOfstringanyType> </a:Attributes> <a:EntityState i:nil="true" /> <a:FormattedValues xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic" /> <a:Id>00000000-0000-0000-0000-000000000000</a:Id> <a:LogicalName>lead</a:LogicalName> <a:RelatedEntities xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic" /> </entity> </Create> </s:Body></s:Envelope>'; $headers = array ( "POST " . "/Organization.svc" . " HTTP/1.1", "Host: " . $host, "Connection: Keep-Alive", "Content-type: application/SOAP+xml; charset=UTF-8" //,"Content-length: " . strlen ( $xml ) ); $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, $crm_url . "/XRMServices/2011/Organization.svc" ); //curl_setopt($ch, CURLOPT_HTTPHEADER, array('"POST " . "/Organization.svc" . " HTTP/1.1","Host: " . $host,"Connection: Keep-Alive","Content-type: application/json; charset=UTF-8"')); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt ( $ch, CURLOPT_TIMEOUT, 60 ); curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false ); curl_setopt ( $ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 ); curl_setopt ( $ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM); curl_setopt ( $ch, CURLOPT_USERPWD, "$username:$password"); curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers ); curl_setopt ( $ch, CURLOPT_POST, 1 ); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $xml ); $response = curl_exec($ch); if( $response === false) { echo 'Curl error: ' . curl_error($ch);} $status = curl_getinfo( $ch, CURLINFO_HTTP_CODE );echo "Status: $status "; $response=json_decode($response, true); print_r($response); curl_close($ch);
Этот код работает для динамического crm on-premise 2015, который использует аутентификацию Active Directory.
$host = 'orgcrm.org.com:5555'; // org crm url without https:// $organization = 'OrgName'; $crm_url = "https://$host/$organization/"; $headers = array( 'Method: POST', 'Connection: keep-alive', 'User-Agent: PHP-SOAP-CURL', 'Content-Type: application/json; charset=utf-8', 'Accept: application/json', 'Host: ' . $host); $create = json_encode(array('FirstName' => $firstname, 'LastName' => $lastname, 'Telephone1' => $tel, 'EMailAddress1' => $email), JSON_FORCE_OBJECT); $ch = curl_init(); curl_setopt ( $ch, CURLOPT_URL, $crm_url . "/XRMServices/2011/OrganizationData.svc/LeadSet" ); curl_setopt ( $ch, CURLOPT_USERPWD, "$username:$password"); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $create); curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true); curl_setopt ( $ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt ( $ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM); //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($ch); if( $response === false) { echo 'Curl error: ' . curl_error($ch);} $status = curl_getinfo( $ch, CURLINFO_HTTP_CODE );echo "Status: $status "; $response1 = json_decode($response, true); foreach ($response1 as $id) { $guid = $id['LeadId']; echo 'GUID: ' . $guid. ' '; } print_r($response1); curl_close($ch);