Dokumen ini memberikan panduan lengkap untuk membangun sistem perhitungan biaya pengiriman menggunakan API RajaOngkir. Terdiri dari beberapa langkah yaitu membuat frontend, backend, dan menampilkan data provinsi serta kota dari API RajaOngkir menggunakan PHP dan AJAX.
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. 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. 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. 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. 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">
9. 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.
11. 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();
13. 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...');
15. 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) {
16. $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.
17. 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:
18.
19. 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.
20. 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.
21. 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>";
22. 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.
23. 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>
24. 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.