简体   繁体   English

php - 访问动态crm 2011与Web服务

[英]php - access dynamics crm 2011 with web services

I have to access leads (create new lead and get the list) in crm 2011 through the web services. 我必须通过Web服务访问crm 2011中的潜在客户(创建新的潜在客户并获取列表)。 I already made an app in c#/asp.net(it works) but now i have to do it in php and i'm stuck. 我已经在c#/ asp.net中创建了一个应用程序(它可以工作),但现在我必须在php中完成它并且我被卡住了。

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. 我尝试: https//code.google.com/p/php-dynamics-crm-2011/,但它不起作用,因为它只支持联合身份验证并挖掘它的活动目录。

I try to connect with nusoap but it's very confusing. 我尝试与nusoap连接,但这非常令人困惑。

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. 我使用wsdl2php生成发现服务和组织服务类: http ://www.urdalen.no/wsdl2php/但我不知道如何处理这些类。

Someone has examples how to use these classes? 有人举例说明如何使用这些类?

MSCRM 2013 and probably 2011 are using NTLM for authentication the websevices. MSCRM 2013和2011年可能正在使用NTLM对web服务进行身份验证。

For data query, you can use url encoded FetchXML 对于数据查询,您可以使用url编码的FetchXML

http://msdn.microsoft.com/en-us/library/gg328117.aspx 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. 您可以通过在高级搜索中导出XML并使用RetrieveMultiple方法执行查询来从CRM获取正确的XML。

I'm adding an example with SOAP envelope and CURL POST query, authenticated with NTLM. 我正在添加一个SOAP信封和CURL POST查询示例,并使用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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM