Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Hitung Ongkos Kirim Menggunakan API rajaongkir.com dengan PHP+JQUERY

11 206 vues

Publié le

Publié dans : Logiciels
  • tapi pada saat di panggila melauli , process.php?act=showcity&province , data provinsi nya tampil ,tapi kalo di example.html dia gak muncul gan , itu kenapa ya , mohon petunjuk nya gan
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • gan kok yang saya gak jalan ya ,mulai dari pemilihan provinsi dan kota baik tujuan maupun asal ,
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • Apakah pencarian cost tidak bisa pkek nama..?? dan menampilkan kota tidak bisa berdasarkan nama_provinsi..?? mohon pencerahannya
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • @Uswah Kunio : bisa diperjelas kode yang diganti kalau bisa full di line 23 tsb?
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • gimana caranya membuat pilihan kota sama berat menjadi default kota A n berat 1kg??
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici

Hitung Ongkos Kirim Menggunakan API rajaongkir.com dengan PHP+JQUERY

  1. 1. S HITUNG ONGKOS KIRIM MENGGUNAKA N API RAJAONGKIR.C OM PHP + Jquery Bahasa Indonesia Apr 11th 2015 Oleh Yusuf Akhsan / @xyussanx Level Intermediate
  2. 2. Hello world, Saya adalah Yusuf Akhsan H. , dari Id-More divisi RnD(Research and Development). Id-more is tempat berkumpulnya orang-orang yang peduli dengan perkembangan ilmu pengetahuan dan teknologi di Indonesia, kami melakukan riset dan pengembangan teknologi di disini untuk Indonesia khususnya dan untuk dunia umumnya. Ebook singkat adalah sebagai dokumentasi dari source code yang diberikan di akhir buku, untuk menunjang agar developer juga mengetahui konsep dan cara kerja program tersebut. Ebook ini ditujukan bagi kamu yang sedang membuat sistem untuk perhitungan biaya ongkos kirim dari dan untuk berbagai kota yang ada di Indonesia. Berkat API yang disediakan oelh rajaongkir.com semuanya menjadi mudah dan cepat, mulai dari data provinsi, kota sampai berbagai agen pengirim tersedia disini, so selamat mencoba writer
  3. 3. Pengenalan Tentang Raja Ongkir RajaOngkir merupakan sebuah situs dan web service (API) yang menyediakan informasi ongkos kirim dari berbagai kurir di Indonesia seperti POS Indonesia, JNE, TIKI, PCP, ESL, dan RPX. Secara umum, RajaOngkir ditujukan kepada pengguna yang ingin mengetahui dan membandingkan ongkos kirim dari berbagai kurir dan secara khusus bagi pemilik toko online, maupun bagi orang yang sering berbelanja online. Keunikan dari sistem RajaOngkir adalah data yang terpadu. Anda cukup sekali saja menginputkan nama kota asal, kota tujuan, dan berat, sistem RajaOngkir otomatis melakukan pengecekan ke semua kurir yang didukung. RajaOngkir menghemat waktu dan tenaga Anda! RajaOngkir menyediakan API ongkos kirim yang bisa dimanfaatkan oleh para developer untuk mengembangkan aplikasi untuk berbagai platform, seperti Android, BlackBerry, iOS, desktop, dan lain-lain. Silakan klik di sini untuk informasi lebih lanjut mengenai penggunaan API. Catatan: RajaOngkir tidak berafiliasi dengan kurir-kurir yang disediakan. Contact:Jika Anda memiliki pertanyaan, kritik, dan saran, silakan kirim pesan melalui halaman kontak. Disalin dari : http://rajaongkir.com/tentang
  4. 4. Preparation What you need before code Mempunyai Akun RajaOngkir.com Ini adalah hal yang paling penting, dengan akun raja ongkir maka kamu akan mendapat secret key yang bisa digunakan untuk mengakses berbagai fitur yang tersedia di API rajaongkir.com. Ada 2 jenis akun raja ongkir yaitu starter dan basic, untuk perbedaannya bisa dilihat dari gambar dibawah ini : untuk keterangan lebih lanjut, silahkan kunjungi halaman berkut :http://rajaongkir.com/dokumentasi Download The Core Pada ebook kali ini implementasi API rajaongkir.com akan dilakukan pada bahasa pemrograman PHP, pastikan webserver lokal kamu berjalan dengan baik. Untuk kemudian menggunakan tambahan JQUERY silahkan download disini : http://code.jquery.com/jquery-2.1.3.min.js . JQUERY digunakan untuk bagian ajax dan DOMnya. Karena moto daari idmore adalah “Bui Beautiful and Powerful”, maka menggunakan skeleton sebagai framework frontendnya silahkan download disini : https://github.com/dhg/Skeleton/releases/download/2.0.4/Skeleton-2.0.4.zip.
  5. 5. Directory Structure Agar hasilnya sesuai dengan yang ada di dokumen dan source yang disertakan silahkan buat struktur direktorinya menjadi seperti ini, untuk script.js, example.html, idmore.php dan process.php silahkan buat file baru sendiri.
  6. 6. Start Code : 1st Membuat Frontend Copy Paste Pembahasan tentang front-end hanya sebatas file atau sintak yang diubah. Untuk memulai membuat frontendnya silahkan beralih ke file example.html, untuk kemudian masukan semua tag html dibawah ini kedalamnya. File : example.html <!DOCTYPE html> <html> <head> <link rel="stylesheet" type="text/css" href="css/normalize.css"> <link rel="stylesheet" type="text/css" href="css/skeleton.css"> <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript" src="js/script.js"></script> <title>Penggunaan API RajaOngkir | IDMore</title> </head> <body> <div class="container"> <div class="row"> <br/> <div class="twelve columns"><h1>Hitung Ongkos Kirim</h1></div> </div> <div class="row"> <div class="twelve columns"><h5>Masukan Data</h5></div> </div> <div class="row"> <div class="two columns"> Asal<br/> <select id="oriprovince"> <option>Provinsi</option> </select>  </div> <div class="two columns"> <br/> <select id="oricity"> <option>Kota</option> </select>  </div> <div class="two columns"> Tujuan<br/> <select id="desprovince"> <option>Provinsi</option> </select>  </div> <div class="two columns"> <br/> <select id="descity">
  7. 7. <option>Kota</option> </select>  </div> <div class="two columns"> Layanan<br/> <select id="service" <option>JNE</option> <option>POS</option> <option>TIKI</option> </select>  </div> <div class="two columns"> <br/> <button id="btncheck">Cek Harga</button>  </div> </div> <div class="row"> <div class="twelve columns"><h5>Harga</h5></div> <hr/> <table class="twelve columns"> <tr> <th>Servis</th> <th>Deskripsi Servis</th> <th>Lama Kirim (hari)</th> <th>Total Biaya (Rp)</th> </tr> <span id="resultsbox"> <tr> <td>...</td> <td>...</td> <td>...</td> <td>...</td> </tr> <tr> <td>...</td> <td>...</td> <td>...</td> <td>...</td> </tr> </span> </table> </div> </div> </body> </html> Hingga ketika dites di browser menghasilkan tampilan sebagai berikut :
  8. 8. Start Code : 2nd Membuat backend Class Utama Untuk memudahkan pemanggilan data dan agar kode lebih ramping maka dibuatkah kelas utama yang akan digunakan untuk menjalankan berbagai fungsi yang berhubungan dengan raja ongkir. Didalam file idmore.php buat class baru bernama IdmoreRO, jika belum paham konsep dari class silahkan baca dokumentasi dari PHP.net di link ini : http://php.net/language.oop5. Didalam class IdmoreRO isi beberapa fungsi sesuai dengan fitur yang disediakan pada percobaan kali ini : file : idmore.php <?php /* * Rajaongkir cek harga * Code by @xyussanx :: idmore */ class IdmoreRO{ public function __construct() { } //menampilkan data provinsi public function showProvince() { } //menampilkan data kabupaten/kota berdasarkan id provinsi public function showCity($province) { } //hitung ongkir public function hitungOngkir($origin,$destination,$weight,$courier) { } } 3 fungsi yang dibuat pada class tersebut mempunyai tujuan masing : showProvince() Menampilkan semua provinsi yang ada di Indonesia, karena sebelum user memilih kota tujuan/asal sebelumnya user akan memilih provonso asal kota tersebut. showCity($province) Dari provinsi yang telah terpilih, maka diambil id provinsi yang terpilih tersebut untuk dijadikan parameter pada fungsi showCity sehingga returnnya hanya menampilkan daftar kota berdasarkan id parameter prvonsinya.
  9. 9. hitungOngkir($origin,$destination,$weight,$courier) Merupakan fitur utama yaitu untuk menghitung ongkos kirim berdasarkan kota asal, kota tujua, berat kiriman dan kurir yang digunakan.
  10. 10. Start Code : 3th Provinsi Menampilkan Data Provinsi Konsep awal adalah provinsi diload secara otomatis ketika halaman selesai diload, pada step 3 ini ada 3 fle yang diubah yaitu : script.js,idmore.php dan process.php. Pastikan kamu sudah mempunyai akun di rajaongkir.com, untuk kemudian mendapatkan secret key yang akan digunakan untuk menggunakan APInya. Untuk selanjutnya adalah membuat fungsi pemanggilan data provinsi di kelas IdMoreRO. Untuk memanggil data dari rajaonmgkir.com pada bahasa PHP menggunakan curl(Client URL Library). Inti dari Curl adalah mengirimkan request/ mendapat responses dari method POST tanpa menggunakan form dari tag HTML. Untuk lebih detailnya silahkan baca disini : http://php.net/manual/en/book.curl.php. Jika menggunakan paket dari XAMPP biasanya curl sudah include didalamnya dan siap untuk digunakan, tapi jika belum untuk pengguna Linux terutama Keluarga debian, curl bisa diinstal menggunakan $sudo apt-get install php5-curl untuk pengguna Mac / Windows silahkan cari di internet. Buat Fungsi Menampilkan Data Provinsi File : idmore.php , function :showProvince() public function showProvince() { $curl = curl_init();
  11. 11. curl_setopt_array($curl, array( CURLOPT_URL => "http://rajaongkir.com/api/starter/province", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "xxxAPIKEYxxx" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { $result = 'error'; return 'error'; } else { return $response; } } Pada bagian “CURLOPT_HTTPHEADER ...”, sialhkan ganti “xxxAPIKEYxxx” dengan “key: API KEY” yang sudah didapatkan di akun rajaongkir.com. Cara kerjanya adalah user mengirimkan request ke url http://rajaongkir.com/api/starter/province dengan api key masing-masing. Karena tanpa tambahan parameter sehingga result JSONnya akan menampilkan seluruh data provinsi yang tercatat di rajaongkir. Membuat File Process File : process.php <?php require_once('idmore.php'); $IdmoreRO = new IdmoreRO(); if(isset($_GET['act'])): switch ($_GET['act']) { case 'showprovince': # code... break; default: # code... break; } endif; Require_once file idmore yang didalamnya tersedia class IdmoreRO. Instanisasi dilakukan pada variabel $IdmoreRo = new IdmoreR0(). Untuk memanggil data provinsi yang telah dibuat pada kelas sebelumnya, pada case 'showprovince' tambahkan beberapa line dibawah ini. case 'showprovince': $province = $IdmoreRO­>showProvince();
  12. 12. echo $province; break; Silahkan cek dengan menggunakan browser, apakah result berupa json berisi data provinsi bisa sukses terpanggil sesuai dengan contoh dibawah. Ada kemungkinan result json tidak rapi seperti contoh, agar bisa rapi silahkan install json viewer untuk beberapa browser di link berikut : http://jsonview.com. Membuat AJAX dan DOM Menampilkan Data Provinsi Setelah response json berhasil didapatkan langkah berikutnya adalah sisi JavaScript untuk membuat AJAX dan DOMnya. file:script.js $(document).ready(function(){ loadProvinsi('#oriprovince'); loadProvinsi('#desprovince'); $('#oriprovince').change(function(){ alert('yussan'); }); $('#desprovince').change(function(){ alert('yussan'); }); }); function loadProvinsi(id){ $('#oricity').hide(); $('#descity').hide(); $(id).html('loading...');
  13. 13. $.ajax({ url:'process.php?act=showprovince', dataType:'json', success:function(response){ $(id).html(''); province = ''; $.each(response['rajaongkir']['results'], function(i,n){ province = '<option  value=”'n['province_id']”>'+n['province']+'</option>'; province = province + ''; $(id).append(province); }); }, error:function(){ $(id).html('ERROR'); } }); } untuk kemudian jika dicek pada halaman example.html akan menampilkan data provinsi sebagai berikut. $(document).ready(function(){ adalah fungsi bawaan dari jquery yang artinya fungsi didalamnya baru dijalankan setelah halaman berhasil diload dengan sempurna. Fungsi yang otomatis dijalankan adalah loadProvinsi(id), dan yang menjadi parameternya adalah id dari id select input milik oriprovince dan desprovince. Fungsi loadProvince(id) Ketika eksekusi fungsi ini maka secara otomatis select kota akan disembunyikan, menggunakan hide(). Proses utama adalah penggunakan fungsi ajax() bawaan dari jquery, silahkan pelajari lebih lanjut di http://api.jquery.com/jquery.ajax/. $.each() dan append() Response berupa JSON melalui proses looping(perulangan), dimasukan kedalam variabel province untuk kemudian menggunakan fungsi append() dari jquery digunakan untuk menambah option baru didalam input select. Tes halaman example.html, maka mendapatkan data provinsi didalam input select sebagai berikut.
  14. 14. Menampilkan Data Kota/Kabupaten Berdasarkan Provinsi Konsep untuk menampilkan data kota berdsarkan provinsi sama dengan menampilkan data provinsi, sehingga penjelasan tidak terlalu mendalam. Kembali ke class utama, tujuan utamanya adalah membuat fungsi untuk menampilkan kota berdasarkan id province. Pada fungsi showCity(), sialahkan uabh seperti contoh dibawah ini. Jangan lupa untuk mengubah keynya sesuai dengan key masing-masing. File : idmore.php public function showCity($province) { $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "http://rajaongkir.com/api/starter/city? province=$province", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "key: xxx" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) {
  15. 15. $result = 'error'; return 'error'; } else { return $response; } } untuk editing selanjutnya pada file proses.php, dengan menambahkan action untuk show city, menjadi sebagai berikut. file : process.php case 'showcity': $idprovince = $_GET['province']; $city = $IdmoreRO­>showCity($idprovince); echo $city; break; default: sehingga jika dites menggunakan browser, sebagai contoh menampilkan kota-kota untuk provinsi dengan id 13, menghasilkan response seperti ini.
  16. 16. Dan url siap digunakan untuk ajax. Sekarang adalah tahap pembuatan AJAX dan DOMnya, kembali ke script.js, ada 2 perubahan yang akan dilakukan disini.pertama adalah merubah isi on document readinya. File : script.js $(document).ready(function(){ loadProvinsi('#oriprovince'); loadProvinsi('#desprovince'); $('#oriprovince').change(function(){ $('#oricity').show(); var idprovince = $('#oriprovince').val(); loadCity(idprovince,'#oricity') }); $('#desprovince').change(function(){ $('#descity').show(); var idprovince = $('#desprovince').val(); loadCity(idprovince,'#descity') }); }); baris $('#oriprovince').change(...) dan $('#desprovince').change(...) dimaksudkan fungsi baru dieksekusi ketika user melakukan pemilihan pada data provinsi. Fungsi yang diekseskusi adalah sebagai berikut. File : script.js function loadCity(idprovince,id){ $.ajax({ url:'process.php?act=showcity', dataType:'json', data:{province:idprovince}, success:function(response){ $(id).html(''); city = ''; $.each(response['rajaongkir']['results'], function(i,n){ city = '<option value="'+n['city_id'] +'">'+n['city_name']+'</option>'; city = city + ''; $(id).append(city); }); }, error:function(){ $(id).html('ERROR'); } }); } Jika di tes di browser maka akan menghasilkan sebagai berikut:
  17. 17. Start Code : 4th Hitung Ongkir Tahap Hitung Ongkir Merupakan tahap akhir dari pembuatan sistem ini. Tahap pembuatannya masih sama, dimulai dengan membuat fungsi diclass utama, manajemen proses di proses.php, dan membuat AJAX dan DOM di script.js, serta perubahan sedikit pada file example.html. Ubah example.html Tujuannya adalah menambah input untuk berat kiriman, cukup edit pada bagian layanan menjadi seperti ini. File : example.html <div class="two columns"> Layanan<br/> <select id="service" <option>JNE</option> <option>POS</option> <option>TIKI</option> </select>  <br/> Berat (gram)<br/> <input  style="width:100px" id="berat" type="number"> </div> Dan menghasilkan tampilan sebagai berikut Fungsi hitungOngkir() Parameter untuk menjalankan fungsi ini adalah idkota asal, idkotatujuan, id kurir, dan berat paket.
  18. 18. Pada fungsi hitungOngkir(), ubah menjadi seperti berikut : *)jangan lupa memasukan api key masing-masing file : idmore.php //hitung ongkir public function hitungOngkir($origin,$destination,$weight,$courier) { $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "http://rajaongkir.com/api/starter/cost", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS =>  "origin=$origin&destination=$destination&weight=$weight&courier=$courier", CURLOPT_HTTPHEADER => array( "key: $this­>key" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { $result = 'error'; return 'error'; } else { return $response; } } Selanjutnya beralih ke bagian manajemen process, pindah ke file process.php, dan tambahkan kondisi baru sebagai berikut. File : process.php case 'cost': $origin = $_GET['origin']; $destination = $_GET['destination']; $weight = $_GET['weight']; $courier = $_GET['courier']; $cost = $IdmoreRO­>hitungOngkir($origin,$destination,$weight, $courier); echo $cost; break; untuk kemudian tes do browser, apakah mendapatkan response yang sesuai.
  19. 19. Pembuatan AJAX dan DOM Untuk Hitung Ongkir Metode kali ini berbeda, untuk parsing JSON yang didapat dari raja ongkit, tidak menggunakan javascript melaninkan menggunakan php. Hasil parsing dari PHP dijadikan response dari AJAX yang telah dibuat. Untuk itu kita kembali lagi ke process.php ubah pada bagian case 'cost' nya menjadi seperti dibawah ini. file:process.php case 'cost': $origin = $_GET['origin']; $destination = $_GET['destination']; $weight = $_GET['weight']; $courier = $_GET['courier']; $cost = $IdmoreRO­>hitungOngkir($origin,$destination,$weight, $courier); //parse json $costarray = json_decode($cost); $results = $costarray­>rajaongkir­>results; if(!empty($results)): foreach($results as $r): foreach($r­>costs as $rc): foreach($rc­>cost as $rcc): echo "<tr><td>$r­>code</td><td>$rc­ >service</td><td>$rc­>description</td><td>$rcc­ >etd</td><td>".number_format($rcc­>value)."</td></tr>";
  20. 20. endforeach; endforeach; endforeach; endif; //end of parse json break; Json hasil dari request ke API rajaongkir untuk kemudian di decode menjadi array di PHP menggunakan json_encode() untuk mempelajari lebih lanjut silahkan cek link berikut http://php.net/manual/en/ref.json.php . Setelah menjadi array proses berikutnya menjadi lebih muda menggunakan foreach(). Array yang dihasilkan dari hasil encode_json() terdiri dari 3 lapisan sehingga membutuhkan 3 kali foreach, seperti inilah lapisan array tersebut. Rajaongkir->results results->costs (kurir) costs->detail (seperti paket kirim,lama hari dan total biaya) Untuk tes apakah encoding dan looping berhasil dijalankan tes menggunakan url secara langsung. Jika hasilnya sudah sesuai dengan gambar diatas berarti AJAX dan DOMnya siap dibuat. Untuk selanjutnya kembali ke file script.js untuk dibuat AJAX dan DOMnya. Pada function cekHarga() yang sudah dibuat sebelumnya, silahkan edit menjadi seperti ini. File : script.js function cekHarga(){ var origin = $('#oricity').val(); var destination = $('#descity').val(); var weight = $('#berat').val(); var courier = $('#service').val(); $.ajax({ url:'process.php?act=cost', data: {origin:origin,destination:destination,weight:weight,courier:courier}, success:function(response){ $('#resultsbox').html(response); }, error:function(){ $('#resultsbox').html('ERROR'); } }); }  yang menjadi perbedaan adalah dihilangkannya data:'jsonfile' dan response on success nya. Maksud dari line adalah semua tampilan yang dihasilkan oleh url akan menjadi response bagi fungsi ini.
  21. 21. Agar tampilan lebih rapi lakukan sedikir perubahan pada file example.html pada line table menjadi seperti dibawah ini. <table class="twelve columns"> <thead> <tr> <th>Kurir</th> <th>Servis</th> <th>Deskripsi Servis</th> <th>Lama Kirim (hari)</th> <th>Total Biaya (Rp)</th> </tr> </thead> <tbody id="resultsbox"></tbody> </table>
  22. 22. Testing Hitung Ongkir Test aplikasi Langsung saja buka example.html, masukan provinsi dan kota asal dan tujuan, kurir dan berat,klik tombol cek harga, maka data yang diminta akan tampil dibawahnya. Cukup sekian dan ebook ini ditutup sampai sini.
  23. 23. Link Hitung Ongkir Source Code https://github.com/idmore/rajaongkir.com/tree/master/hitung%20biaya%20-%20jquery. More info https://twitter.com/xyussanx 3th Party http://rajaongkir.com http://api.jquery.com http://skeleton.com http://php.net

×