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