A API SuiteCRM permite que o código de terceiros acesse e edite dados e funcionalidades do SuiteCRM.
Usando a API
SuiteCRM tem um REST e uma API SOAP. A API que você deseja usar se resumirá em grande parte à preferência pessoal e ao suporte para bibliotecas SOAP / REST em qualquer idioma que você usar.
Ambas as APIs exigirão um nome de usuário e uma senha. É comum criar um usuário especificamente para a API.
SOAP
O WSDL para a API SOAP pode ser encontrado em:
Exemplo 16.1: Localização WSDL da API SOAP
example.com/suitecrm/service/v4_1/soap.php?wsdl
Onde example.com/suitecrm é o endereço de sua instância SuiteCRM. v4_1 é a versão da API e pode ser alterada.
Exemplo SOAP
O exemplo de PHP a seguir usa a classe SoapClient integrada.
Exemplo 16.2: Acessando a API SOAP
<?php
//Create a new SoapClient
$wsdlURL = “http://example.com/suitecrm/service/v4_1/soap.php?wsdl”;
$client = new SoapClient($wsdlURL);
//Login to the API and get the session id
$userAuth = array(
‘user_name’ => ”,
‘password’ => md5(”),
);
$appName = ‘My SuiteCRM SOAP Client’;
$nameValueList = array();
$loginResults = $client->login($userAuth, $appName, $nameValueList);
//Get a list of at most 10 accounts with a billing address in Ohio. Along with
//The first and last names of any contacts in that Account.
$results = $client->get_entry_list(
//Session id – retrieved from login call
$loginResults->id,
//Module to get_entry_list for
‘Accounts’,
//Filter query – Added to the SQL where clause
“accounts.billing_address_city = ‘Ohio'”,
//Order by – unused
”,
//Start with the first record
//Return the id and name fields array(‘id’,’name’), //Link to the “contacts” relationship and retrieve the //First and last names. array( array( ‘name’ => ‘contacts’, ‘value’ => array( ‘first_name’, ‘last_name’, ), ), ), //Show 10 max results //Do not show deleted ); print_r($results);
REST
A SuiteCRM REST API pode ser encontrada em:
Exemplo 16.3: localização do endpoint da API REST
example.com/suitecrm/service/v4_1/rest.php
Onde example.com/suitecrm é o endereço de sua instância SuiteCRM. v4_1 é a versão da API e pode ser alterada.
A API REST SuiteCRM não é uma API REST verdadeira – todas as chamadas são realizadas como POSTs e todas as chamadas são para a URL base com o método passado como um argumento post.
Os argumentos para as chamadas da API REST são:
method
O método que será chamado, ou seja, login ou get_entry_list. Veja a lista de métodos da API v4.1.
imput_type
O tipo de entrada do rest_data. Geralmente é JSON, mas também pode ser serializar.
response_type
Como a resposta será codificada. Geralmente é JSON, mas também pode ser serializar.
rest_data
Quaisquer outros argumentos exigidos por este método. Isso é passado como uma matriz codificada. A codificação é determinada por input_type.
Exemplo 16.4: Acessando a API REST
<?php
$url = “http://example.com/suitecrm/service/v4_1/rest.php”;
function restRequest($method, $arguments){
global $url;
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$post = array(
“method” => $method,
“input_type” => “JSON”,
“response_type” => “JSON”,
“rest_data” => json_encode($arguments),
);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
curl_close($curl);
return json_decode($result,1);
}
$userAuth = array(
‘user_name’ => ‘suitecrmuser’,
‘password’ => md5(‘suitecrmpassword’),
);
$appName = ‘My SuiteCRM REST Client’;
$nameValueList = array();
$args = array(
‘user_auth’ => $userAuth,
‘application_name’ => $appName,
‘name_value_list’ => $nameValueList);
$result = restRequest(‘login’,$args);
$sessId = $result[‘id’];
$entryArgs = array(
//Session id – retrieved from login call
‘session’ => $sessId,
//Module to get_entry_list for
‘module_name’ => ‘Accounts’,
//Filter query – Added to the SQL where clause,
‘query’ => “accounts.billing_address_city = ‘Ohio'”,
//Order by – unused
‘order_by’ => ”,
//Start with the first record
‘offset’ => 0,
//Return the id and name fields
‘select_fields’ => array(‘id’,’name’,),
//Link to the “contacts” relationship and retrieve the
//First and last names.
‘link_name_to_fields_array’ => array(
array(
‘name’ => ‘contacts’,
‘value’ => array(
‘first_name’,
‘last_name’,
),
),
),
//Show 10 max results
‘max_results’ => 10,
//Do not show deleted
‘deleted’ => 0,
);
$result = restRequest(‘get_entry_list’,$entryArgs);
print_r($result);
Para uma lista completa de métodos de API e seus argumentos:
Adicionar métodos de API personalizados
Às vezes, os métodos de API existentes não são suficientes ou usá-los para uma tarefa seria muito complexo. SuiteCRM permite que os serviços da web sejam estendidos com métodos adicionais ou substituindo os métodos existentes.
O caminho recomendado para pontos de entrada customizados é custom / service / _custom /. Para a versão de serviço da web v4_1, seria custom / service / v4_1_custom /.
Em seguida, criamos a classe de implementação. Isso criará nosso novo método. Em nosso exemplo, vamos simplesmente criar um novo método que grava no log do SuiteCRM. Chamaremos esse método de write_log_message.
Exemplos
Exemplo 16.5: Implementação de serviço da Web v4_1 personalizado
<?php
if(!defined(‘sugarEntry’)){
define(‘sugarEntry’, true);
}
require_once ‘service/v4_1/SugarWebServiceImplv4_1.php’;
class SugarWebServiceImplv4_1_custom extends SugarWebServiceImplv4_1
{
function write_log_message($session, $message)
{
$GLOBALS[‘log’]->info(‘Begin: write_log_message’);
//Here we check that $session represents a valid session if (!self::$helperObject->checkSessionAndModuleAccess($session, ‘invalid_session’, ”, ”, ”, new SoapError())) {$GLOBALS[‘log’]->info(‘End: write_log_message.’); return false; } $GLOBALS[‘log’]->info($message); return true; } }
Em seguida, criamos o arquivo de registro que registrará nosso novo método.
Exemplo 16.6: Registro de serviço da web v4_1 personalizado
<?php require_once ‘service/v4_1/registry.php’; class registry_v4_1_custom extends registry_v4_1 { protected function registerFunction() { parent::registerFunction(); $this->serviceClass->registerFunction(‘write_log_message’, array( ‘session’=>’xsd:string’, ‘message’=>’xsd:string’), array( ‘return’=>’xsd:boolean’) ); } }
Finalmente, criamos o ponto de entrada. Este é o arquivo real que será chamado por nossos clientes API. Isso fará referência aos dois arquivos que criamos e chamará a implementação do serviço da web com nossos arquivos.
Exemplo 16.7: Ponto de entrada REST v4_1 personalizado
<?php
chdir(‘../../..’);
require_once ‘SugarWebServiceImplv4_1_custom.php’;
$webservice_path = ‘service/core/SugarRestService.php’;
$webservice_class = ‘SugarRestService’;
$webservice_impl_class = ‘SugarWebServiceImplv4_1_custom’;
$registry_path = ‘custom/service/v4_1_custom/registry.php’;
$registry_class = ‘registry_v4_1_custom’;
$location = ‘custom/service/v4_1_custom/rest.php’;
require_once ‘service/core/webservice.php’;
Exemplo 16.8: Ponto de entrada SOAP v4_1 personalizado
<?php
chdir(‘../../..’);
require_once(‘SugarWebServiceImplv4_1_custom.php’);
$webservice_class = ‘SugarSoapService2’;
$webservice_path = ‘service/v2/SugarSoapService2.php’;
$webservice_impl_class = ‘SugarWebServiceImplv4_1_custom’;
$registry_class = ‘registry_v4_1_custom’;
$registry_path = ‘custom/service/v4_1_custom/registry.php’;
$location = ‘custom/service/v4_1_custom/soap.php’;
require_once(‘service/core/webservice.php’);
Uso
Agora podemos usar nosso endpoint personalizado. Isso é idêntico ao uso da API conforme detalhado acima, exceto que usamos nosso ponto de entrada customizado para o SOAP WSDL ou URL REST. Por exemplo, usando o mesmo local SuiteCRM (example.com/suitecrm) como os exemplos acima e usando v4_1, usaríamos o seguinte
Exemplo 16.9: URLS v4_1 personalizados
//SOAP WSDL
example.com/suitecrm/custom/service/v4_1_custom/soap.php?wsdl
//REST URL
example.com/suitecrm/custom/service/v4_1_custom/rest.php