Saya perlu mengakses Magento API dari aplikasi berbasis JavaScript lokal (Titanium Desktop) dan bertanya-tanya apa cara terbaik untuk melakukannya.
Apa yang saya temukan sejauh ini:
- Satu-satunya mekanisme otentikasi adalah OAuth, sehingga pengguna harus memasukkan kredensial mereka di situs
- Ada perpustakaan klien JavaScript: https://code.google.com/p/oauth/source/browse/#svn%2Fcode%2Fjavascript
- Untuk aplikasi asli sebagai klien OAuth, Aliran Agen Pengguna OAuth 2 direkomendasikan.
- URL pengalihan harus mengarah ke halaman lokal dari mana token harus diekstraksi atau disalin & ditempelkan
Pertanyaan:
- Apakah mungkin untuk menukar mekanisme otentikasi ke sesuatu seperti otentikasi berbasis HMAC dengan kunci aplikasi dan rahasia? Apakah ada solusi yang sudah terbukti?
- Jika tidak, apakah Aliran Agen Pengguna OAuth mungkin dengan Magento? Dokumentasi tidak menyebutkannya.
- Apakah mungkin untuk menyerahkan kredensial pengguna dengan AJAX (Kebijakan Lintas-Asal bukan masalah di sini) untuk menyembunyikan sebagian besar proses otorisasi dari pengguna? Token akses kemudian dapat diekstraksi langsung dari respons.
javascript
oauth
api
Fabian Schmengler
sumber
sumber
Jawaban:
Seperti yang disebutkan dalam komentar, API SOAP adalah jalan yang harus ditempuh.
Solusi 1:
Suds bekerja untuk saya dengan sedikit modifikasi (Penggunaan
Titanium.Network.HTTPClient
bukanXMLHttpRequest
), tetapi tidak lebih dari membuat amplop SOAP untuk panggilan dan mengembalikan seluruh respons XML.Implementasi Bukti-Konsep, menggunakan jQuery Ditangguhkan untuk chaining permintaan:
Contoh penggunaan:
Solusi 2:
Ternyata menulis adaptor API sendiri bisa sangat mudah. Dengan contoh
core-hack ini(tautan mati) Saya dapat menulis modul bersih untuk adaptor JSON-RPC berdasarkanZend_Json_Server
. Ia menggunakan Otentikasi dan ACL yang sama dengan API SOAP dan XML-RPC.Untuk menggunakan titik masuk
/api/jsonrpc
, controller baru harus ditambahkan keapi
rute:Klien JS saya sekarang terlihat seperti ini (sekali lagi dengan JQuery.Deferred, tetapi tidak ada perpustakaan pihak ketiga tambahan untuk API):
Perhatikan bahwa semua metode setelah masuk disalurkan melalui
call
. Themethod
parameter adalah sesuatu sepertisales_order.list
, yangargs
parameter array atau objek dengan argumen metode.Contoh penggunaan:
sumber
config.xml
(jika Anda tidak ingin menggunakanapi
rute, Anda juga dapat menggunakan rute kustom sebagai gantinya, mendefinisikannya seperti yang Anda lakukan dalam modul Magento lainnya