gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:22:32 26 4
gpt4 key购买 nike

我正在尝试创建我的自定义 REST api。我已经创建了自己的模块 Custom/Restapi.Custom [Namespace]、Restapi[Module name]。

在 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>

模型目录结构

app\code\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 配置文件也设置好了。

管理员设置

  1. 我已创建 OAuth 角色管理员。在左侧选项卡下的“Role Api Resource”模块设置可见并被选中。

  2. Rest Consumer 设置也已配置。

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

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

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

Authorize application admin requests access to your account

After authorization application will have access to you account.

authorize button and reject button

点击授权按钮后出错-:

无效的身份验证/错误请求(收到 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提供的函数来访问rest代码,下面是函数列表-:

  1. _create()
  2. _retrieve()
  3. _delete()
  4. _retrieveCollection()
  5. _update()
  6. _multiUpdate()
  7. _multiDelete

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

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

最佳答案

Core API 允许您管理一组在 Magento 中使用的公共(public)资源。但是,您可以选择拥有自己的一组资源来管理,或者您可能希望扩展核心 API 来处理额外的资源。

这将有助于创建自定义 API。

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

关于php - 如何在 magento 中实现自定义 REST API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20678868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com