วิธีการรวม magento REST API กับบุคคลที่สาม?


9

ฉันแค่พยายามหาข้อมูลเกี่ยวกับ REST API มีตัวอย่างบางส่วนที่ทรัพยากรวีโอไอพีและบล็อกส่วนตัวบางส่วน เหมือนกันหมด !!

เป็นข้อมูลพื้นฐานที่พบว่าฉันต้องการอัปเดตผลิตภัณฑ์ผ่าน REST API ฉันต้องใช้จุดสิ้นสุดการให้สิทธิ์ผู้ดูแล (/ admin / oauth_authorize) และถ้าฉันใช้ลูกค้าหรือแขกฉันสามารถดึงข้อมูลได้

ฉันพยายามสร้างโค้ดตัวอย่างและตรวจสอบและพบว่าเมื่อฉันเรียกใช้รหัสผ่านเบราว์เซอร์ฉันต้องเข้าสู่ระบบครั้งแรกผู้ดูแลระบบแล้วฉันต้องยอมรับการเข้าถึงและจากนั้นฉันสามารถใช้ทรัพยากร API

ฉันไม่รู้ว่าทำไมจึงขอให้ฉันเข้าสู่ระบบในผู้ดูแลระบบก่อน และถ้าฉันต้องเข้าสู่ระบบเพื่อเข้าถึงมันจะทำงานภายในเซิร์ฟเวอร์ได้อย่างไร

ฉันพยายามสร้างโค้ดตัวอย่างโดยใช้บล็อกด้านล่าง

http://inchoo.net/ecommerce/magento/consuming-magento-rest-zend_oauth_consumer/comment-page-1/#comment-66775

และมันทำงานได้ดีและให้การตอบสนองด้วย

ที่จริงแล้วฉันกำลังมองหาว่ามันจะทำงานอย่างไรภายในระหว่างสองเซิร์ฟเวอร์และวิธีที่ลูกค้าจะเรียก REST API ถึง Magento ว่ามันจะรับรองความถูกต้องได้อย่างไรและ Magento จะตอบสนองอย่างไร

กำลังมองหาคำแนะนำ


REST API นั้นมีไว้สำหรับการเข้าถึง OAuth เช่นการโต้ตอบกับผู้ใช้ดังนั้นสำหรับกรณีของคุณอาจไม่ใช่ตัวเลือกที่เหมาะสม หากคุณไม่ต้องการใช้ SOAP API บางทีคำถามและคำตอบนี้อาจช่วยคุณ: magento.stackexchange.com/questions/510/…
Fabian Schmengler

คำตอบ:


6

คุณสามารถหาคำอธิบายที่ดีของวีโอไอพี REST API ที่นี่ นอกจากนี้ยังมีตัวอย่างเกี่ยวกับวิธีการดึงผลิตภัณฑ์ในฐานะลูกค้าที่เข้าสู่ระบบ ฉันจะทำซ้ำที่นี่เพื่อให้คำตอบนานขึ้น

<?php
/**
 * Example of products list retrieve using Customer account via Magento REST API. OAuth authorization is used
 */
$callbackUrl = "http://yourhost/oauth_customer.php";
$temporaryCredentialsRequestUrl = "http://magentohost/oauth/initiate?oauth_callback=" . urlencode($callbackUrl);
$adminAuthorizationUrl = 'http://magentohost/oauth/authorize';
$accessTokenRequestUrl = 'http://magentohost/oauth/token';
$apiUrl = 'http://magentohost/api/rest';
$consumerKey = 'yourconsumerkey';
$consumerSecret = 'yourconsumersecret';

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";
        $oauthClient->fetch($resourceUrl);
        $productsList = json_decode($oauthClient->getLastResponse());
        print_r($productsList);
    }
} catch (OAuthException $e) {
    print_r($e);
}

ฉันทดสอบโค้ดนี้แล้ว เมื่อฉันใช้ $ adminAuthorizationUrl = ' magentohost / oauth / อนุญาต ' มันจะเปลี่ยนเส้นทางฉันก่อนเพื่อเข้าสู่ระบบลูกค้าและเมื่อฉันใช้ $ adminAuthorizationUrl = ' magentohost / admin / oauth_authorize ' มันจะเปลี่ยนเส้นทางฉันไปสู่การเข้าสู่ระบบของผู้ดูแลระบบก่อนแล้วฉันต้อง ตรวจสอบมันก่อน บุคคลที่สามสามารถเข้าถึงสิ่งนี้ได้อย่างไร หมายความว่าถ้าฉันกำลังตั้งค่า cron จากบุคคลที่สามให้ทำงานนี้เช่นสร้างผลิตภัณฑ์ใหม่หรืออัปเดตที่มีอยู่แล้วว่าจะรับรองความถูกต้องได้อย่างไร
Akhilesh Patel

@Marius รู้วิธีแก้ปัญหาสำหรับความคิดเห็น OP ล่าสุดกับคำตอบของคุณหรือไม่ วิธีใช้ oAuth และ REST โดยไม่เปลี่ยนเส้นทางและบันทึก procces
sergio

@sergio ขออภัยฉันไม่
Marius

ฉันค่อนข้างใหม่สำหรับธุรกิจ oAuth นี้ แต่เมื่อฉันเข้าใจแล้วจุดรวมของมันคือบังคับให้ลงชื่อเข้าใช้แบบโต้ตอบ ลูกค้าเว็บไซต์หรือผู้ดูแลระบบที่ลงทะเบียนต้องให้สิทธิ์แอป หากคุณไม่ต้องการคุณสามารถลองใช้บทบาท "ผู้เยี่ยมชม" ซึ่งฉันเชื่อว่าไม่จำเป็นต้องใช้ขั้นตอน oAuth (ไม่ลองตัวเอง) หรือใช้ SOAP / XML-RPC API แทน REST
Doug McLean

@DougMcLean หรือคุณสามารถใช้อะแดปเตอร์ตรวจสอบความถูกต้องที่กำหนดเองsnowcore.net/magento-rest-without-oauth
Roman Snitko

2

จากโค้ดด้านบนคุณสามารถโทเค็นและลับโทเค็นเพียงคัดลอก:

...........
echo 'token:---'.$_SESSION['token'].'----secret----'.$_SESSION['secret'];
........

ดังนั้นคุณสามารถเตรียมรหัสด้านล่างเพื่อสร้าง / แก้ไขผลิตภัณฑ์:

<?php
$apiUrl = 'APIURL';
$consumerKey = 'CONSUMERKEY';
$consumerSecret = 'CONSUMERSECRED';
$token = 'TOCKEN';
$tokensecret = 'TOKENSCRET';

try {

    $oauthClient = new OAuth($consumerKey, $consumerSecret, OAUTH_SIG_METHOD_HMACSHA1);
    $oauthClient->setToken($token, $tokensecret);
    $oauthClient->enableDebug();          

    $productData = json_encode(array(           
            'name'              => 'TEST PRODUCT',           
            'price'             => 11.11          
        ));       

    $resourceUrl = "$apiUrl/products/222";
    $oauthClient->fetch($resourceUrl, $productData , 'PUT',  array('Content-Type' => 'application/json'));
    $responseArr = json_decode($oauthClient->getLastResponse());
    print_r($responseArr);

} catch (OAuthException $e) {
    print_r($e);
}

?>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.