Magento – OAuth for REST API using PHP

apimagento-1.7magento-1.8oauthrest

I'm looking for a working example of a PHP script for authentication using OAuth.

I have followed the testing instructions here (http://www.magentocommerce.com/api/rest/testing_rest_resources.html) using the REST client on Firefox.

I already have created a consumer so I have the Consumer Key and Consumer Secret. But, according to the website I also need an Access Token and an Access Token Secret. I'm not entirely sure how to get those. I've googled other examples for different APIs (e.g., Twitter), but I cannot port the knowledge over to Magento.

Any help is appreciated.

Best Answer

The documentation on Magento's site has a good example here

Here's one of the examples that they give for creating a simple product as an Admin user with OAuth authentication.

session_start();
if (!isset($_GET['oauth_token']) && isset($_SESSION['state']) && $_SESSION['state'] == 1) {
$_SESSION['state'] = 0;
}
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 {
    $oauthClient->setToken($_SESSION['token'], $_SESSION['secret']);
    $resourceUrl = "$apiUrl/products";
    $productData = json_encode(array(
        'type_id'           => 'simple',
        'attribute_set_id'  => 4,
        'sku'               => 'simple' . uniqid(),
        'weight'            => 1,
        'status'            => 1,
        'visibility'        => 4,
        'name'              => 'Simple Product',
        'description'       => 'Simple Description',
        'short_description' => 'Simple Short Description',
        'price'             => 99.95,
        'tax_class_id'      => 0,
    ));
    $headers = array('Content-Type' => 'application/json');
    $oauthClient->fetch($resourceUrl, $productData, OAUTH_HTTP_METHOD_POST, $headers);
    print_r($oauthClient->getLastResponseInfo());
}
} catch (OAuthException $e) {
print_r($e);
}
Related Topic