php - access dynamics crm 2011 with web services

倾然丶 夕夏残阳落幕 提交于 2019-12-08 15:47:16

问题


I have to access leads (create new lead and get the list) in crm 2011 through the web services. I already made an app in c#/asp.net(it works) but now i have to do it in php and i'm stuck.

i try: https://code.google.com/p/php-dynamics-crm-2011/ but it doesn't work because it supports only Federation authentication and mine it's active directory.

I try to connect with nusoap but it's very confusing.

I generate classes of discovery service and organization service with wsdl2php: http://www.urdalen.no/wsdl2php/ but i don't know what to do with the classes.

Someone has examples how to use these classes?


回答1:


MSCRM 2013 and probably 2011 are using NTLM for authentication the websevices.

For data query, you can use url encoded FetchXML

http://msdn.microsoft.com/en-us/library/gg328117.aspx

You can get the correct XML from CRM by exporting XML in Advanced search and execute the query with RetrieveMultiple method for example.

I'm adding an example with SOAP envelope and CURL POST query, authenticated with NTLM.

<?php

$soap_envelope = <<<END
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <RetrieveMultiple xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
      <query i:type="a:FetchExpression" xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts">
        <a:Query>&lt;fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'&gt;
          &lt;entity name='contact'&gt;
            &lt;attribute name='fullname' /&gt;
            &lt;attribute name='parentcustomerid' /&gt;
            &lt;attribute name='telephone1' /&gt;
            &lt;attribute name='emailaddress1' /&gt;
            &lt;attribute name='contactid' /&gt;
            &lt;order attribute='fullname' descending='false' /&gt;
            &lt;filter type='and'&gt;
              &lt;condition attribute='ownerid' operator='eq-userid' /&gt;
              &lt;condition attribute='statecode' operator='eq' value='0' /&gt;
            &lt;/filter&gt;
          &lt;/entity&gt;
        &lt;/fetch&gt;</a:Query>
      </query>
    </RetrieveMultiple>
  </s:Body>
</s:Envelope>
END;

$soap_action = 'http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/RetrieveMultiple';
$req_location = 'http://crm.server.local/YourOrganization/XRMServices/2011/Organization.svc/web';

$headers = array(
  'Method: POST',
  'Connection: Keep-Alive',
  'User-Agent: PHP-SOAP-CURL',
  'Content-Type: text/xml; charset=utf-8',
  'SOAPAction: "'.$soap_action.'"'
);

$user = 'YOURDOMAIN\YOURUSERNAME';
$password = '**********';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $req_location);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true );
curl_setopt($ch, CURLOPT_POSTFIELDS, $soap_envelope);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_USERPWD, $user.':'.$password);
$response = curl_exec($ch);

if(curl_exec($ch) === false)
{
  echo 'Curl error: ' . curl_error($ch);
}
else
{
  var_dump($response);
}


来源:https://stackoverflow.com/questions/16994238/php-access-dynamics-crm-2011-with-web-services

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!