如何在magento中实现自定义REST API?

 堵晴__晨1997_361 发布于 2023-02-09 11:42

我正在尝试创建自定义REST API.我创建了自己的模块Custom/Restapi.Custom [Namespace],Restapi [Module name].

在etc文件夹中,我创建了config.xml和api2.xml.以下是代码 - :

config.xml中



    
        
            0.1.0.0
        
    
    
        
            
                Custom_Restapi_Model
            
        

api2.xml


    
        
            
                Custom Rest API
                10
            
        
        
            
                restapi
                restapi/api2_restapi
                Testing My Rest API
                10
                
                    
                        1
                       
                    
                   
                
                
                    
                        /custom/createwebsite/:s
                        entity
                    
                
                1
            
        
    

模型目录结构

应用程序\代码\本地\自定义\ RESTAPI \型号\ 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下面是file-代码:

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 /模块配置文件.

管理员设置

    我创建了OAuth角色admin.在左侧选项卡"角色Api资源"模块设置可见并选中.

    还配置了休眠消费者设置.

下面是REST API调用脚本代码 - :

Api调用脚本代码

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

// 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:
".$data; } } catch (OAuthException $e) { print_r($e->getMessage()); //echo "
"; //print_r($e->lastResponse); }

当我尝试访问API时,它会要求授权

授权应用程序管理员请求访问您的帐户

授权申请后,您将有权访问您的帐户.

授权按钮和拒绝按钮

点击授权按钮错误后:

无效的身份验证/错误请求(获得404,预期的HTTP/1.1 20X或重定向){"messages":{"error":[{"code":404,"message":"请求与任何路由都不匹配". }]}}

PHP OAuth扩展在我的OAuth设置中不支持RSA-SHA1支持

参考链接 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提供的函数来访问其余的代码,下面是函数列表 - :

    _创建()

    _retrieve()

    _删除()

    _retrieveCollection()

    _Update()

    _multiUpdate()

    _multiDelete

错误无效的身份验证/错误请求(获得404,预期的HTTP/1.1 20X或重定向){"messages":{"error":[{"code":404,"message":"请求与任何路由都不匹配. "}]}}

我已经分享了我的所有分析,但我无法访问数据.请分享您的反馈.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有