web-dev-qa-db-fra.com

Comment implémenter la personnalisation REST API dans magento?

J'essaie de créer mon REST api personnalisé. J'ai créé mon propre module Custom/Restapi.Custom [Espace de noms], Restapi [Nom du module].

Dans le dossier etc j'ai créé config.xml et api2.xml. Ci-dessous le code:

Config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Custom_Restapi>
            <version>0.1.0.0</version>
        </Custom_Restapi>
    </modules>
    <global>
        <models>
            <restapi>
                <class>Custom_Restapi_Model</class>
            </restapi>
        </models>
</config>

api2.xml

<config>
    <api2>
        <resource_groups>
            <restapi translate="title" module="Custom_Restapi">
                <title>Custom Rest API</title>
                <sort_order>10</sort_order>
            </restapi>
        </resource_groups>
        <resources>
            <restapi translate="title" module="Custom_Restapi">
                <group>restapi</group>
                <model>restapi/api2_restapi</model>
                <title>Testing My Rest API</title>
                <sort_order>10</sort_order>
                <privileges>
                    <admin>
                        <create>1</create>
                       <!-- <retrieve>1</retrieve>
                        <delete>1</delete>-->
                    </admin>
                   <!--  <customer>
                        <create>1</create>
                        <retrieve>1</retrieve>
                         <delete>1</delete>
                    </customer>
                     <guest>
                        <create>1</create>
                       <retrieve>1</retrieve>
                        <delete>1</delete>
                    </guest>-->
                </privileges>
                <routes>
                    <route_entity>
                        <route>/custom/createwebsite/:s</route>
                        <action_type>entity</action_type>
                    </route_entity>
                </routes>
                <versions>1</versions>
            </restapi>
        </resources>
    </api2>

Structure du répertoire modèle

app\code\local\Personnalisé\Restapi\Modèle\Api2\Restapi.php. Ci-dessous le code du fichier-:

Restapi.php

class Custom_Restapi_Model_Api2_Restapi extends Mage_Api2_Model_Resource
{

}

app\code\local\Personnalisé\Restapi\Modèle\Api2\Restapi\Rest\Admin\V1.php Ci-dessous le code de fichier-:

V1.php

class Custom_Restapi_Model_Api2_Restapi_Rest_Admin_V1 extends Custom_Restapi_Model_Api2_Restapi
{
     protected function _create(){


   return  json_encode(array("testing","hello"));
}

 protected function _retrieveCollection()
{
      return  json_encode(array("testing","hello"));
 }
}

Le fichier de configuration Etc/module est également installé.

Paramètre administrateur

  1. J'ai créer l'administrateur de rôle OAuth. Sous l'onglet de gauche, les paramètres du module "Role Api Resource" sont visibles et sélectionnés.

  2. Le paramètre Consommateur de repos est également configuré.

Ci-dessous figure REST _ Code de script d'appel d'API

Code de script d'appel Api

$consumerKey    = 'ozr74egldg07dpxtkk9uq1o8bj6wwd65'; // from Admin Panel's &quot;REST - OAuth Consumers page&quot;
$consumerSecret = 'ozr74egldg07dpxtkk9uq1o8bj6wwd65'; // from Admin Panel's &quot;REST - OAuth Consumers page&quot;

// Set the OAuth callback URL to this script since it contains the logic
// to execute *after* the user authorizes this script to use the Coupon AutoGen API
$callbackUrl = "http://127.0.0.1/magento/testscript.php";

// Set the URLs below to match your Magento installation
$temporaryCredentialsRequestUrl = "http://127.0.0.1/mage_restapi/oauth/initiate?oauth_callback=" . urlencode($callbackUrl);
$adminAuthorizationUrl = 'http://127.0.0.1/mage_restapi/admin/oauth_authorize';
$accessTokenRequestUrl = 'http://127.0.0.1/mage_restapi/oauth/token';
$apiUrl = 'http://127.0.0.1/mage_restapi/api/rest';

session_start();

if (!isset($_GET['oauth_token']) && isset($_SESSION['state']) && $_SESSION['state'] == 1) {
    $_SESSION['state'] = 0;
    echo "try";
}

