cancel
Showing results for 
Search instead for 
Did you mean: 

Web Scripts - Alfresco et PHP

akha
Champ in-the-making
Champ in-the-making
Bonjour,

Je cherche à interagir avec les services alfresco via le RESTful API  depuis une application php.
La création  de mon service à travers les web ssripts alfresco ( description du document, contrôleur js et vue freemarker) est opérationnel.
Est ce que quelqu'un a un example d'appel de service alfresco  depuis une application php, un script php ? et de restitution de donnée ?
Le but final étant de faire un CRUD en php avec les services alfresco.

3 REPLIES 3

bertrandf
Champ on-the-rise
Champ on-the-rise
Bonjour,

En php, il vous suffit de faire des appels HTTP aux différents webscripts que vous voulez appeler (curl, HttpRequest, …) et d’interpréter le retour suivant le format que vous avez demandé (JSON, HTML, …).

Suivant votre application, vous pouvez très bien réaliser vos appels via du JavaScript également (appels AJAX).


La problématique principale étant l'authentification.
- Soit vous avez un couple login/password, il faudra dans un premier temps récupérer un ticket d'authentification Alfresco puis passer ce fameux ticket dans chacun de vos appels aux webscripts (paramètre ?alf_ticket={TICKET})
- Soit vous utilisez le compte "guest", vous exécuterez donc vos webscripts en tant qu'invité, pour cela, il faut passer le paramètre ?guest=true

Il existe des webscripts dédiés à la gestion de l'authentification : http://localhost:8080/alfresco/s/index/family/Authentication

Exemple d'appels :
http://serveurSmiley Tongueort/alfresco/s/api/login?u=admin&pw=admin => TICKET_ff94e397395b3d2646b0bb1aa9c868e01ec0bfd3
http://serveurSmiley Tongueort/alfresco/s/mon/url/de/webscript?alf_ticket=TICKET_ff94e397395b3d2646b0bb1aa9c868e0...
http://serveurSmiley Tongueort/alfresco/s/mon/url/de/webscript?guest=true


Ca ne devrait pas être le cas, mais si vous envisagez d’interroger des webscript situés dans la webapp Share, les dernières montures d'Alfresco ont renforcées leur sécurité concernant les attaques CSRF, article à lire : http://blogs.alfresco.com/wp/ewinlof/2013/03/11/introducing-the-new-csrf-filter-in-alfresco-share/


Cordialement.

bertrandf
Champ on-the-rise
Champ on-the-rise
Ce genre de choses devraient pouvoir vous aider :


function get_ticket_curl_post($u, $pw) {
  $ticket = ''; //init
  $credentials = array('username' => $u, 'password' => $pw);

  $ch = curl_init(URL_SERVER.'s/api/login');
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($credentials));
  curl_setopt($ch, CURLOPT_TIMEOUT, 25);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/html'));

  $postResult = curl_exec($ch);

  // Check if any error occured
  if(curl_errno($ch)) {
    $ticket = ''; //no ticket.
  }
  else {
    $ticket = json_decode($postResult)->data->ticket;  //set ticket to return
  }
  curl_close($ch);
 
  // die($ticket);
  return $ticket;
}


/* Execution des methodes GET */
function requestGet($lien, $val, $ticket=null) {
  $url = URL_SERVER.$lien;
  $request = new HttpRequest($url, HTTP_METH_GET);

  if ($ticket != null) {
    $request->addHeaders(array('Authorization' => 'Basic '.base64_encode($ticket)));
    //$request->addQueryData(array('alf_ticket' => $ticket));
  }
  if ($val != null) {
    $request->addQueryData($val);
  }

  try {
    $response = $request->send();
  } catch (HttpException $ex) {
    echo $ex;
  }
  return $response;
}


function requestPost($lien, $val, $ticket=null) {
  $url = URL_SERVER.$lien;

  $request = new HttpRequest($url, HTTP_METH_POST);

  if ($ticket!=null)
    $request->addHeaders(array('Authorization' => 'Basic '.base64_encode($ticket)));

  if ($val!=null)
    $request->addPostFields($val);

  try {
    $response = $request->send();
  } catch (HttpException $ex) {
    echo $ex;
  }
  return $response;
}


Je ne garantie pas que ces fonctions soient utilisables en l'état.

Cordialement.

akha
Champ in-the-making
Champ in-the-making
Bonjour BertrandF,
Merci pour vos réponses,vous avez bien compris ma problématique,
je vais tester les scripts php sur un serveur web classique en intégrant le alf_ticket=xxxxxxxxxxxxxxxxxxx à l'url de mon service.
Bien Cordialement.