Попытка создать лидерство в динамическом CRM с помощью API в переполнении стека

Я пытаюсь создать лидерство в динамическом 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);

1

Решение

Этот код работает для динамического 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);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]