Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
1602 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Utilisation d'API Adobe

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Utilisation d'API Adobe

n°2356816
petit pede​stre
Dont 1 au pancréas.
Posté le 25-06-2020 à 22:11:25  profilanswer
 

Bonjour à tous,
 
je tourne en rond depuis quelques jours sur un souci d'API Adobe, j'ai peut-être manqué un truc ...
Je poste un message au cas où ...
 
J'ai une console admin dont les utilisateurs sont organisés en groupes.
mon but: je souhaite créer un compte (et le mettre dans un groupe) ou en modifier un compte (càd changer de groupe) par l'API.
 
 
La doc est ici : https://adobe-apiplatform.github.io [...] tml#update
L'authentification est en BEARER et cette partie fonctionne puisque via l'API je peux lister les comptes et les groupes.
 
 
j'ai un user test (de type EnterpriseID) dont je connais le login, le groupe actuel, etc.
Je souhaite le faire passer dans un autre groupe, mais rien ne semble fonctionner. La création non plus d'ailleurs :(
 
Voilà de quoi je pars :
 
- un environnement PHP 7 (pas de framework particulier)
- une page contenant une classe arbitrairment nommée "AdobeAPI" (instanciée puis dont les méthodes sont appelées).
 
==> cette classe dispose entres autres des méthodes suivantes :
1) les méthodes fournies par la doc exemple Adobe pour la création d'un token JWT (cette partie fonctionne)
2) une méthode ListUsers qui initie le token JWT et envoie une requête GET pour récupérer la liste des comptes utilisateurs - cette méthode fonctionne ;
3) une méthode "sendRequest" qui est chargée d'interroger en GET justement  
 

Code :
  1. public function sendRequest($url, $method, $values, $header) {
  2. $options = array(
  3.  'http' => array(
  4.   'header'  => $header,
  5.   'method'  => $method,
  6.   'content' => http_build_query($values)
  7.  )
  8. );
  9. echo '*** send-'.$method.'-Request *** ';
  10. // echo 'URL='.url;
  11. // echo 'OPTIONS='; echo '<pre>'; print_r($options); echo '</pre>';
  12. $context  = stream_context_create($options);
  13. var_dump($context);
  14. $result = file_get_contents($url, false, $context);
  15. return $result;
  16. }


 
 
4) ma méthode "UpdateUser" qui est censée dans un premier temps ajouter le user dans un nouveau groupe :
 

Code :
  1. public function UpdateUser($array_userData) {
  2. // init token
  3. $array_token = $this->init_auth(); // création du JWT, cette partie fonctionne
  4. $host = 'usermanagement.adobe.io';
  5. $endpoint = '/v2/usermanagement';
  6. $ims_host = 'ims-na1.adobelogin.com';
  7. $ims_endpoint_jwt = '/ims/exchange/jwt';
  8. # source : https://github.com/adobe-apiplatfor [...] iseUser.py
  9. $url = "https://" . $host . $endpoint . "/action/" . INT_ADOBEAPI_ORG_ID;
  10. $header  = "Content-type: application/x-www-form-urlencoded\r\n";
  11. $header .= "cache-control: no-cache\r\n";
  12. $header .= "Accept: application/json\r\n";
  13. $header .= "x-api-key: ".INT_ADOBEAPI_API_KEY."\r\n";
  14. $header .= "Authorization: Bearer ".$array_token['access_token'];
  15. $response = $this->sendRequest($url, 'POST', array($array_userData), $header);
  16. // print response
  17. var_dump($response);
  18. return $response;
  19. }


 
pas d'erreur dans le log Apache.
voici le retour affiché :  
 

Citation :


*** send-POST-Request ***  
 
{"errorMessage":""}
 
string(19) "{"errorMessage":""}"
 
{"errorMessage":""}


 
 
Pour info, le tableau $array_userDAta envoyé :

Code :
  1. $array_userData = array();
  2. $array_userData['user'] = 'compte_de_test@domaine.com'; // EnterpriseID
  3. $array_userData['requestID'] = 'action_1'; // ?
  4. $array_userData['do'] = array(); //
  5. $array_userData['do'][0]['add'] = array(); //
  6. $array_userData['do'][0]['add']['group'] = array('GROUP_USERS'); // ce groupe existe bien sur
  7. $myClass->UpdateUser($array_userData);


 
 
