Pada artikel kali ini akan dijelaskan mengenai perhitungan ongkos kirim dengan menggunakan API RajaOngkir dengan akun tipe Pro. Perbedaan dengan akun starter sebelumnya adalah pada akun Pro ini terdapat fitur untuk melakukan perhitungan sampai dengan tingkat kecamatan. Tutorial perhitungan ongkos kirim dengan akun starter dapat dibaca pada link berikut https://ozkadon.blogspot.com/2018/06/tutorial-program-cek-ongkos-kirim.html.
Program yang sudah jadi dapat didownload melalui link berikut ini https://github.com/Ozkadon/CekOngkirPro. Berikut ini merupakan penjelasan dari program yang sudah dibuat. Terdapat 2 file dalam folder ini yaitu cek_kecamatan.php dan rajaongkir.php. File utama atau index dari program ini adalah rajaongkir.php. File cek_kecamatan,php berisi kode ajax untuk mendapatkan daftar kecamatan dari suatu kota.
$api_key = "diisi dengan api key anda";
Baris ini diisi dengan api key pada akun Pro yang anda miliki.
function get_city($key){
$data = [
'status' => false,
'result' => []
];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://pro.rajaongkir.com/api/city",
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: ".$key
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
$data['result'] = $err;
} else {
$result = json_decode($response, true);
if ($result['rajaongkir']['status']['code'] == 200){
$data['status'] = true;
$data['result'] = $result['rajaongkir']['results'];
} else {
$data['result'] = $result['rajaongkir']['status']['description'];
}
}
return $data;
}
Baris kode diatas digunakan untuk mendapatkan seluruh daftar kota.
function get_subdistrict($city_id, $key){
$data = [
'status' => false,
'result' => []
];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://pro.rajaongkir.com/api/subdistrict?city=".$city_id,
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: ".$key
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
$data['result'] = $err;
} else {
$result = json_decode($response, true);
if ($result['rajaongkir']['status']['code'] == 200){
$data['status'] = true;
$data['result'] = $result['rajaongkir']['results'];
} else {
$data['result'] = $result['rajaongkir']['status']['description'];
}
}
return $data;
}
Function di atas digunakan untuk mendapatkan daftar kecamatan. Dibutuhkan parameter id kota ($city_id) karena RajaOngkir tidak menyediakan API untuk mendapatkan seluruh daftar kecamatan secara langsung.
function hitung_ongkir($kecamatan_asal, $kecamatan_tujuan, $kurir, $berat, $key){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://pro.rajaongkir.com/api/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=".$kecamatan_asal."&originType=subdistrict&destination=".$kecamatan_tujuan."&destinationType=subdistrict&weight=".$berat."&courier=".$kurir,
CURLOPT_HTTPHEADER => array(
"content-type: application/x-www-form-urlencoded",
"key: ".$key
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
$data['result'] = $err;
} else {
$result = json_decode($response, true);
if ($result['rajaongkir']['status']['code'] == 200){
$data['status'] = true;
$data['result'] = $result['rajaongkir']['results'][0];
} else {
$data['result'] = $result['rajaongkir']['status']['description'];
}
}
return $data;
}
Function di atas digunakan untuk melakukan perhitungan ongkos kirim dengan parameter kecamatan asal, kecamatan tujuan, kurir yang digunakan, berat, dan api key.
<form method="GET">
Kota Asal Pengiriman<br/>
<select name="kota_asal" id="kota_asal">
<?php
foreach ($city as $item):
echo "<option value='".$item['city_id']."'>".$item['type']." ".$item['city_name']."</option>";
endforeach;
?>
</select>
<br/><br/>
Kecamatan Asal Pengiriman<br/>
<select name="kecamatan_asal" id="kecamatan_asal">
<?php
$check = get_subdistrict($city[0]['city_id'],$api_key);
if ($check['status']){
$subdistrict = $check['result'];
foreach ($subdistrict as $item):
echo "<option value='".$item['subdistrict_id']."'>".$item['subdistrict_name']."</option>";
endforeach;
}
?>
</select>
<br/><br/><br/><br/>
Kota Tujuan Pengiriman<br/>
<select name="kota_tujuan" id="kota_tujuan">
<?php
foreach ($city as $item):
echo "<option value='".$item['city_id']."'>".$item['type']." ".$item['city_name']."</option>";
endforeach;
?>
</select>
<br/><br/>
Kecamatan Tujuan Pengiriman<br/>
<select name="kecamatan_tujuan" id="kecamatan_tujuan">
<?php
$check = get_subdistrict($city[0]['city_id'],$api_key);
if ($check['status']){
$subdistrict = $check['result'];
foreach ($subdistrict as $item):
echo "<option value='".$item['subdistrict_id']."'>".$item['subdistrict_name']."</option>";
endforeach;
}
?>
</select>
<br/><br/><br/><br/>
Kurir<br/>
<select name="kurir">
<option value="jne">JNE</option>
<option value="pos">POS Indonesia</option>
<option value="tiki">TIKI</option>
</select>
<br/><br/>
Berat<br/>
<input type=text name="berat" value=500> gram
<br/><br/>
<button type="submit">CEK Ongkir</button>
</form>
Kode di atas untuk menampilkan form sederhana. Tampilan dari form dapat anda sesuaikan sendiri dengan kebutuhan program anda,
if (isset($_GET['kota_asal'])){
$kecamatan_asal = $_GET['kecamatan_asal'];
$kecamatan_tujuan = $_GET['kecamatan_tujuan'];
$kurir = $_GET['kurir'];
$berat = $_GET['berat'];
$ongkir = hitung_ongkir($kecamatan_asal,$kecamatan_tujuan,$kurir,$berat,$api_key);
echo "<pre>";
print_r($ongkir['result']);
echo "</pre>";
}
Bagian ini untuk melakukan perhitungan ongkos kirim saat melakukan submit form.
<script>
$('#kota_asal').on('change', function(){
var city_id = $(this).val();
var key = "<?=$api_key;?>";
$.ajax({
type : 'POST',
url : 'http://localhost/CekOngkirPro/cek_kecamatan.php',
data : {'city_id' : city_id, 'key' : key},
success: function (data) {
$("#kecamatan_asal").html(data);
}
});
});
$('#kota_tujuan').on('change', function(){
var city_id = $(this).val();
var key = "<?=$api_key;?>";
$.ajax({
type : 'POST',
url : 'http://localhost/CekOngkirPro/cek_kecamatan.php',
data : {'city_id' : city_id, 'key' : key},
success: function (data) {
$("#kecamatan_tujuan").html(data);
}
});
});
</script>
Javascript di atas digunakan untuk melakukan request ajax ke cek_kecamatan.php saat anda melakukan perubahan pada combobox daftar kota asal dan kota tujuan. Perhitungan ongkos kirim pada program ini menggunakan id kecamatan sebagai parameter asal dan tujuan nya.
$data = [
'status' => false,
'result' => []
];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://pro.rajaongkir.com/api/subdistrict?city=".$_POST['city_id'],
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: ".$_POST['key']
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
$data['result'] = $err;
} else {
$result = json_decode($response, true);
if ($result['rajaongkir']['status']['code'] == 200){
$data['status'] = true;
$data['result'] = $result['rajaongkir']['results'];
} else {
$data['result'] = $result['rajaongkir']['status']['description'];
}
}
if ($data['status']){
$subdistrict = $data['result'];
foreach ($subdistrict as $item):
echo "<option value='".$item['subdistrict_id']."'>".$item['subdistrict_name']."</option>";
endforeach;
}
Bagian terakhir ini merupakan isi dari file cek_kecamatan.php. Kode tersebut digunakan untuk mendapatkan daftar kecamatan berdasarkan kota yang dipilih saat melakukan request ajax sebelumnya. Sama seperti program pada akun starter sebelumnya, contoh program pada akun pro ini juga akan melakukan request api setiap halaman ini diload. Jadi sebaiknya gunakan database untuk menyimpan semua daftar kota dan kecamatan sebelumnya, sehingga program akan melakukan request ajax daftar kecamatan dengan mengambil data melalui database bukan melalui api RajaOngkir. Demikianlah artikel Tutorial Program Cek Ongkos Kirim Dengan Menggunakan API RajaOngkir (Akun Pro). Selamat mencoba.
Post a Comment
Post a Comment