Home    | Software    | Articoli    | Tips'n Tricks    | Contattaci    | Supportaci  
Home arrow Articoli arrow Integrazione di SugarCRM - Sessioni web e sessioni SOAP

Integrazione di SugarCRM - Sessioni web e sessioni SOAP

 
Introduzione
Eccoci di nuovo a parlare di SugarCRM ed integrazione , Questa volta vorrei esporre alcune tecniche per passare da una sessione web ad una SOAP. Può avere qualche utilità? A giudicare dalle domande che ho ricevuto da amici che si cimentano nell'integrazione di SugarCRM, sembrerebbe un argomento interessante. I casi vanno da applicativi SOAP "desktop" che devono poter aprire sessioni web su SugarCRM scavalcando la form di autenticazione, al caso opposto, cioè moduli per SugarCRM in grado di aprire una sessione SOAP utilizzando quella web già attiva. Vedremo che i due casi richiedono una trattazione differente, e il secondo è un pò più problematico. Iniziamo con il primo.
 

Utilizzare una sessione SOAP per evitare la form di autenticazione su interfaccia web

Questa è la più semplice ed anche la più documentata. Effettuiamo semplicemente un accesso SOAP e con l'id di sessione ottenuto chiamiamo il metodo SOAP "seamless_login". Poi sarà sufficiente passare l'id di sessione all URL della pagina SugarCRM desiderata come parametro di nome "MSID". E' più semplice mostrarlo che spiegarlo, per cui ecco il codice:


1:<?php    
2:require_once("path_to_nusoap/nusoap.php");    
3:$server_url = "http://your_sugar_server/soap.php?wsdl";    
4:$credentials = array(    
5:    'user_name' => 'username',    
6:    'password' => md5('password')    
7:);    
8:$sugar_client = new soapclient($server_url, TRUE);    
9:$proxy = $sugar_client->getProxy();   
10:if (!$proxy) {   
11:        // do something in case of error   
12:}   
13:$result = $proxy->login($credentials, 'your_application_name');   
14:$session_id = $result['id'];   
15:$result = $proxy->seamless_login($session_id);   
16:header( "Location: http://your_sugar_server/index.php?module=Contacts&action=index&MSID={$session_id}";   
17:?>  

 

Nel codice è necessario personalizzare secondo le proprie esigenze "path_to_nusoap","username","password","your_application_name" e "your_sugar_server". Alla riga 8 creaiamo una istanza di soapclient e alla 9 ne otteniamo un proxy. Utilizzeremo il proxy alla riga 13 per autenticarci via soap e, se tutto va bene, riceveremo indietro un identificativo di sessione valido(riga 14). Se ora passiamo l'id di sessione al metodo soap "seamless_login" (riga 15), verremo automaticamente  autenticati  anche per l'interfaccia web, per cui potremo puntare direttamente ad una qualsiasi pagina di sugarcrm semplicemente aggiungendo il parametro "MSID"(valorizzato con l'id di sessione) alla url della pagina desiderata. Assicuriamoci  che la pagina (modulo/azione) alla quale vogliamo accedere sia una per la quale l'utente usato per l'autenticazione sia autorizzato.

Questo è stato semplice, ora vediamo la situazione opposta. 

 

Ottenere una sessione SOAP autenticandosi all'interfaccia web (browser)

Ho cercato un pò in giro ma non ho avuto la fortuna(o la capacità) di trovare una ricetta lineare e immediata atta all'uopo. Se qualcuno è stato più fortunato(o bravo), per favore me lo faccia sapere.. La siluzione che utilizzo attualmente non è elegantissima ma pare funzionare. Essenzialmente, quando SugarCRM effettua l'autenticazione web, possiamo allo stesso tempo creare un id di sessione SOAP e metterlo nell'array $_SESSION per utilizzarlo per la durata della sessione stessa.

In questo caso ho aggiunto del codice nel file "modules/Users/authenticate.php". Il punto esatto del file dove aggiungere il codice dipende dalla versione di SugarCRM installata, ma normalmente è piuttosto semplice individuarlo, poichè si trova all'inizio del blocco "if" che controlla che l'autenticazione sia andata a buon fine. Nel mio caso c'è la riga:


          if ($focus->is_authenticated)

in altri casi (versioni di SugarCRM più recenti) ho visto qualcosa del tipo:

          if(isset($_SESSION['authenticated_user_id']))

Ora, il codice da aggiungere non è molto diverso da quello visto precedentemente. Abbiamo bisogno di creare un id di sessione soap utilizzando le stesse credenziali appena usate da SugarCRM per l'autenticazione web. Questa volta però ci serviremo della versione di nusoap inclusa in sugarcrm, la quale presenta alcune piccole differenze. Ecco il codice:


    2:require_once("include/nusoap/nusoap.php");    
3:$server_url = "http://your_sugar_server/soap.php?wsdl";    
4:$credentials = array(    
5:    'user_name' => $_REQUEST['username'],    
6:    'password' => md5($_REQUEST['password'])    
7:);    
8:$sugarClient = new nusoapclient($server_url, TRUE);    
9:$proxy = $sugarClient->getProxy();   
10:if (!$proxy) {   
11:        // do something in case of error   
12:}   
13:$result = $proxy->login($credentials, 'your_application_name');   
14:$_SESSION['soap_sessionid'] = $result['id'];  

Alla riga 2 includiamo la versione di nusoap presente nell'installzaione di SugarCRM, alle righe 5 e 6 utilizziamo gli stessi "username" e "pasword" che provengono dalla pagina web di autenticazione. Notiamo alla riga 8 che il nome della classe soapclient è ora "nusoapclient". Chiamiamo poi il metodo soap "login" e mettiamo l'id di sessione ottenuto nella variabile $_SESSION['soap_sessionid'] alla quale potremo accedere per effettuare chiamate a metodi soap da eventuali nostri moduli personalizzati, per tutta la durata della sessione. Questa volta le uniche cose da personalizzare nel codice sono "your_sugar_server" e "your_application_name", dato che il percorso di nusoap è relativo all'installazione di SugarCRM e username e password sono già forniti.

Questo approccio non è nè elegante nè neutrale, e attenzione che un aggiornamento di SugarCRM potrebbe sovrascrivere il file Authenticate.php, ma si è dimostrato utile e semplice per scrivere alcuni plugin.


Hasta la proxima

 
< Prec.   Pros. >

  Articles RSS feed

Articoli pił recenti
Software pił recenti
   
designed by allmambo.com