Dans la doc (https://adobe-apiplatform.github.io/umapi-documentation/en/api/ActionsCmds.html#update) j'ai cet exemple de json pour l'update user :
 

Code :
  1. [{
  2.   "user": "jdoe@claimed-domain1.com",
  3.   "requestID": "action_1",
  4.   "do": [{
  5.     "add": {
  6.       "group": [
  7.         "group_name1",
  8.         "group_name2"
  9.       ]
  10.     }
  11.   }]
  12. }]


 
c'est pour ça que dans la méthode UpdateUSer je l'ai mis dans un array : en json_encode, ça donne exactement les mêmes lignes.
 
J'ai l'impression que le file_get_contents est bon pour les GET et pas pour les POST, j'ai donc fait un 2è essai :
 

Code :
  1. public function sendRequest($url, $method, $values, $header) {
  2. $options = array(
  3.  'http' => array(
  4.   'header'  => $header,
  5.   'method'  => $method,
  6.   'content' => http_build_query($values)
  7.  )
  8. );
  9. echo '*** send-'.$method.'-Request *** ';
  10. // echo 'URL='.url;
  11. // echo 'OPTIONS='; echo '<pre>'; print_r($options); echo '</pre>';
  12. if ($method == 'GET')
  13. {
  14.  $context  = stream_context_create($options);
  15.  var_dump($context);
  16.  $result = file_get_contents($url, false, $context);
  17. }
  18. else // post, put
  19. {
  20.  # source https://weichie.com/blog/curl-api-calls-with-php/
  21.  $curl = curl_init();
  22.  switch ($method)
  23.  {
  24.   case 'POST':
  25.    curl_setopt($curl, CURLOPT_POST, 1);
  26.    if ($values)
  27.     curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($values));
  28.    break;
  29.   case 'PUT':
  30.    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
  31.    if ($values)
  32.     curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($values));
  33.    break;
  34.   default:
  35.    if ($values)
  36.     $url = sprintf("%s?%s", $url, http_build_query($values));
  37.  }
  38.  // OPTIONS:
  39.  curl_setopt($curl, CURLOPT_URL, $url);
  40.  curl_setopt($curl, CURLOPT_HTTPHEADER, explode("\r\n", $header));
  41.  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  42.  curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
  43.  // EXECUTE:
  44.  $result = curl_exec($curl);
  45.  if(!$result)
  46.  {
  47.   die('Connection Failure');
  48.  }
  49.  curl_close($curl);
  50. }
  51. var_dump($result);
  52. return $result;
  53. }


 
mais sans plus de succès ...
 
je pense que le pb vient de ma méthode "sendRequest" : soit je ne lui donne pas à manger la variable correctement écrite, soit le traitement avec l'API adobe n'est pas bon. Mais je n'arrive pas à départager ... Si quelqu'un a une piste, je suis preneur !
Merci d'avance pour toute aide :-)

mood
Publicité
Posté le 25-06-2020 à 22:11:25  profilanswer
 

n°2356821
B4X
kebab-case
Posté le 26-06-2020 à 00:30:49  profilanswer
 

Commence peut-être par ça :  
 
https://reho.st/thumb/self/7d618a26520421f38e655dd27bda51b0add0733a.png
 
https://reho.st/thumb/self/30a4cb88c0481886002647e9b2ad985fe1bb6b26.png


---------------
In vanitas veritas.
n°2356824
petit pede​stre
Dont 1 au pancréas.
Posté le 26-06-2020 à 08:08:41  profilanswer
 

:hello:
merci pour ta réponse ! j'avais bien mis ce accept: application/json dans la capture, il était 2 lignes plus bas.
 
en enlevant le form-urlencoded, donc en laissant la méthode ainsi :
 

Code :
  1. public function UpdateUser($array_userData) {
  2. // init token
  3. $array_token = $this->init_auth();
  4. $host = 'usermanagement.adobe.io';
  5. $endpoint = '/v2/usermanagement';
  6. $ims_host = 'ims-na1.adobelogin.com';
  7. $ims_endpoint_jwt = '/ims/exchange/jwt';
  8. $url = "https://" . $host . $endpoint . "/action/" . INT_ADOBEAPI_ORG_ID;
  9. //$header  = "Content-type: application/x-www-form-urlencoded\r\n";
  10. $header = '';
  11. $header .= "Accept: application/json\r\n";
  12. $header .= "cache-control: no-cache\r\n";
  13. $header .= "x-api-key: ".INT_ADOBEAPI_API_KEY."\r\n";
  14. $header .= "Authorization: Bearer ".$array_token['access_token'];
  15. $response = $this->sendRequest($url, 'POST', array($array_userData), $header);
  16. // print response
  17. var_dump($response);
  18. }


 
et avec le SendRequest "forme longue" (donc tous les cURL pour la méthode POST), même erreur :
 

Citation :


*** send-POST-Request ***  
 
string(19) "{"errorMessage":""}" string(19) "{"errorMessage":""}"
 
{"errorMessage":""}


 
 
avec le sendRequest "forme courte" (donc cURLless = stream_content + file_get_contents) j'ai ce retour :
 

Citation :


*** send-POST-Request ***  
 
resource(41) of type (stream-context)
Notice: file_get_contents(): Content-type not specified assuming application/x-www-form-urlencoded in C:\Users\...\Adobeapi.php on line 240
 