try {

    $authType = ($_SESSION['state'] == 2) ? OAUTH_AUTH_TYPE_AUTHORIZATION : OAUTH_AUTH_TYPE_URI;
    $oauthClient = new OAuth($consumerKey, $consumerSecret, OAUTH_SIG_METHOD_HMACSHA1, $authType);

    $oauthClient->enableDebug();

    if (!isset($_GET['oauth_token']) && !$_SESSION['state']) {

        $requestToken = $oauthClient->getRequestToken($temporaryCredentialsRequestUrl);
        $_SESSION['secret'] = $requestToken['oauth_token_secret'];
        $_SESSION['state'] = 1;
        header('Location: ' . $adminAuthorizationUrl . '?oauth_token=' . $requestToken['oauth_token']);
        exit;
    } else if ($_SESSION['state'] == 1) {
        $oauthClient->setToken($_GET['oauth_token'], $_SESSION['secret']);
        $accessToken = $oauthClient->getAccessToken($accessTokenRequestUrl);
        $_SESSION['state']  = 2;
        $_SESSION['token']  = $accessToken['oauth_token'];
        $_SESSION['secret'] = $accessToken['oauth_token_secret'];
        header('Location: ' . $callbackUrl);
        exit;
    } else {  

        // We have the OAuth client and token. Now, let's make the API call.
        $oauthClient->setToken($_SESSION['token'], $_SESSION['secret']);



        // Generate coupon codes via POST
        $resourceUrl = "$apiUrl/custom";

        $oauthClient->fetch($resourceUrl, OAUTH_HTTP_METHOD_POST, array(
            'Accept' => 'application/json',
            'Content-Type' => 'application/json',
        ));


         $data= json_decode($oauthClient->getLastResponse(), true);


        echo "Data is:<br/>".$data;

    }
} catch (OAuthException $e) {

    print_r($e->getMessage());
    //echo "<br/>";
    //print_r($e->lastResponse);
}

Lorsque j'essaie d'accéder à l'API, il demande l'autorisation.

Autoriser les demandes d'administrateur d'application à accéder à votre compte

Après autorisation, l'application aura accès à votre compte.

bouton d'autorisation et bouton de rejet

Après avoir cliqué sur le bouton Autoriser Erreur-:

Auth/bad request invalide (obtenu un 404, un HTTP/1.1 20X attendu ou une redirection) {"messages": {"erreur": [{"code": 404, "message": "La demande ne correspond à aucun itinéraire." }]}}

PHP L'extension OAuth ne prend pas en charge la prise en charge de RSA-SHA1 dans mes paramètres OAuth

Lien de référence http://www.magentocommerce.com/knowledge-base/entry/how-to-use-extend-the-magento-rest-api-to-use-coupon-auto-generation

http://ctodilemma.com/2013/04/customising-and-extending-the-magento-rest-api/

Nous utilisons uniquement la fonction fournie par magento pour accéder au code in rest, la liste des fonctions est la suivante:

  1. _créer()
  2. _récupérer()
  3. _effacer()
  4. _retrieveCollection ()
  5. _mettre à jour()
  6. _multiUpdate ()
  7. _multiDelete

Error Auth/bad request invalide (obtenu un 404, un HTTP/1.1 20X attendu ou une redirection) {"messages": {"erreur": [{"code": 404, "message": "La demande ne correspond à aucun itinéraire. "}]}}

J'ai partagé ci-dessus toutes mes analyses mais je ne suis pas en mesure d'accéder aux données.Veuillez partager vos commentaires.

26
saurabh chandela

L'API de base vous permet de gérer un ensemble de ressources communes utilisées dans Magento. Toutefois, vous pouvez choisir de gérer votre propre ensemble de ressources ou étendre l’API de base pour gérer des ressources supplémentaires.

Ce serait une aide complète pour créer une API personnalisée.

http://devdocs.magento.com/guides/m1x/api/soap/create_your_own_api.html

2
Chetan Panchal

L'URL de votre ressource doit correspondre à celle de votre api2.xml

$resourceUrl = "$apiUrl/custom";

devrait être :

$resourceUrl = "$apiUrl/custom/createwebsite/"

Que signifie le :s à la fin de $ apiUrl/custom/createwebsite /: s ?

0
Bouni