Skip to content

Instantly share code, notes, and snippets.

@yunanmr
Forked from cingobean/PackageTracking.php
Created June 23, 2021 07:15
Show Gist options
  • Save yunanmr/7b190587d2e3f03d7bf35101fa8c7de1 to your computer and use it in GitHub Desktop.
Save yunanmr/7b190587d2e3f03d7bf35101fa8c7de1 to your computer and use it in GitHub Desktop.
Package Tracking (J&T | SiCepat | TIKI | AnterAja | WAHANA | Ninja | Lion | Lazada | JNE)
<?php
/*
.---------------------------------------------------------------------------.
| Script: Package Tracking |
| Version: 2.0.4 |
| Release: December 23, 2019 (17:46 WIB) |
| Update: January 05, 2019 (11:41 WIB) |
| |
| Pasal 57 ayat (1) UU 28 Tahun 2014 |
| Copyright © 2019, Afdhalul Ichsan Yourdan. All Rights Reserved. |
| ------------------------------------------------------------------------- |
| Hubungi Saya: |
| - Facebook - Afdhalul Ichsan Yourdan - https://s.id/ShennFacebook |
| - Instagram - ShennBoku - https://s.id/ShennInstagram |
| - Telegram - ShennBoku - https://t.me/ShennBoku |
| - Twitter - ShennBoku - https://s.id/ShennTwitter |
| - WhatsApp - 0878 7954 2355 - 0822 1158 2471 |
'---------------------------------------------------------------------------'
*/
class PackageTracking
{
function fdate($lang,$ymd_format) {
$ymdhis = explode(' ',$ymd_format);
$time = !$ymdhis[1] ? '' : ' '.$ymdhis[1];
if($lang == 'id') {
$month = [1 => 'Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember'];
$exp = explode('-', $ymdhis[0]);
return $exp[2].' '.$month[(int)$exp[1]].' '.$exp[0].$time;
} else if($lang == 'en') {
$month = [1 => 'January','February','March','April','May','June','July','August','September','October','November','December'];
$exp = explode('-', $ymdhis[0]);
return $month[(int)$exp[1]].' '.$exp[2].', '.$exp[0].$time;
} else {
return '';
}
}
function format($data,$url = 'no') {
$ban = ["\n","\r\n","&nbsp;","\u00a0"];
if($url == 'no') {
return preg_replace('/\s+/',' ',str_replace($ban ,' ',$data));
} else {
return preg_replace('/\s+/',' ',str_replace($ban ,' ',file_get_contents($url)));
}
}
public function JnT($bill) { // JO0034489689
if(!$bill) {
return ['result' => false,'data' => null,'message' => 'The billcode field is required.'];
} else {
$ch = $this->connect('http://www.jet.co.id/track',['billcode' => $bill],'original');
$main = explode('<div class="footer">',explode('<div class="result-box-group">',$ch)[1])[0];
$error = explode('</h4>',explode('<h4>',$main)[1])[0];
$banned = ['\u3010','\u3011','【','】',"<font color='#1F8DDC'>","</font>"];
if(!$error) {
$home = explode("<h4 class=\"panel-title\">\n",$main);
$basedate = explode("\n",explode("<span class=\"glyphicon glyphicon-menu-right\" aria-hidden=\"true\"></span>\n",explode('<div class="panel-body">',$main)[1])[1])[0];
$shipped = date('Y-m-d', strtotime(str_replace('/','-',explode(' - ',$basedate)[0])));
for($i = 1; $i <= count($home)-1; $i++) {
$date = date('Y-m-d', strtotime(str_replace('/','-',explode(' - ',explode("\n</h4>",explode("</span>\n",$home[$i])[1])[0])[0])));
$loop = explode('<div class="time col-md-2 col-xs-2" />',explode('<div class="panel-body">',$home[$i])[1]);
for($s = 1; $s <= count($loop)-1; $s++) {
//$output[$date][] = [
// 'time' => explode("</div>\n<div class=\"desc col-md-10 col-xs-10\" />",$loop[$s])[0],
// 'desc' => preg_replace('/\s+/',' ',str_replace($banned,' ',explode("</div",explode("</div>\n<div class=\"desc col-md-10 col-xs-10\" />",$loop[$s])[1])[0]))
//];
$output[] = [
'time' => $date.' '.explode("</div>\n<div class=\"desc col-md-10 col-xs-10\" />",$loop[$s])[0],
'desc' => preg_replace('/\s+/',' ',str_replace($banned,' ',explode("</div",explode("</div>\n<div class=\"desc col-md-10 col-xs-10\" />",$loop[$s])[1])[0]))
];
}
}
return ['result' => true,'data' => [
'courier' => 'J&T Express',
'waybill' => $bill,
'shipped' => explode(' - ',$basedate)[1].', '.$this->fdate('en', $shipped),
'tracking' => $output
],'message' => 'Successfully tracked package.'];
} else {
return ['result' => false,'data' => null,'message' => $error.'.'];
}
}
}
public function SiCepat($bill) { // 000215808615
if(!$bill) {
return ['result' => false,'data' => null,'message' => 'The billcode field is required.'];
} else {
$ch = $this->connect('http://sicepat.com/checkAwb/doSearch',['awb[]' => $bill],'original');
$main = explode('</tbody>',explode('<tbody>',preg_replace('/\s+/',' ',str_replace("\n",'',explode('</div></div>',explode('<div class="table-responsive">',$ch)[1])[0])))[1])[0];
$CMonth = ['JAN' => '01','FEB' => '02','MAR' => '03','APR' => '04','MEI' => '05','JUN' => '06','JUL' => '07','AGU' => '08','AGS' => '08','SEP' => '09','OKT' => '10','NOV' => '11','DES' => '12'];
if(!$main) {
return ['result' => false,'data' => null,'message' => 'No result found for '.$bill.'.'];
} else {
$resitem = explode('<td>',str_replace(' class="hidden-xs"','',explode('</tr>',explode('<tr class="res-item">',$main)[1])[0]));
$resdetail = explode('<table class="table ws-table">',explode('<div class="detail-title">TRACKING DETAILS</div>',$main)[1]);
$sdate = date('Y-m-d', strtotime(strtr(strtoupper(explode(' ',explode('</td>',explode('<td>',explode('</tr>',explode('<tr>',$resdetail[1])[2])[0])[1])[0])[0]),$CMonth)));
$rdate = date('Y-m-d', strtotime(strtr(strtoupper(explode('<div',explode('</td>',$resitem[6])[0])[0]),$CMonth)));
$tracking = explode('<tr>',$resdetail[3]);
for($i = 2; $i <= count($tracking)-1; $i++) {
$date = explode(' ',explode('</td>',explode("<td>",$tracking[$i])[1])[0]);
$track[] = [
'date' => date('Y-m-d', strtotime($date[0])).' '.$date[1],
'desc' => explode('</td>',explode("<td>",$tracking[$i])[2])[0]
];
}
return ['result' => true,'data' => [
'courier' => 'SiCepat',
'waybill' => $bill,
'service' => str_replace('<br>',' ',explode('</td>',$resitem[3])[0]),
'shipped' => [
'name' => explode('</td>',explode('<td>',explode('</tr>',explode('<tr>',$resdetail[2])[2])[0])[1])[0],
'addr' => explode('</td>',explode('<td>',explode('</tr>',explode('<tr>',$resdetail[2])[3])[0])[1])[0],
'date' => $sdate
],
'received' => [
'name' => explode('</td>',explode('<td>',explode('</tr>',explode('<tr>',$resdetail[2])[2])[0])[2])[0],
'recipient' => str_replace(']','',explode('[',explode('</td>',$resitem[7])[0])[1]),
'addr' => explode('</td>',explode('<td>',explode('</tr>',explode('<tr>',$resdetail[2])[3])[0])[2])[0],
'date' => $rdate
],
'tracking' => $track,
'status' => explode('</td>',$resitem[8])[0]
],'message' => 'Successfully tracked package.'];
}
}
}
public function TIKI($bill) { // 030083620135
if(!$bill) {
return ['result' => false,'data' => null,'message' => 'The billcode field is required.'];
} else {
$ch = $this->connect('https://www.tiki.id/id/tracking',['no_resi' => $bill],'original');
$main = explode('</div> </div></section>',preg_replace('/\s+/',' ',str_replace(["\r\n","&nbsp;"],'',explode('<div class="cnnoAll" style="margin-bottom: 5px">',$ch)[1])))[0];
$data1 = explode(' </div> </div>',explode("<div class=\"panel-cr cnnoHeader\" data-btnseq=\"cnno_$bill\"> ",$main)[1])[0];
$data2 = explode("<div class=\"cnnoContent\" id=\"cnno_$bill\" style=\"margin-bottom: 10px; display: block\">",$main)[1];
$detail = explode('<td>',str_replace(['</tr> <tr> ',' width="50%"','<br>'],'',explode(' </tr> </table>',explode('<table width="100%"> <tr> ',$data2)[1])[0]));
$CMonth = [
'January' => '01', 'Januari' => '01',
'February' => '02', 'Februari' => '02',
'March' => '03', 'Maret' => '03',
'April' => '04', 'April' => '04',
'May' => '05', 'Mei' => '05',
'June' => '06', 'Juni' => '06',
'July' => '07', 'Juli' => '07',
'August' => '08', 'Agustus' => '08',
'September' => '09', 'September' => '09',
'October' => '10', 'Oktober' => '10',
'November' => '11', 'November' => '11',
'December' => '12', 'Desember' => '12',
];
if(!explode('">',explode('</span>',$data1)[0])[1]) {
return ['result' => false,'data' => null,'message' => 'No result found for '.$bill.'.'];
} else {
$sdate = explode(' ',explode(' </td>',explode('</strong> ',$detail[3])[1])[0]);
$sdate = $sdate[2].'-'.strtr($sdate[1],$CMonth).'-'.$sdate[0];
$rdate = explode(' ',explode(' </td>',explode('</strong> ',$detail[4])[1])[0]);
$rdate = $rdate[2].'-'.strtr($rdate[1],$CMonth).'-'.$rdate[0];
$tracking = explode('<li class="timeline-inverted"> ',explode(' </ul>',explode('<ul class="timeline"> ',$data2)[1])[0]);
for($i = 1; $i <= count($tracking)-1; $i++) {
$title = str_replace('Di','-',explode('</h4>',explode('<h4 class="timeline-title">',$tracking[$i])[1])[0]);
$body = explode(' </p>',explode('<div class="timeline-body"> <p> ',$tracking[$i])[1])[0];
$track[] = [
'date' => substr(explode('</small>',explode('<i class="fa fa-clock-o"></i> ',$tracking[$i])[1])[0],0,16),
'desc' => stristr($body,'</p> <small ') ? str_replace('- ','',$title) : "$body $title",
];
}
return ['result' => true,'data' => [
'courier' => 'TIKI',
'waybill' => $bill,
'service' => explode('">',explode('</span>',$data1)[0])[1],
'shipped' => [
'name' => explode('</strong>',explode('</strong> <strong>',$detail[1])[1])[0],
'addr' => explode('</small>',explode('<small>',$detail[1])[1])[0],
'date' => $sdate
],
'received' => [
'name' => explode('</strong>',explode('</strong> <strong>',$detail[2])[1])[0],
'recipient' => str_replace([explode(' / ',explode(' <i ',explode('</i> ',$data1)[1])[0])[0],' RECEIVED BY:',' / '],'',explode(' <i ',explode('</i> ',$data1)[1])[0]),
'addr' => explode('</small>',explode('<small>',$detail[2])[1])[0],
'date' => $rdate
],
'tracking' => $track
],'message' => 'Successfully tracked package.'];
}
}
}
public function AnterAja($bill) { // 10000005008205
if(!$bill) {
return ['result' => false,'data' => null,'message' => 'The billcode field is required.'];
} else {
$ch = $this->connectHeader('https://anteraja.id/api/api/trackingv2/trackparcel/getTrackStatus',['Content-Type: application/json'],'[{"awb":"'.$bill.'"}]');
$ch = json_decode($ch[0], true);
$detail = $ch['detail'];
if(isset($detail['shipped_date'])) {
$tracking = $ch['history'];
for($i = 1; $i <= count($tracking)-1; $i++) {
$redate = date('Y-m-d', strtotime(explode(' ',$tracking[$i]['date_time'])[0]));
$track[] = [
'date' => substr(str_replace(explode(' ',$tracking[$i]['date_time'])[0],$redate,$tracking[$i]['date_time']),0,16),
'desc' => (isset($tracking[$i]['city_name'])) ? $tracking[$i]['city_name'].' - '.$tracking[$i]['status'] : $tracking[$i]['status'],
];
}
$resdate = date('Y-m-d', strtotime(explode(' ',$detail['shipped_date'])[0]));
$rerdate = date('Y-m-d', strtotime(explode(' ',$detail['delivered_date'])[0]));
return ['result' => true,'data' => [
'courier' => 'AnterAja',
'waybill' => $bill,
'service' => $detail['services_code'],
'shipped' => [
'name' => $detail['sender']['name'],
'addr' => $detail['sender']['addr'].' ['.$detail['sender']['zipcode'].']',
'date' => substr(str_replace(explode(' ',$detail['shipped_date'])[0],$resdate,$detail['shipped_date']),0,16)
],
'received' => [
'name' => $detail['receiver']['name'],
'recipient' => $detail['receiver']['name'],
'addr' => $detail['receiver']['addr'].' ['.$detail['receiver']['zipcode'].']',
'date' => substr(str_replace(explode(' ',$detail['delivered_date'])[0],$rerdate,$detail['delivered_date']),0,16)
],
'tracking' => $track
],'message' => 'Successfully tracked package.'];
} else {
return ['result' => false,'data' => null,'message' => 'No result found for '.$bill.'.'];
}
}
}
public function WAHANA($bill) { // ABY25550
if(!$bill) {
return ['result' => false,'data' => null,'message' => 'The billcode field is required.'];
} else {
$ch = $this->format('','https://www.wahana.com/lacak-kiriman?noresi='.$bill);
$pusdata = explode('</div> </div> </div> <div class="col-12 col-md-4 mt-25 ">',explode('lacakkirimanresult"> <div id="accordion" class="accordion">',$ch)[1])[0];
$main = explode('<div id="collapse0" class="card-body py-0 panel-collapse collapse bgmain-verylighgrey textmain-lightgrey show" data-parent="#accordion" >',$pusdata);
if($main[0] == ' ') {
return ['result' => false,'data' => null,'message' => 'No result found for '.$bill.'.'];
} else {
$rplc = ['font-size10 font-light','font-size22 font-bold','font-size12 font-light','font-size14 font-bold lh-16'];
$detl = explode('<div class="ShennData"> ',str_replace($rplc,'ShennData',$main[0]));
$trc = explode('<div class="row">',explode('<div class="col-12 col-md-9 pb-3 align-self-center">',$main[1])[1]);
for($i = 2; $i <= count($trc)-1; $i++) {
$track[] = [
'date' => substr(explode(' </div>',explode('<div class="font-size12 font-light"> ',$trc[$i])[1])[0], 0, 16),
'desc' => explode(' </div>',explode('<div class="font-size14 font-bold lh-16"> ',$trc[$i])[1])[0],
];
}
return ['result' => true,'data' => [
'courier' => 'WAHANA Express',
'waybill' => $bill,
'shipped' => [
'name' => explode(' </div>',$detl[5])[0],
'phone' => explode(' </div>',$detl[6])[0],
'addr' => explode(' </div>',$detl[11])[0],
'date' => $track[count($track) - 1]['date']
],
'received' => [
'name' => explode(' </div>',$detl[8])[0],
'recipient' => ucwords(strtolower(str_replace('Diterima oleh ','',explode(' </div>',$detl[14])[0]))),
'phone' => explode(' </div>',$detl[9])[0],
'addr' => explode(' </div>',$detl[13])[0],
'date' => substr(explode(' </div>',$detl[15])[0], 0, 16)
],
'tracking' => $track
],'message' => 'Successfully tracked package.'.$main];
}
}
}
public function Ninja($bill) { // NVIDBLAPK181037695932
if(!$bill) {
return ['result' => false,'data' => null,'message' => 'The billcode field is required.'];
} else {
$ch = json_decode(file_get_contents('https://api.ninjavan.co/id/dash/1.2/public/orders?tracking_id='.$bill), true);
if(isset($ch['error']['message']) || !$ch) {
if(isset($ch['error']['message'])) {
return ['result' => false,'data' => null,'message' => $ch['error']['message']];
} else {
return ['result' => false,'data' => null,'message' => 'No result found for '.$bill.'.'];
}
} else {
for($i = 0; $i <= count($ch['events'])-1; $i++) {
$events = $ch['events'][$i];
$typels = strtr($events['type'],[
'FROM_SHIPPER_TO_DP' => 'Parcel dropped off at Parcel Dropoff Counter / Box',
'DRIVER_PICKUP_SCAN' => 'Successfully picked up from sender',
'FROM_DP_TO_DRIVER' => 'Departed Parcel Dropoff Counter / Box',
'ROUTE_INBOUND_SCAN' => 'Parcel is being processed at Ninja Van warehouse',
'ADDED_TO_SHIPMENT' => 'Departed Ninja Van warehouse - In Transit',
'PARCEL_ROUTING_SCAN' => 'Parcel is being processed at Ninja Van warehouse',
'DRIVER_INBOUND_SCAN' => 'Parcel is being delivered',
'DELIVERY_FAILURE' => 'Delivery is unsuccessful - For further assistance, kindly contact support_id@ninjavan.co',
'RESCHEDULE' => 'Parcel delivery has been rescheduled',
'DELIVERY_SUCCESS' => 'Successfully delivered',
'HUB_INBOUND_SCAN' => 'Parcel is being processed at Ninja Van warehouse',
'RTS' => 'Parcel is being returned to sender',
'DELIVERY_FAILURE' => 'Delivery is unsuccessful'
]);
if(isset($events['data']['failure_reason']['en'])) {
$desc = $typels.' - '.$events['data']['failure_reason']['en'];
} else {
if($events['type'] == 'DRIVER_PICKUP_SCAN') {
$desc = $typels.' - '.$ch['shipper_short_name'];
} else {
$desc = (isset($events['data']['hub_name'])) ? $typels.' - '.ucwords(str_replace('_',' ',$events['data']['hub_name'])) : $typels;
}
}
$track[] = [
'date' => date('Y-m-d H:i', strtotime('+7 hours', strtotime(substr(str_replace(['T','Z'],' ',$events['time']),0,19)))),
'desc' => $desc
];
}
return ['result' => true,'data' => [
'courier' => 'Ninja Xpress',
'waybill' => $bill,
'service' => $ch['service_type'],
'shipped' => [
'name' => $ch['shipper_short_name'],
'date' => $track[0]['date']
],
'received' => [
'name' => $ch['pods'][0]['name'],
'sign' => $ch['pods'][0]['url'],
'date' => $track[count($track) - 1]['date']
],
'tracking' => $track,
'status' => $ch['status']
],'message' => 'Successfully tracked package.'];
}
}
}
public function Lion($bill) { // 11-19-5470676
if(!$bill) {
return ['result' => false,'data' => null,'message' => 'The billcode field is required.'];
} else {
$ch = $this->format('','http://lionparcel.com/track?q='.$bill);
$main = explode('</div> <div class="accordion-body has-background-white">',explode(' </section>',explode('<section class="accordions font-regular"> ',$ch)[1])[0]);
$CMonth = [
' Jan ' => '-01-'.substr(date('Y'),0,2), ' July ' => '-07-'.substr(date('Y'),0,2),
' Feb ' => '-02-'.substr(date('Y'),0,2), ' Aug ' => '-08-'.substr(date('Y'),0,2),
' Mar ' => '-03-'.substr(date('Y'),0,2), ' Sept ' => '-09-'.substr(date('Y'),0,2),
' Apr ' => '-04-'.substr(date('Y'),0,2), ' Oct ' => '-10-'.substr(date('Y'),0,2),
' May ' => '-05-'.substr(date('Y'),0,2), ' Nov ' => '-11-'.substr(date('Y'),0,2),
' June ' => '-06-'.substr(date('Y'),0,2), ' Dec ' => '-12-'.substr(date('Y'),0,2),
];
$status = explode('</small> ',explode(' <small>',$main[0])[1])[0];
$tracking = explode('<li> <article class="media is-vcentered"> ',explode(' </ul> </div> </div> </article>',explode('<div class="accordion-content"> <ul> ',$main[1])[1])[0]);
if(preg_match('/\<li\> \<img src="(.*?)" \/\> \<\/li\>/',$tracking[0])) {
return ['result' => false,'data' => null,'message' => $status.'.'];
} else {
for($i = 1; $i <= count($tracking)-1; $i++) {
$date = strtr(explode('</div>',explode('<div class="has-text-danger">',$tracking[$i])[1])[0],$CMonth);
$track[] = [
'date' => date('Y-m-d', strtotime(explode(' ',$date)[0])).' '.explode(' ',$date)[1],
'desc' => explode(' </div>',explode('<div class="column"> ',$tracking[$i])[1])[0],
'icon' => 'http://lionparcel.com/'.explode('"> ',explode(' <img src="',$tracking[$i])[1])[0]
];
}
return ['result' => true,'data' => [
'courier' => 'Lion Parcel',
'waybill' => $bill,
'stt_number' => explode('</strong></p>',explode('<p>STT Number: <strong>',$main[0])[1])[0],
'shipped' => [
'name' => str_replace(['BOOKED BY ',' .'],'',$track[0]['desc']),
'date' => $track[0]['date']
],
'received' => $track[count($track)-1]['date'],
'tracking' => $track,
'status' => $status
],'message' => 'Successfully tracked package.'];
}
}
}
public function LEX($bill,$lang = 'en') { // LXRP-9031707489 // en or id
if(!$bill) {
return ['result' => false,'data' => null,'message' => 'The billcode field is required.'];
} else {
$acclang_en = ['en','english','inggris','us']; $acclang_id = ['id','indonesia','indo','indonesian']; $acclang_my = ['my','malaysia','malaysian','melayu','ms'];
$acclang_th = ['th','thailand','thai']; $acclang_vn = ['vi','vietnam','viet','vn'];
if(in_array($lang,array_merge($acclang_en,$acclang_id))) {
$lang = (in_array($lang,$acclang_en)) ? 'en-US' : 'id-ID';
$stype = ($lang == 'en-US') ? 'Customer Order Creation' : 'Pembuatan Pesanan Pelanggan';
$dtype = ($lang == 'en-US') ? 'Delivery Type' : 'Jenis pengiriman';
$lname = ($lang == 'en-US') ? 'English' : 'Indonesian';
} else if(in_array($lang,array_merge($acclang_my,$acclang_th))) {
$lang = (in_array($lang,$acclang_my)) ? 'ms-MY' : 'th-TH';
$stype = ($lang == 'ms-MY') ? 'Pembuatan Pesanan Pelanggan' : 'คำสั่งซื้อของท่านได้รับการยืนยันเรียบร้อยแล้ว';
$dtype = ($lang == 'ms-MY') ? 'Jenis Penghantaran' : 'ประเภทการจัดส่งสินค้า';
$lname = ($lang == 'ms-MY') ? 'Malaysia' : 'Thailand';
} else if(in_array($lang,$acclang_vn)) {
$lang = 'vi-VN';
$stype = 'Ngày khách hàng tạo đơn hàng';
$dtype = 'Hình thức giao hàng';
$lname = 'Vietnam';
} else {
$lang = 'en-US';
$stype = 'Customer Order Creation';
$dtype = 'Delivery Type';
$lname = 'English';
}
$ch = $this->format('','https://tracker.lel.asia/tracker?lang='.$lang.'&trackingNumber='.$bill);
$main = explode('<div class="container"> ',explode(' </div> <script type="text/javascript" src="public/js/main.js"></script>',explode('<div class="wrapper"> ',$ch)[1])[0]);
$CMonth_en = [' Jan' => '-01',' July' => '-07',' Feb' => '-02',' Aug' => '-08',' Mar' => '-03',' Sept' => '-09',' Apr' => '-04',' Oct' => '-10',' May' => '-05',' Nov' => '-11',' June' => '-06',' Dec' => '-12'];
$CMonth_id = [' Jan' => '-01',' Jul' => '-07',' Des' => '-12',' Feb' => '-02',' Agu' => '-08',' Mar' => '-03',' Ags' => '-08',' Apr' => '-04',' Sep' => '-09',' Mei' => '-05',' Okt' => '-10',' Jun' => '-06',' Nov' => '-11',];
$CMonth_ms = [' Jan' => '-01',' Jul' => '-07',' Feb' => '-02',' Ogo' => '-08', ' Mac' => '-03',' Sep' => '-09',' Apr' => '-04',' Okt' => '-10',' Mei' => '-05',' Nov' => '-11',' Jun' => '-06',' Dis' => '-12'];
$CMonth_th = [' มกราคม' => '-01',' กุมภาพันธ์' => '-02',' มีนาคม' => '-03',' เมษายน' => '-04',' พฤษภาคม' => '-05',' มิถุนายน' => '-06',' กรกฎาคม' => '-07',' สิงหาคม' => '-08', ' กันยายน' => '-09',' ตุลาคม' => '-10',' พฤศจิกายน' => '-11',' ธันวาคม' => '-12'];
$CMonth_vn = [' Tháng 1' => '-01',' Tháng 7' => '-07',' Tháng 2' => '-02',' Tháng 8' => '-08', ' Tháng 3' => '-03',' Tháng 9' => '-09',' Tháng 4' => '-04',' Tháng 10' => '-10',' Tháng 5' => '-05',' Tháng 11' => '-11',' Tháng 6' => '-06',' Tháng 12' => '-12'];
$CMonth = array_merge(array_merge(array_merge($CMonth_en,$CMonth_id),array_merge($CMonth_ms,$CMonth_th)),$CMonth_vn);
$error = explode('</h4>',explode('<div class="error-message"><h4>',$ch)[1])[0];
if(!$main[0]) {
return ['result' => false,'data' => null,'message' => $error.'.'];
} else {
$shipped = date('Y-m-d',strtotime(str_replace(' ','-',strtr(explode(' </span>',explode($stype.': </span> <span class="details__value"> ',$main[2])[1])[0],$CMonth))));
$tracking = explode('<div class="row trace__date_row"> ',$main[3]);
for($i = 1; $i <= count($tracking)-1; $i++) {
$date = strtr(explode(' <div ',str_replace('</div> </div> ','',explode('<div class="trace__date _done"> ',$tracking[$i])[1]))[0],$CMonth).'-'.explode('-',$shipped)[0];
$date = date('Y-m-d',strtotime($date));
$table = explode('<tr class="trace__item"> ',$tracking[$i]);
for($t = 1; $t <= count($table)-1; $t++) {
$desc = explode('">',explode('</span> </td> </tr> ',$table[$t])[0]);
$track[] = [
'date' => $date.' '.explode('</span>',explode('<span class=".trace__time">',$table[$t])[1])[0],
'desc' => $desc[count($desc)-1]
];
}
}
return ['result' => true,'data' => [
'courier' => 'Lazada eLogistics Express',
'waybill' => $bill,
'service' => ucwords(explode('</span>',explode($dtype.': </span> <span class="details__value">',$main[2])[1])[0]),
'shipped' => $shipped,
'received' => substr($track[0]['date'],0,10),
'tracking' => $track,
'status' => explode(' <span ',explode(' _current\'> ',$main[1])[1])[0],
'language' => $lname
],'message' => 'Successfully tracked package.'];
}
}
}
public function JNE($bill) { // 542630035865718
if(!$bill) {
return ['result' => false,'data' => null,'message' => 'The billcode field is required.'];
} else {
$header = ['Content-Type: application/x-www-form-urlencoded'];
$postdata = http_build_query(['username' => 'JNEONE','api_key' => '504fbae0d815bf3e73a7416be328fcf2']);
$this->useProxy = 'true';
$ch = $this->connectHeader('http://apiv2.jne.co.id:10101/tracing/api/list/myjne/cnote/'.$bill,$header,$postdata);
if(!isset($ch['cnote']) && !isset($ch['detail']) && !isset($ch['history'])) {
return ['result' => false,'data' => null,'message' => $ch['error']];
} else {
$tracking = $ch['history'];
for($i = 1; $i <= count($tracking)-1; $i++) {
$track[] = [
'date' => date('Y-m-d', strtotime(explode(' ', $tracking[$i]['date'])[0])).' '.explode(' ', $tracking[$i]['date'])[1],
'desc' => $tracking[$i]['desc'],
];
}
$cnote = $ch['cnote'];
$detail = $ch['detail'][0];
return ['result' => true,'data' => [
'courier' => 'JNE Express',
'waybill' => $bill,
'service' => $cnote['cnote_services_code'],
'shipped' => [
'name' => $detail['cnote_shipper_name'],
'addr' => $detail['cnote_shipper_addr1'].$detail['cnote_shipper_addr2'].$detail['cnote_shipper_addr3'],
'city' => $detail['cnote_shipper_city'],
'date' => substr(str_replace(['T','Z','.'],' ',$cnote['cnote_date']),0,16)
],
'received' => [
'name' => $detail['cnote_receiver_name'],
'recipient' => $cnote['cnote_pod_receiver'],
'addr' => $detail['cnote_receiver_addr1'].$detail['cnote_receiver_addr2'].$detail['cnote_receiver_addr3'],
'city' => $detail['cnote_receiver_city'],
'date' => $track[count($track)-1]['date']
],
'tracking' => $track,
'status' => $cnote['pod_status']
],'message' => 'Successfully tracked package.'];
}
}
}
# END POINT CONNECTION
private $useProxy = 'false';
private function connect($url,$data,$reqout = 'decode') {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
if($this->useProxy == 'true') curl_setopt($ch, CURLOPT_PROXY, 'proxy.rapidplex.com:3128');
if($this->useProxy == 'true') curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:domainesia');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$chresult = curl_exec($ch);
curl_close($ch);
if(!$chresult) $chresult = $this->connectHeader($url,['content-type: multipart/form-data;'],$data,'original');
return ($reqout == 'decode') ? json_decode($chresult, true) : $chresult;
}
private function connectHeader($end_point,$header,$postdata,$reqout = 'decode') {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $end_point);
if($this->useProxy == 'true') curl_setopt($ch, CURLOPT_PROXY, 'proxy.rapidplex.com:3128');
if($this->useProxy == 'true') curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:domainesia');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
$chresult = curl_exec($ch);
return ($reqout == 'decode') ? json_decode($chresult, true) : $chresult;
}
}
header('Content-Type: application/json');
$PT = new PackageTracking;
// print json_encode($PT->JnT('JO0034489689'), JSON_PRETTY_PRINT); // Tracking J&T Express
// print json_encode($PT->SiCepat('000215808615'), JSON_PRETTY_PRINT); // Tracking SiCepat
// print json_encode($PT->TIKI('030083620135'), JSON_PRETTY_PRINT); // Tracking TIKI
// print json_encode($PT->AnterAja('10000005008205'), JSON_PRETTY_PRINT); // Tracking AnterAja
// print json_encode($PT->WAHANA('ABY25550'), JSON_PRETTY_PRINT); // Tracking WAHANA Express
// print json_encode($PT->Ninja('NVIDBLAPK181037695932'), JSON_PRETTY_PRINT); // Tracking Ninja Xpress
// print json_encode($PT->Lion('11-19-5470676'), JSON_PRETTY_PRINT); // Tracking Lion Parcel
// print json_encode($PT->LEX('LXRP-9031707489','en'), JSON_PRETTY_PRINT); // Tracking Lazada eLogistics Express
// print json_encode($PT->JNE('542630035865718'), JSON_PRETTY_PRINT); // Tracking JNE Express
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment