php-access dynamics crm 2011 con servicios web
web-services soap (1)
Tengo que acceder a clientes potenciales (crear un nuevo cliente potencial y obtener la lista) en crm 2011 a través de los servicios web. Ya hice una aplicación en c # / asp.net (funciona) pero ahora tengo que hacerlo en PHP y estoy atascado.
Intento: https://code.google.com/p/php-dynamics-crm-2011/ pero no funciona porque solo es compatible con la autenticación de la Federación y el mío es el directorio activo.
Intento conectarme con nusoap pero es muy confuso.
Genero clases de servicio de descubrimiento y servicio de organización con wsdl2php: http://www.urdalen.no/wsdl2php/ pero no sé qué hacer con las clases.
Alguien tiene ejemplos de cómo usar estas clases?
MSCRM 2013 y probablemente 2011 están utilizando NTLM para autenticar los websevices.
Para consultas de datos, puede usar url codificado FetchXML
http://msdn.microsoft.com/en-us/library/gg328117.aspx
Puede obtener el XML correcto de CRM mediante la exportación de XML en la búsqueda avanzada y ejecute la consulta con el método RetrieveMultiple, por ejemplo.
Estoy agregando un ejemplo con un sobre SOAP y una consulta CURL POST, autenticado con 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><fetch version=''1.0'' output-format=''xml-platform'' mapping=''logical'' distinct=''false''>
<entity name=''contact''>
<attribute name=''fullname'' />
<attribute name=''parentcustomerid'' />
<attribute name=''telephone1'' />
<attribute name=''emailaddress1'' />
<attribute name=''contactid'' />
<order attribute=''fullname'' descending=''false'' />
<filter type=''and''>
<condition attribute=''ownerid'' operator=''eq-userid'' />
<condition attribute=''statecode'' operator=''eq'' value=''0'' />
</filter>
</entity>
</fetch></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);
}