petit pedestre Dont 1 au pancréas. | 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 :
- public function sendRequest($url, $method, $values, $header) {
- $options = array(
- 'http' => array(
- 'header' => $header,
- 'method' => $method,
- 'content' => http_build_query($values)
- )
- );
- echo '*** send-'.$method.'-Request *** ';
- // echo 'URL='.url;
- // echo 'OPTIONS='; echo '<pre>'; print_r($options); echo '</pre>';
- $context = stream_context_create($options);
- var_dump($context);
- $result = file_get_contents($url, false, $context);
- return $result;
- }
|
4) ma méthode "UpdateUser" qui est censée dans un premier temps ajouter le user dans un nouveau groupe :
Code :
- public function UpdateUser($array_userData) {
- // init token
- $array_token = $this->init_auth(); // création du JWT, cette partie fonctionne
- $host = 'usermanagement.adobe.io';
- $endpoint = '/v2/usermanagement';
- $ims_host = 'ims-na1.adobelogin.com';
- $ims_endpoint_jwt = '/ims/exchange/jwt';
- # source : https://github.com/adobe-apiplatfor [...] iseUser.py
- $url = "https://" . $host . $endpoint . "/action/" . INT_ADOBEAPI_ORG_ID;
- $header = "Content-type: application/x-www-form-urlencoded\r\n";
- $header .= "cache-control: no-cache\r\n";
- $header .= "Accept: application/json\r\n";
- $header .= "x-api-key: ".INT_ADOBEAPI_API_KEY."\r\n";
- $header .= "Authorization: Bearer ".$array_token['access_token'];
- $response = $this->sendRequest($url, 'POST', array($array_userData), $header);
- // print response
- var_dump($response);
- return $response;
- }
|
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 :
- $array_userData = array();
- $array_userData['user'] = 'compte_de_test@domaine.com'; // EnterpriseID
- $array_userData['requestID'] = 'action_1'; // ?
- $array_userData['do'] = array(); //
- $array_userData['do'][0]['add'] = array(); //
- $array_userData['do'][0]['add']['group'] = array('GROUP_USERS'); // ce groupe existe bien sur
- $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 :
- [{
- "user": "jdoe@claimed-domain1.com",
- "requestID": "action_1",
- "do": [{
- "add": {
- "group": [
- "group_name1",
- "group_name2"
- ]
- }
- }]
- }]
|
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 :
- public function sendRequest($url, $method, $values, $header) {
- $options = array(
- 'http' => array(
- 'header' => $header,
- 'method' => $method,
- 'content' => http_build_query($values)
- )
- );
- echo '*** send-'.$method.'-Request *** ';
- // echo 'URL='.url;
- // echo 'OPTIONS='; echo '<pre>'; print_r($options); echo '</pre>';
- if ($method == 'GET')
- {
- $context = stream_context_create($options);
- var_dump($context);
- $result = file_get_contents($url, false, $context);
- }
- else // post, put
- {
- # source https://weichie.com/blog/curl-api-calls-with-php/
- $curl = curl_init();
- switch ($method)
- {
- case 'POST':
- curl_setopt($curl, CURLOPT_POST, 1);
- if ($values)
- curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($values));
- break;
- case 'PUT':
- curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
- if ($values)
- curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($values));
- break;
- default:
- if ($values)
- $url = sprintf("%s?%s", $url, http_build_query($values));
- }
- // OPTIONS:
- curl_setopt($curl, CURLOPT_URL, $url);
- curl_setopt($curl, CURLOPT_HTTPHEADER, explode("\r\n", $header));
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
- // EXECUTE:
- $result = curl_exec($curl);
- if(!$result)
- {
- die('Connection Failure');
- }
- curl_close($curl);
- }
- var_dump($result);
- return $result;
- }
|
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 :-) |