perlu memanggil api istirahat Magento2 di tingkat kode cara memanggil magento standar REST APIS
perlu memanggil api istirahat Magento2 di tingkat kode cara memanggil magento standar REST APIS
Jawaban:
Magento 2 mendukung REST (Representational State Transfer) dan SOAP (Simple Object Access Protocol), sama seperti versi Magento lama yang biasa kami gunakan. Dokumentasi resmi sebagian besar didasarkan pada permintaan ikal mentah tanpa contoh dalam beberapa bahasa tertentu. PHP adalah apa yang kami lakukan dan akan ada banyak orang yang menggunakannya juga, jadi kami mencoba memberi Anda contoh nyata PHP tentang cara menghubungkan dan menggunakan Magento 2 API.
Ada tiga tipe pengguna yang memiliki akses ke API di Magento dan itu adalah:
1) Pengguna tamu Mereka memiliki akses ke sumber daya dengan izin anonim.
2) Administrator / Integrasi Mereka memiliki akses ke sumber daya yang diizinkan oleh konfigurasi.
3) Pelanggan Mereka memiliki akses ke sumber daya dengan izin sendiri atau anonim.
Ada tiga jenis otentikasi yang dapat kita gunakan: 1) Otentikasi berbasis Token
Ide di sini adalah untuk memberikan nama pengguna dan kata sandi selama koneksi awal dan menerima token untuk digunakan untuk permintaan yang mengikuti, sampai token berakhir.
Berikut ini contoh menggunakan API sisanya melalui 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);
Catatan: - pastikan nama pengguna admin pengguna dengan sumber daya yang tepat harus ditugaskan
Otentikasi berbasis OAuth
Akses ke API diizinkan melalui OAuth 1.0a ( https://en.wikipedia.org/wiki/OAuth ). Dalam hal ini, pikirkan Magento API sebagai layanan yang memungkinkan akses ke sumber daya ke pihak ketiga melalui persetujuan yang didapat dari pemilik sumber daya. Misalnya, mendapatkan info pelanggan (pemilik sumber daya) dari Magento API (layanan) dari aplikasi pihak ketiga (klien). Ini sedikit keluar dari ruang lingkup untuk artikel ini dan artikel terpisah sedang dalam persiapan, namun ada contoh sederhana menggunakan integrasi tanpa "URL tautan Identitas" dan "URL Panggilan Balik".
Yang perlu Anda lakukan adalah pergi ke Sistem> Integrasi dan menambahkan integrasi baru tanpa "URL tautan Identitas" dan "URL Panggilan Balik". Ingatlah untuk mengedit akses sumber daya pada tab API.
Kemudian jalankan skrip ini:
<?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);
beberapa API kita perlu menggunakan searchCriteria ex: -
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
lihat http://devdocs.magento.com/guides/v2.1/howdoi/webapi/search-criteria.html
Untuk melengkapi contoh yang sudah diberikan, tetapi gunakan parameter get di url, gunakan: -
$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);