IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

Création d'un site web avec l'API de Cardmarket


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Préparateur de commandes
    Inscrit en
    Février 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Préparateur de commandes

    Informations forums :
    Inscription : Février 2022
    Messages : 7
    Par défaut Création d'un site web avec l'API de Cardmarket
    Bonjour,

    J'ai récemment rejoint une entreprise et ayant quelques connaissances en développement (principalement PHP), on m'a chargé de créer un site web qui utilise l'API de Cardmarket pour pouvoir gérer nos stocks, ajouter des produits à notre panier, faire des statistiques sur nos ventes et d'autres choses dans le même genre.

    Alors je me suis lancé et j'ai commencé par lire des cours sur les API, puis j'ai effectué quelques tests qui ne se sont pas révélés concluants du tout. Les tests ont été réalisés en local via Wampserver mais aussi sur Postman.

    https://api.cardmarket.com/ws/docume..._2.0:Main_Page

    Cardmarket possède un serveur sandbox pour effectuer des tests ainsi que 2 versions de son API. Pour commencer j'ai créé une App dédiée via mon profil ce qui me semblait correspondre au projet. J'ai ensuite effectué les tests en utilisant les infos des deux versions de différentes manières et sans jamais réussir à recevoir les données.

    Tous mes tests ont reçu comme réponse "403 Forbidden" ce qui correspond selon leur doc à :

    « You get a 403 Forbidden HTTP status, when you try to access valid resources, but don't have access to it, i. e. you try to access /authenticate with a dedicated or widget app, or resources specifically written for widget apps with a dedicated app. » (apparemment il n'y a pas d'erreur d'authentification mais d'autorisation à l'accès aux données si je comprends bien)

    Alors au départ j'avais effectivement tenté de récupérer des infos sur les articles et produits de "Marketplace Information", sauf qu'ensuite j'ai ajouté des produits à mon panier et tenter de les récupérer ce qui normalement est autorisé pour ce type d'app (https://api.cardmarket.com/ws/docume...0:ShoppingCart)

    Il en va de même pour mon code qui m'affiche une page blanche après exécution. Voici le code (les tokens ont été retirés) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    <!doctype html>
    <html>
     
      <head>
         <title>Titre de la page</title>
         <link rel="stylesheet" type="text/css" href="styles.css">
      </head>
     
      <body>
     
        <?php
     
        $server_url            = "https://sandbox.cardmarket.com/ws/v2.0/output.json/";
     
     
        $method             = "GET";
        $url             = $server_url."stock/shoppingcart-articles";
        $appToken           = "";
        $appSecret          = "";
        $accessToken        = "";
        $accessSecret       = "";
        $nonce              = uniqid();
        $timestamp          = time();
        $signatureMethod    = "HMAC-SHA1";
        $version            = "1.0";
     
        $params             = array(
           'realm'                     => $url,
           'oauth_consumer_key'        => $appToken,
           'oauth_token'               => $accessToken,
           'oauth_nonce'               => $nonce,
           'oauth_timestamp'           => $timestamp,
           'oauth_signature_method'    => $signatureMethod,
           'oauth_version'             => $version,
       );
     
       $baseString         = strtoupper($method) . "&";
       $baseString        .= rawurlencode($url) . "&";
     
       /* Gather, encode, and sort the base string parameters */
     
       $encodedParams      = array();
       foreach ($params as $key => $value)
       {
           if ("realm" != $key)
           {
               $encodedParams[rawurlencode($key)] = rawurlencode($value);
           }
       }
       ksort($encodedParams);
     
       /* Expand the base string by the encoded parameter=value pairs */
     
       $values             = array();
       foreach ($encodedParams as $key => $value)
       {
           $values[] = $key . "=" . $value;
       }
       $paramsString       = rawurlencode(implode("&", $values));
       $baseString        .= $paramsString;
     
       /*
        * Create the signingKey
        */
     
       $signatureKey       = rawurlencode($appSecret) . "&" . rawurlencode($accessSecret);
     
       /**
        * Create the OAuth signature
        * Attention: Make sure to provide the binary data to the Base64 encoder
        *
        * @var $oAuthSignature string OAuth signature value
        */
     
       $rawSignature       = hash_hmac("sha1", $baseString, $signatureKey, true);
       $oAuthSignature     = base64_encode($rawSignature);
     
       /*
        * Include the OAuth signature parameter in the header parameters array
        */
       $params['oauth_signature'] = $oAuthSignature;
     
       /*
        * Construct the header string
        */
     
       $header             = "Authorization: OAuth ";
       $headerParams       = array();
       foreach ($params as $key => $value)
       {
           $headerParams[] = $key . "=\"" . $value . "\"";
       }
       $header            .= implode(", ", $headerParams);
     
       /*
        * Get the cURL handler from the library function
        */
       $curlHandle         = curl_init();
     
       /*
        * Set the required cURL options to successfully fire a request to MKM's API
        */
     
       curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
       curl_setopt($curlHandle, CURLOPT_URL, $url);
       curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array($header));
       curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
     
       /**
        * Execute the request, retrieve information about the request and response, and close the connection
        *
        * @var $content string Response to the request
        * @var $info array Array with information about the last request on the $curlHandle
        */
       $content            = curl_exec($curlHandle);
       $info               = curl_getinfo($curlHandle);
     
       curl_close($curlHandle);
     
       /*
        * Convert the response string into an object
        *
        * If you have chosen XML as response format (which is standard) use simplexml_load_string
        * If you have chosen JSON as response format use json_decode
        *
        * @var $decoded \SimpleXMLElement|\stdClass Converted Object (XML|JSON)
        */
     
       $decoded = json_decode($content, true);
     
        if(!empty($decoded->results))
        {
            foreach($decoded->results as $data)
            {
                echo "<u>" . $data->seller['name']."</u> : ". $data->buyer['name'];
                echo "<br />";
            }
        }
        else
        {
            echo 'Rien ici';
        }
     
        ?>
     
      </body>
     
    </html>
    C'est la première fois que je me lance dans les API donc j'ai certainement loupé plusieurs choses alors si une personne pourrait m'aiguiller et me donner quelques conseils et/ou piste à suivre, je suis preneur.

    Merci d'avance

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Le fait que tu reçoives une erreur 403 est plutôt positif dans le sens où tu arrives à faire une requête à peut près correctement à l'API.
    403 représente effectivement une erreur de permission , ce qui voudrais dire que tu es correctement authentifié (sinon ca serait 401).

    Selon leur doc cela veux dire que tu essai d'accéder à une ressource qui n'est pas autorisée pour ton compte, ou en tout cas la configuration que tu en as fait.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Préparateur de commandes
    Inscrit en
    Février 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Préparateur de commandes

    Informations forums :
    Inscription : Février 2022
    Messages : 7
    Par défaut
    Merci de ta réponse rapide !

    Oui c'est ce que j'avais à peu près compris concernant la permission, sauf qu'il est bien précisé sur cette page https://api.cardmarket.com/ws/docume...t_Manipulation que je devrais bien avoir l'autorisation d'accéder à ces données via une App Dédiée. Seuls les Widget App ne devraient pas pouvoir récupérer ces données. (+ je viens d'essayer sur plusieurs autres ressources auxquelles je devrais avoir accès et le résultat est le même)

    Postman me renvoie la même erreur 403 alors je continue à effectuer des tests (principalement en changeant l'URL que j'appelle) mais toujours sans succès. Je pensais également que faire ça en local pouvait poser problème alors j'ai essayé directement via un site hébergé, mais le résultat est également le même...

    Qu'entends-tu par configuration ?

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Local ou site hébergé ca n'a pas d'importance.
    Quand je parle de configuration , c'est plus au niveau de ton compte qui donne accès à l'API. Le type d'application, ton stock d'éventuel quotas d'accès si il existes , etc ...

    Ca peut aussi être un header manquant dans tes requêtes , ou le token oauth qui n'est pas bon. Bref plein de possibilité.
    Ne connaissant pas l'API en elle même , ca va être difficile de te dépanner mais sur la partie purement requetage ca me semble à peut près correct.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Préparateur de commandes
    Inscrit en
    Février 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Préparateur de commandes

    Informations forums :
    Inscription : Février 2022
    Messages : 7
    Par défaut
    Local ou site hébergé ca n'a pas d'importance.
    Ok je vois, merci pour l'info.

    Quand je parle de configuration , c'est plus au niveau de ton compte qui donne accès à l'API. Le type d'application, ton stock d'éventuel quotas d'accès si il existes , etc ...
    Je suis sur le serveur Sandbox donc les accès sont censés être approuvés automatiquement (selon la doc) et pour ce qui est du reste, j'ai bien fait attention à faire des requêtes que mon type d'app autorise et aussi de faire des requêtes sur des éléments existants

    Ca peut aussi être un header manquant dans tes requêtes , ou le token oauth qui n'est pas bon. Bref plein de possibilité.
    Donc je pense en effet que ça doit venir d'une de ces possibilités. Le fait étant que le code que je vous ai envoyé est une copie d'un exemple qui est censé fonctionner selon la doc et que j'ai du coup légèrement modifié pour mettre mes tokens, changer les requêtes et l'affichage des données. Je vais quand même essayer de continuer à creuser de ce côté-là.

    Ne connaissant pas l'API en elle même , ca va être difficile de te dépanner mais sur la partie purement requetage ca me semble à peut près correct.
    Oui j'imagine en tout cas merci beaucoup pour tes réponses.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Préparateur de commandes
    Inscrit en
    Février 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Préparateur de commandes

    Informations forums :
    Inscription : Février 2022
    Messages : 7
    Par défaut
    Toujours pas de solution à l'horizon...

    Je commence à penser que le problème ne vient pas réellement du côté de ma requête (qui est tiré d'ailleurs des "exemples qui fonctionnent" de la doc), mais du côté des permissions que Cardmarket nous accordent et qu'il n'y aurait donc pas vraiment de solution

Discussions similaires

  1. Création d'un site web avec mapserver
    Par noramokh dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 20/03/2016, 09h25
  2. Création d'un site web avec c#
    Par dosfly dans le forum C#
    Réponses: 2
    Dernier message: 20/01/2012, 14h14
  3. Création d'un site web avec kompozer
    Par Homodelphinus dans le forum Langage
    Réponses: 8
    Dernier message: 01/12/2010, 01h31
  4. Création de plusieurs sites Web avec une seule IP
    Par yoshï dans le forum Apache
    Réponses: 6
    Dernier message: 22/09/2010, 17h20
  5. création d'un site web avec flash
    Par pc_omiga dans le forum Flash
    Réponses: 2
    Dernier message: 21/01/2007, 03h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo