it-swarm.com.de

So implementieren Sie benutzerdefinierte REST API in Magento?

Ich versuche, meine benutzerdefinierte REST -API zu erstellen. Ich habe mein eigenes Modul Custom/Restapi.Custom [Namespace], Restapi [Module name] erstellt.

Im etc Ordner habe ich config.xml und api2.xml erstellt. Unten ist der 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>

Modellverzeichnisstruktur

app\code\local\Custom\Restapi\Model\Api2\Restapi.php. Unten ist der Code der Datei:

Restapi.php

class Custom_Restapi_Model_Api2_Restapi extends Mage_Api2_Model_Resource
{

}

app\code\local\Custom\Restapi\Model\Api2\Restapi\Rest\Admin\V1.php Unten ist der Code der Datei:

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"));
 }
}

Die Konfigurationsdatei für usw./Module wird ebenfalls eingerichtet.

Admin-Einstellung

  1. Ich habe eine OAuth-Rolle als Administrator erstellt. Unter der linken Registerkarte "Role Api Resource" werden die Moduleinstellungen angezeigt und ausgewählt.

  2. Die Einstellung für den Restverbraucher ist ebenfalls konfiguriert.

Unten ist REST API-Aufrufskriptcode-:

API-Aufrufskriptcode

$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);
}

Wenn ich versuche, auf das API zuzugreifen, fragt es nach Authorize

Autorisieren Sie den Administrator der Anwendung, um Zugriff auf Ihr Konto zu erhalten

Nach der Autorisierung hat der Antrag Zugriff auf Ihr Konto.

autorisierungstaste und Ablehnungstaste

Nach Klick auf die Schaltfläche Authorize Error-:

Ungültige Authentifizierungs-/Fehleranforderung (404, erwartetes HTTP/1.1 20X oder Weiterleitung) {"messages": {"error": [{"code": 404, "message": "Die Anforderung stimmt mit keiner Route überein." }]}}

PHP Die OAuth-Erweiterung unterstützt keine RSA-SHA1-Unterstützung in meinen OAuth-Einstellungen

Referenzlink 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/customizing-and-extending-the-magento-rest-api/

Wir verwenden die von Magento bereitgestellte Funktion nur für den Zugriff auf den Code in Ruhe. Nachfolgend finden Sie die Funktionsliste:

  1. _erstellen()
  2. _abrufen()
  3. _löschen()
  4. _retrieveCollection ()
  5. _aktualisieren()
  6. _multiUpdate ()
  7. _multiDelete

Fehler Ungültige Authentifizierungs-/Fehleranforderung (404 erhalten, HTTP/1.1 20X erwartet oder Weiterleitung) {"messages": {"error": [{"code": 404, "message": "Die Anforderung stimmt mit keiner Route überein. "}]}}

Ich habe vor allem meine Analyse geteilt, aber ich kann nicht auf die Daten zugreifen. Bitte teilen Sie Ihr Feedback.

26

Mit der Core-API können Sie eine Reihe allgemeiner Ressourcen verwalten, die in Magento verwendet werden. Sie können jedoch Ihre eigenen Ressourcen zum Verwalten auswählen oder die Core-API erweitern, um zusätzliche Ressourcen zu verwalten.

Dies wäre hilfreich, um eine benutzerdefinierte API zu erstellen.

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

2
Chetan Panchal

Ihre Ressourcen-URL sollte der in Ihrer api2.xml entsprechen

$resourceUrl = "$apiUrl/custom";

sollte sein :

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

Wofür steht der :s am Ende von $ apiUrl/custom/createwebsite /: s ?

0
Bouni