我正在尝试创建自定义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":"请求与任何路由都不匹配. "}]}}
我已经分享了我的所有分析,但我无法访问数据.请分享您的反馈.