ต้องเรียก Magento2 ส่วนที่เหลือ api ในระดับรหัสวิธีการเรียก Magento REST APIS เริ่มต้น
ต้องเรียก Magento2 ส่วนที่เหลือ api ในระดับรหัสวิธีการเรียก Magento REST APIS เริ่มต้น
คำตอบ:
Magento 2 รองรับ REST (Representational State Transfer) และ SOAP (Simple Object Access Protocol) เหมือนกับ Magento รุ่นเก่าที่เราคุ้นเคย เอกสารอย่างเป็นทางการส่วนใหญ่จะขึ้นอยู่กับคำขอ curl แบบดิบโดยไม่มีตัวอย่างในบางภาษา PHP เป็นสิ่งที่เราทำและจะมีหลายคนใช้เช่นกันดังนั้นเราจึงพยายามให้ตัวอย่าง PHP จริงเกี่ยวกับวิธีการเชื่อมต่อและใช้ Magento 2 API
มีสามประเภทผู้ใช้ที่สามารถเข้าถึง API ใน Magento และประเภท:
1) ผู้ใช้ที่เป็นแขกพวกเขาสามารถเข้าถึงทรัพยากรโดยได้รับอนุญาตโดยไม่ระบุชื่อ
2) ผู้ดูแลระบบ / บูรณาการพวกเขามีการเข้าถึงทรัพยากรที่ได้รับอนุญาตจากการกำหนดค่า
3) ลูกค้าพวกเขาสามารถเข้าถึงทรัพยากรด้วยการอนุญาตด้วยตนเองหรือไม่เปิดเผยชื่อ
การตรวจสอบความถูกต้องมีสามประเภทที่เราสามารถใช้ได้: 1) การตรวจสอบตามโทเค็น
แนวคิดที่นี่คือการระบุชื่อผู้ใช้และรหัสผ่านในระหว่างการเชื่อมต่อเริ่มต้นและรับโทเค็นที่จะใช้สำหรับคำขอที่ตามมาจนกระทั่งโทเค็นหมดอายุ
นี่คือตัวอย่างการใช้ API ที่เหลือผ่าน PHP
<?php
$userData = array("username" => "USERNAMe", "password" => "PASSWORD");
$ch = curl_init("http://www.YOUR_DOMIAN.com/rest/V1/integration/admin/token");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($userData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", "Content-Lenght: " . strlen(json_encode($userData))));
$token = curl_exec($ch);
$ch = curl_init("http://www.YOUR_DOMIAN.com/rest/V1/products/LC515");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", "Authorization: Bearer " . json_decode($token)));
$result = curl_exec($ch);
var_dump($result);
หมายเหตุ: - ตรวจสอบให้แน่ใจว่าชื่อผู้ใช้เป็นผู้ดูแลระบบที่มีทรัพยากรที่เหมาะสมควรได้รับมอบหมาย
การพิสูจน์ตัวตนแบบ OAuth
อนุญาตให้เข้าถึง API ได้ผ่าน OAuth 1.0a ( https://en.wikipedia.org/wiki/OAuth ) ในกรณีนี้ให้คิดว่า Magento API เป็นบริการที่อนุญาตให้เข้าถึงทรัพยากรไปยังบุคคลที่สามผ่านการอนุมัติที่ได้รับจากเจ้าของทรัพยากร ตัวอย่างเช่นการรับข้อมูลลูกค้า (เจ้าของทรัพยากร) จาก Magento API (บริการ) จากแอปพลิเคชันบุคคลที่สาม (ลูกค้า) นี่เป็นขอบเขตเล็กน้อยสำหรับบทความนี้และบทความแยกต่างหากอยู่ในระหว่างการเตรียมการอย่างไรก็ตามมีตัวอย่างง่ายๆของการใช้การรวมโดยไม่มี“ Identity link URL” และ“ Callback URL”
สิ่งที่คุณต้องทำคือไปที่ระบบ> การรวมระบบและเพิ่มการรวมใหม่โดยไม่มี“ รหัสประจำตัวลิงค์ URL” และ“ URL ติดต่อกลับ” อย่าลืมแก้ไขการเข้าถึงทรัพยากรบนแท็บ API
จากนั้นเรียกใช้สคริปต์นี้:
<?php
function sign($method, $url, $data, $consumerSecret, $tokenSecret)
{
$url = urlEncodeAsZend($url);
$data = urlEncodeAsZend(http_build_query($data, '', '&'));
$data = implode('&', [$method, $url, $data]);
$secret = implode('&', [$consumerSecret, $tokenSecret]);
return base64_encode(hash_hmac('sha1', $data, $secret, true));
}
function urlEncodeAsZend($value)
{
$encoded = rawurlencode($value);
$encoded = str_replace('%7E', '~', $encoded);
return $encoded;
}
// REPLACE WITH YOUR ACTUAL DATA OBTAINED WHILE CREATING NEW INTEGRATION
$consumerKey = '0b3d76jra3log3i2dthslvf0fg54avjv';
$consumerSecret = 'yk8ypwrqrjepa01g3bt0f57ii6kgkqb4';
$accessToken = 'pjhpgtv3un78h83wmhcbk0s8nuxbfhx0';
$accessTokenSecret = 'ryf7sqesnrsn23aifragqywttbm3gkch';
$method = 'GET';
$url = 'http://www.YOUR_DOMIAN..com/rest/V1/products/LC515';
//
$data = [
'oauth_consumer_key' => $consumerKey,
'oauth_nonce' => md5(uniqid(rand(), true)),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_timestamp' => time(),
'oauth_token' => $accessToken,
'oauth_version' => '1.0',
];
$data['oauth_signature'] = sign($method, $url, $data, $consumerSecret, $accessTokenSecret);
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => [
'Authorization: OAuth ' . http_build_query($data, '', ',')
]
]);
$result = curl_exec($curl);
curl_close($curl);
var_dump($result);
API บางตัวที่เราต้องใช้ searchCriteria เช่น: -
GET http://<magento_host>/index.php/rest/V1/products?
searchCriteria[filter_groups][0][filters][0][field]=name&
searchCriteria[filter_groups][0][filters][0][value]=%25Leggings%25&
searchCriteria[filter_groups][0][filters][0][condition_type]=like&
searchCriteria[filter_groups][0][filters][1][field]=name&
searchCriteria[filter_groups][0][filters][1][value]=%25Parachute%25&
searchCriteria[filter_groups][0][filters][1][condition_type]=like
อ้างอิง http://devdocs.magento.com/guides/v2.1/howdoi/webapi/search-criteria.html
เพื่อให้ตัวอย่างที่ให้มาเรียบร้อยแล้ว แต่ใช้พารามิเตอร์รับใน url ให้ใช้: -
$consumerKey = '2f5jp18p92au5bdfjwp686_somemore';
$consumerSecret = 'x1b48mz2pg1do7gi42aqeb1_somemore';
$accessToken = 'o5msvni7j79t79tl09u18x6_somemore';
$accessTokenSecret = 'f9uhqbf4ym6rv4jdxyymt0u_somemore';
function sign($method, $url, $data, $get, $consumerSecret, $tokenSecret){
$data = array_merge($data,$get);
ksort($data);
$url = str_replace('%7E', '~', rawurlencode($url));
$data = str_replace('%7E', '~', rawurlencode(http_build_query($data, '', '&')));
$data = implode('&', [$method, $url, $data]);
$secret = implode('&', [$consumerSecret, $tokenSecret]);
return base64_encode(hash_hmac('sha1', $data, $secret, true));
}
$method = 'GET';
$url = 'https://your.host/rest/V1/customers/search';
$params =[
'search_criteria[filter_groups][0][filters][0][field]' => 'firstname',
'search_criteria[filter_groups][0][filters][0][value]' => '%dallas%',
'search_criteria[filter_groups][0][filters][0][condition_type]' => 'like',
'search_criteria[filter_groups][1][filters][0][field]' => 'lastname',
'search_criteria[filter_groups][1][filters][0][value]' => '%clarke%',
'search_criteria[filter_groups][1][filters][0][condition_type]' => 'like',
];
//$url = 'https://your.host/rest/V1/products/sku';
//$params = [];
$data = [
'oauth_consumer_key' => $consumerKey,
'oauth_nonce' => md5(uniqid(rand(), true)),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_timestamp' => time(),
'oauth_token' => $accessToken,
'oauth_version' => '1.0',
];
$data['oauth_signature'] = sign($method, $url, $data, $params, $consumerSecret, $accessTokenSecret);
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_URL => $url.'?'.http_build_query($params),
CURLOPT_HTTPHEADER => [
'Authorization: Basic '. base64_encode('not:telling'),
'Authorization: OAuth ' . http_build_query($data, '', ',')
]
]);
$result = curl_exec($curl);
curl_close($curl);
var_dump($result);