Подтвердить что ты не робот

Как реализовать пользовательский REST API в magento?

Я пытаюсь создать свой собственный REST api. Я создал свой собственный модуль Custom/Restapi.Custom [Namespace], Restapi [Имя модуля].

В папке etc я создал config.xml и api2.xml. Ниже приведен код -:

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>

Структура каталогов модели

Приложение\код\Local\Custom\Restapi\Model\API2\Restapi.php. Ниже находится код файла:

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 Ниже приведен код - -

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

Файл конфигурации Etc/module также настроен.

Настройка администратора

  • Я создал администратор роли OAuth. В левой части вкладки "Параметры роли Api Resource" видны и выбраны.

  • Также настроен параметр Rest Consumer.

Ниже приведен REST API, вызывающий script code -:

Api Calling script Код

$consumerKey    = 'ozr74egldg07dpxtkk9uq1o8bj6wwd65'; // from Admin Panel &quot;REST - OAuth Consumers page&quot;
$consumerSecret = 'ozr74egldg07dpxtkk9uq1o8bj6wwd65'; // from Admin Panel &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 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);
}

Когда я пытаюсь получить доступ к API, тогда он запрашивает авторизацию

Авторизовать приложение admin запрашивает доступ к вашей учетной записи

После авторизации приложение получит доступ к вашей учетной записи.

кнопка авторизации и отклонения

После нажатия кнопки Авторизация Ошибка -:

Неверный запрос auth/bad (получил 404, ожидаемый HTTP/1.1 20X или перенаправление) { "messages": { "error": [{ "code": 404, "message": "Запрос не соответствует ни одному маршруту." }}}}

Расширение PHP OAuth не поддерживает поддержку RSA-SHA1 в настройках OAuth

Ссылка ссылки 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/

Мы используем функцию, предоставляемую magento для доступа к коду в порядке покоя, ниже список функций -:

  • _create()
  • _retrieve()
  • _delete()
  • _retrieveCollection()
  • _update()
  • _multiUpdate()
  • _multiDelete

Ошибка Неверный запрос auth/bad (получил 404, ожидаемый HTTP/1.1 20X или перенаправление) { "messages": { "error": [{ "code": 404, "message": "Запрос не соответствует ни одному маршруту." }}}}

Я поделился выше всего моего анализа, но я не могу получить доступ к данным. Пожалуйста, поделитесь своими отзывами.

4b9b3361

Ответ 1

Core API позволяет вам управлять набором общих ресурсов, используемых в Magento. Однако вы можете выбрать свой собственный набор ресурсов для управления, или вы можете расширить Core API для обработки дополнительных ресурсов.

Это поможет полностью создать пользовательский API.

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

Ответ 2

Ваш URL-адрес ressource должен соответствовать таковому в вашем api2.xml

$resourceUrl = "$apiUrl/custom";

должен быть:

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

Что означает :s в конце $apiUrl/custom/createwebsite/: s?