THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour à tous,

Alors voilà après des heures de recherche infructueuses, je ne parviens toujours pas à faire un simple appel à l'api.

J'ai installé le client php à l'aide du composer, la lib est bien présente sur core/vendor/thelia/api-client.

Déja, lorsque je tente de créer une instance du client, j'ai une erreur not found :

$client = new Thelia\Api\Client\Client(getSignature(), "BFF36CF6D296C467F6AC52197.key", "localhost:8888/thelia_2.3.2/web");
->PHP Fatal error:  Uncaught Error: Class 'Thelia\Core\Thelia\Api\Client\Client' not found in

J'arrive à instancier le client en faisant un
use Thelia\Api\Client\Client;
$client = new Client(getSignature(), "BFF36CF6D296C467F6AC52197.key", "localhost:8888/thelia_2.3.2/web");

// exemple de requête que j'essaie
list($status, $data) = $client->listProducts();
list($status, $data) = $client->doGet("products/1/image", 1);

echo '<h1>'.$status.'</h1>';

$status est toujours égal à 404...

Merci de votre aide.

Offline


C'est soit use Thelia\Api\Client\Client; et new Client(), soit new \Thelia\Api\Client\Client().

Pour ton 404, d'après la doc ( http://doc.thelia.net/en/documentation/ … -to-use-it- ), il te faut écrire quelque chose comme :

$client = new Thelia\Api\Client\Client("my api token", "my api key", "http://mysite.tld");

Le 3eme paramètre doit être une URL valide, donc pour toi ça devrait être:

$client = new Client(getSignature(), "BFF36CF6D296C467F6AC52197.key", "http://localhost:8888/thelia_2.3.2/web");


OpenStudio Toulouse

Offline


Merci pour la réactivité smile

J'ai déjà essayé, et j'obtiens toujours un 404.
Client.php renvoi un warning :
PHP Warning:  pack(): Type H: illegal hex digit /

J'effectue ce test dans un fichier "testapi.php" que j'ai mis à la racine du dossier /web, donc je ne passe pas par index.php, c'est peut être le problème.

Je débarque un peu en php malheureusement...

Offline


Ça donne quoi dans un navigateur l'URL http://localhost:8888/thelia_2.3.2/web ?


OpenStudio Toulouse

Offline


Cette adresse renvoi vers la page d'accueil du site thelia...

C'est le miroir de (www).getup.digital/herbelin/web

L'api est atteignable à partir d'un browser ?

Last edited by AdrienC (17-11-2016 11:56:26)

Offline


Le premier paramètre est la clé d'API
Le second paramètre est le contenu du fichier de la clef
Voici un exemple qui fonctionne:
$apiToken = 'BFF36CF6D296C467F6AC52197';
$apiKeyFile = sprintf('/path/to/your/api/key/%s.key', $apiToken);
$apiKey = file_get_contents($apiKeyFile);
$shopUrl = 'your shop url';
$client = new Client($apiToken, $apiKey, $shopUrl);
list($status, $data) = $client->listProducts();

Offline


Merci beaucoup de ton aide Didier,

Malheureusement, cela n'est toujours pas concluant,
le $status = 412
et $data = "wrong body request signature"

Mon code est désormais :

$apiToken = 'BFF36CF6D296C467F6AC52197';
$apiKeyFile = sprintf('/thelia_2.3.2/web/%s.key', $apiToken);
$apiKey =  file_get_contents($apiKeyFile);
$shopUrl = 'http://localhost:8888/thelia_2.3.2/web';
$client = new Client($apiToken, $apiKey, $shopUrl);

list($status, $data) = $client->doList("products");

echo $data;

J'ai essayé de crypter la signature et d'init un RequestBody à vide :

function getSignature($requestContent = '', $file)
{
    $secureKey = pack('H*', file_get_contents($file));

    return hash_hmac('sha1', $requestContent, $secureKey);
}

$apiKey = getSignature('', $apiKeyFile);

Je suis pas loiiiin !! I need this, surtout que je vais devoir développer 2 applis mobiles censées appeler cette même API...

Last edited by AdrienC (17-01-2017 17:45:50)

Offline


J'ai eu le même problème.je reçois toujours un warning au sujet du pack(), mais ça marche quand même.

La solution pour moi était d'ajuster les permissions sur mon fichier XXX key et son répertoire parent (key).

Sur UBUNTU, apache2 marche avec son user/groupe www-data.

Quand j'ai créé la clé API avec Thelia, Thelia a mis le fichier dans local/config/key/XXX.key

Il a fallu faire: 

chown <myuser>:www-data local/config/key
chown <myuser>:www-data local/config/key/XXX.key
chmod 0750 local/config/key
chmod 0640 local/config/key/XXX.key

Cela m'a aussi aidé quand j'ai changé $shopurl à:

$shop URL = http://localhost/index_dev.php';

... pour voir les erreurs.

D'ailleurs je crois que les auteurs de l'API devraient clarifier qu'il n'est pas nécessaire d'installer l'API dans le même projet que Thelia. 

J'ai eu de la peine à l'installer et j'ai eu plus de succès quand finalement j'ai créé un projet à pars.

1)
mkdir my-client
cd my-client

2) creer un composer.json tout simple.
{
    "name": "myclient",
    "description": "Thelia client for me",
    "license": "GPL-3.0+",
    "authors": [
        {
            "name": "me",
            "email": "x@x.com"
        }
    ],
    "require": {
        "thelia/api-client": "1.0"
    }
}

3) faire marcher: 
composer install

4)
# test.php
<?php
require './vendor/autoload.php';
use Thelia\Api\Client\Client;
error_reporting(E_ALL); ini_set('display_errors', '1');
$apiToken = 'XXX';
$apiKeyFile = sprintf('./%s.key', $apiToken);
$apiKey = file_get_contents($apiKeyFile);
$shopUrl = 'http://localhost/index_dev.php';
$client = new Client($apiToken, $apiKey, $shopUrl);
list($status, $data) = $client->listProducts();
print_r($data);


5)
php test.php

Last edited by limposteur (07-09-2017 21:55:29)