1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
<?php
class ParcelShopFinder
{
const CIGLOGIN = 'gambio_1:7692819c896fe2ea5fbd861cead0a08c503b69e3d56b77380a42b02aa9';
const BASE_URL = 'https://cig.dhl.de/services/sandbox/rest/parcelshopfinderrest/';
protected $logger;
public function __construct()
{
$this->logger = MainFactory::create('ParcelShopFinderLogger');
}
public function getParcelLocationByAddress($address)
{
$this->logger->notice(sprintf('Requesting locations around address "%s"', $address));
$actionUrl = 'parcellocationByAddress/PARCEL_PICKUP/';
$service = MainFactory::create('RestService');
$url = self::BASE_URL . $actionUrl . rawurlencode($address);
$request = MainFactory::create('RestRequest', 'GET', $url, null, ['Expect:']);
$request->setUserpass(self::CIGLOGIN);
$result = $service->performRequest($request);
$json = json_decode($result->getResponseBody());
if(empty($json->psfParcellocationList))
{
$this->logger->noticeDebug(sprintf("Empty response:\n%s", (string)$result));
return [];
}
else
{
$this->addOpeningHours($json->psfParcellocationList);
return $json->psfParcellocationList;
}
}
protected function addOpeningHours($psflist)
{
foreach($psflist as $psfentry)
{
$openingHours = [];
if(property_exists($psfentry, 'psfOtherinfos'))
{
$cols = 0;
$rows = 0;
foreach($psfentry->psfOtherinfos as $otherInfo)
{
if($otherInfo->type === 'tt_openinghours_cols')
{
$cols = (int)$otherInfo->content;
}
if($otherInfo->type === 'tt_openinghours_rows')
{
$rows = (int)$otherInfo->content;
}
if(preg_match('/^tt_openinghour_(\d)(\d)$/', $otherInfo->type, $hoursMatches) === 1)
{
$rowNumber = (int)$hoursMatches[1];
$colNumber = (int)$hoursMatches[2];
if(!isset($openingHours[$rowNumber]))
{
$openingHours[$rowNumber] = [];
}
$openingHours[$rowNumber][$colNumber] = $otherInfo->content;
}
if($otherInfo->type === 'tt_openinghour_today')
{
$psfentry->openingHoursToday = $otherInfo->content;
}
}
}
$psfentry->openingHours = $openingHours;
}
return $psflist;
}
}