Warning: file_get_contents(https://...@AdobeOrg): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in C:\Users\...\Adobeapi.php on line 240
bool(false) bool(false)  

n°2356847
B4X
kebab-case
Posté le 26-06-2020 à 12:15:15  profilanswer
 

petit pedestre a écrit :

j'avais bien mis ce


Non.


---------------
In vanitas veritas.
n°2356915
petit pede​stre
Dont 1 au pancréas.
Posté le 26-06-2020 à 23:15:45  profilanswer
 


Bah si, 3 lignes plus bas :o

n°2356923
B4X
kebab-case
Posté le 27-06-2020 à 10:26:24  profilanswer
 

Non.


---------------
In vanitas veritas.
n°2356928
petit pede​stre
Dont 1 au pancréas.
Posté le 27-06-2020 à 11:51:01  profilanswer
 


 
tu peux argumenter ?
je fais référence à la ligne entourée en rouge dans ta capture en dessous de celle que tu as encadrée :
https://reho.st/self/ec89c96b49ce1cb7f4e566f7a9d444905e69a360.png
 
mais si ça se trouve c'est d'ailleurs que tu parles et c'est p'tet ce que j'ai manqué ...?

n°2356930
B4X
kebab-case
Posté le 27-06-2020 à 12:12:40  profilanswer
 

Il y a 2 captures d'écran.
Je te parle de l'entête "Content-type" pendant que tu t'obstine à me parler de ton entête "Accept". Ce sont 2 headers http différents.
"Content-type" c'est ce que tu déclare envoyer à ton endpoint. Du json en l'occurrence.
"Accept" c'est ce que tu déclare être capable de lire. L'API s'en branle de ça. Tu pourrai mettre "*/*" que ça passerait.
Tu semble confondre beaucoup de choses: client/serveur, GET/POST.


---------------
In vanitas veritas.
n°2356948
petit pede​stre
Dont 1 au pancréas.
Posté le 27-06-2020 à 21:23:17  profilanswer
 

jusrtement, je ne suis pas sûr de mon coup, n'étant pas un familier de ces requêtes.
 
Alors je viens de faire 2 essais :
 
la méthode update comme suit :

Code :
  1. public function UpdateUser($array_userData) {
  2. // init token
  3. $array_token = $this->init_auth();
  4. $host = 'usermanagement.adobe.io';
  5. $endpoint = '/v2/usermanagement';
  6. $ims_host = 'ims-na1.adobelogin.com';
  7. $ims_endpoint_jwt = '/ims/exchange/jwt';
  8. $url = "https://" . $host . $endpoint . "/action/" . INT_ADOBEAPI_ORG_ID;
  9. $header  = '';
  10. $header .= "Content-type: application/json\r\n";
  11. $header .= "Cache-control: no-cache\r\n";
  12. $header .= "x-api-key: ".INT_ADOBEAPI_API_KEY."\r\n";
  13. $header .= "Authorization: Bearer ".$array_token['access_token'];
  14. $response = $this->sendRequest($url, 'POST', array($array_userData), $header);
  15. // print response
  16. var_dump($response);
  17. }


 
et le sendRequest avec le code court :

Code :
  1. $context  = stream_context_create($options);
  2.  var_dump($context);
  3.  $result = file_get_contents($url, false, $context);


 
résultat :
 

Citation :

*** send-POST-Request ***  
 
resource(41) of type (stream-context)
Warning: file_get_contents(https://...@AdobeOrg): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in C:\Users\...\Adobeapi.php on line 240
bool(false)


 
maintenant avec le send request + curl :
[

Citation :


*** send-POST-Request ***  
 
string(75) "{"completed":1,"notCompleted":0,"completedInTestMode":0,"result":"success"}" string(75) "{"completed":1,"notCompleted":0,"completedInTestMode":0,"result":"success"}"
 
{"completed":1,"notCompleted":0,"completedInTestMode":0,"result":"success"}


 
j'ai l'impression que ça a fonctionné.  :bounce:  
je pense que c'est cette subtilité à côté de laquelle j'étais passé ! Merci pour le tuyau, je vais creuser... Je reviendrai poster dès que je me serai assuré que ça fonctionne réellement !


Message édité par petit pedestre le 27-06-2020 à 21:23:48

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Utilisation d'API Adobe

 

Sujets relatifs
[Twig] Utilisation de addLoader()[Python] Utilisation d'un code existant
API Application google direction[Javascript] CORS et API calls
[Shell Bash] Utilisation des semaphores pour paralleliser mon scriptUtilisation de SQLite
[résolu] Authentification https avec API GéoportailAPI navigator.geolocation qui ne marche plus avec Firefox 60
Api IMEI AppleCas d'utilisation et description textuelle
Plus de sujets relatifs à : Utilisation d'API Adobe


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR