| Server IP : 172.67.168.138 / Your IP : 216.73.216.227 [ Web Server : Apache System : Linux frog 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64 User : web13 ( 5017) PHP Version : 8.3.31 Disable Function : NONE Domains : 41 Domains MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/clients/client12/web13/web/ahelos/app/Class/ |
Upload File : |
<?php
namespace App\Class;
use App\Traits\CompanyTrait;
class Speedy{
use CompanyTrait;
private $username;
private $password;
private $country;
private $url;
private $data;
private $clientId;
public function __construct($country){
$this->country = $country;
// $this->username = '998152';
// $this->password = '3696858864';
$this->clientId = '88888888888000';
$this->username = '1995496';
$this->password = '2638668232';
$this->url = 'https://api.speedy.bg/v1/';
}
private function apiRequest($apiURL, $jsonData){
$curl = curl_init($apiURL);
$jsonDataEncoded = json_encode($jsonData);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($curl, CURLOPT_POSTFIELDS, $jsonDataEncoded);
#-> Get the response
$jsonResponse = curl_exec($curl);
if ( $jsonResponse === FALSE)
{
exit("cURL Error: ".curl_error($curl));
}
return($jsonResponse);
}
private function countryId(){
return match($this->country){
'bg' => 100,
'gr' => 300,
'ro' => 642,
'sl' => 705,
'sk' => 703,
'cz' => 203,
'hr' => 191,
'hu' => 348,
'cy' => 196,
};
}
public function getUsername(){
return $this->username;
}
public function cities($name){
$jsonData = array(
'userName' => $this->username,
'password' => $this->password,
'language' => 'bg',
'countryId' => $this->countryId(),
'name' => $name,
);
$jsonResponse = $this->apiRequest($this->url.'location/site/', $jsonData);
$jsonResponse = json_decode($jsonResponse, true);
$response = array();
foreach ($jsonResponse as $key => $array_sites) {
foreach ($array_sites as $key => $site) {
$zip = (isset($site['postCode'])) ? $site['postCode'] : '' ;
$response[] = array(
"label" => trim($site['type'] . ' ' . $site['name'] . ' [' . $site['region'] . ']'),
"city" => trim($site['name']),
"city_id" => $site['id'],
"zip" => $zip,
);
}
}
return $response;
}
public function offices($city_id){
$jsonData = array(
'userName' => $this->username,
'password' => $this->password,
'language' => 'bg',
'siteId' => $city_id,
);
$jsonResponse = $this->apiRequest($this->url.'location/office/', $jsonData);
$jsonResponse = json_decode($jsonResponse, true);
$response = array();
foreach ($jsonResponse as $key => $array_offices) {
foreach ($array_offices as $key => $office) {
$response[] = array(
"label" => $office['address']['fullAddressString'],
"id" => $office['id'],
"type" => $office['type']
);
}
}
return $response;
}
public function addresses($city_id, $name){
$jsonData = array(
'userName' => $this->username,
'password' => $this->password,
'language' => 'bg',
'siteId' => $city_id,
'name' => $name
);
$jsonResponse = $this->apiRequest($this->url.'location/street/', $jsonData);
$jsonResponse = json_decode($jsonResponse, true);
$response = array();
foreach ($jsonResponse as $key => $array_streets) {
foreach ($array_streets as $key => $street) {
$response[] = array(
"label" => trim($street['type'] . ' ' . $street['name']),
"name" => trim($street['name']),
"id" => $street['id'],
"type" => $street['type'],
);
}
}
return $response;
}
public function create($data){
$saturdayDelivery = ($data['saturdayDelivery'] == 1) ? true : false;
$jsonData = array(
'userName' => $this->username,
'password' => $this->password,
'language' => $data['language'],
'service' => array(
'autoAdjustPickupDate' => true,
'serviceId' => $data['serviceId'],
'saturdayDelivery' => $data['saturdayDelivery'],
'additionalServices' => array(
'cod' => array(
'amount' => $data['amount'],
'processingType' => $data['processingType'],
),
),
),
'sender' => array(
'phone1' => array('number' => $data['senderPhone']),
'contactName' => $data['companySender'],
),
'content' => array(
'parcelsCount' => $data['parcelsCount'],
'totalWeight' => $data['totalWeight'],
'contents' => $data['contents'],
'package' => $data['package']
),
'payment' => array(
'courierServicePayer' => $data['courierServicePayer'] // [ "SENDER", "RECIPIENT", "THIRD_PARTY" ]
),
'recipient' => array(
'phone1' => array(
'number' => $data['clientPhone']
),
'privatePerson' => TRUE,
'clientName' => $data['clientName'],
// 'contactName' => 'TEST',
'email' => $data['email'],
),
'shipmentNote' => $data['shipmentNote'],
'ref1' => $data['ref1']
);
if ($data['fragile'] && $data['insuranceAmount'] > 0) {
$jsonData['service']['amount'] = $data['insuranceAmount'];
$jsonData['service']['fragile'] = $data['fragile'];
}
if ($this->countryId() == 100) {
if ($data['officeType'] != "APT") {
if ($data['obpdOption'] == 'TEST') {
$jsonData['service']['additionalServices']['obpd'] = array(
'option' => $data['obpdOption'],
'returnShipmentServiceId' => $data['serviceId'],
'returnShipmentPayer' => 'SENDER'
);
}else{
$jsonData['service']['additionalServices']['obpd'] = array(
'option' => $data['obpdOption'],
'returnShipmentServiceId' => $data['serviceId'],
'returnShipmentPayer' => 'RECIPIENT'
);
}
}
}
if ($data['pickupOfficeId'] != '') {
$jsonData['recipient']['pickupOfficeId'] = $data['pickupOfficeId'];
}else{
if ($this->countryId() == 100) {
$jsonData['recipient']['address'] = array(
'siteId' => $data['siteId'],
'streetType' => $data['streetType'],
'streetName' => $data['streetName'],
'streetNo' => $data['streetNo'],
'blockNo' => $data['blockNo'],
'entranceNo' => $data['entranceNo'],
'floorNo' => $data['floorNo'],
'apartmentNo' => $data['apartmentNo'],
'addressNote' => $data['addressNote'],
);
}else if($this->countryId() == 642){
$jsonData['recipient']['address'] = array(
'countryId' => $this->countryId(),
'siteName' => $data['siteName'],
'postCode' => $data['postCode'],
'addressNote' => $data['streetName'] . " " . $data['streetNo'] . " " . $data['blockNo'] . " " . $data['entranceNo'] . " " . $data['floorNo'] . " " . $data['apartmentNo'] . " " . $data['addressNote'],
);
}else{
$jsonData['recipient']['address'] = array(
'countryId' => $this->countryId(),
'siteName' => $data['siteName'],
'postCode' => $data['postCode'],
'addressLine1' => $data['streetName'] . " " . $data['streetNo'] . " " . $data['blockNo'] . " " . $data['entranceNo'] . " " . $data['floorNo'] . " " . $data['apartmentNo'],
'addressNote' => $data['addressNote'],
);
}
}
$jsonResponse = $this->apiRequest($this->url.'shipment', $jsonData);
$jsonResponse = json_decode($jsonResponse, true);
return $jsonResponse;
}
public function createBack($data){
$saturdayDelivery = false;
$jsonData = array(
'userName' => $this->username,
'password' => $this->password,
'language' => $data['language'],
'service' => array(
'autoAdjustPickupDate' => true,
'serviceId' => $data['serviceId'],
'additionalServices' => array(
'cod' => array(
'amount' => $data['cod']['amount'],
),
),
),
'recipient' => array(
'phone1' => array('number' => $this->companyInfo($data['language'])['phone']),
'clientId' => $this->clientId,
'email' => $this->companyInfo($data['language'])['email'],
),
'content' => array(
'parcelsCount' => 1,
'totalWeight' => 1,
'contents' => 'СТОКИ',
'package' => 'BOX'
),
'payment' => array(
'courierServicePayer' => 'RECIPIENT' // [ "SENDER", "RECIPIENT", "THIRD_PARTY" ]
),
'sender' => array(
'phone1' => array(
'number' => $data['senderPhone']
),
'privatePerson' => TRUE,
'clientName' => $data['clientName'],
'email' => $data['clientEmail'],
),
'shipmentNote' => 'СТОКИ',
'ref1' => $data['ref1']
);
if ($this->countryId() == 100) {
$jsonData['sender']['address'] = array(
'siteId' => $data['siteId'],
'streetType' => $data['streetType'],
'streetName' => $data['streetName'],
'streetNo' => $data['streetNo'],
'blockNo' => $data['blockNo'],
'entranceNo' => $data['entranceNo'],
'floorNo' => $data['floorNo'],
'apartmentNo' => $data['apartmentNo'],
'addressNote' => $data['addressNote'],
);
}else if($this->countryId() == 642){
$jsonData['sender']['address'] = array(
'countryId' => $this->countryId(),
'siteName' => $data['siteName'],
'postCode' => $data['postCode'],
'addressNote' => $data['streetName'] . " " . $data['streetNo'] . " " . $data['blockNo'] . " " . $data['entranceNo'] . " " . $data['floorNo'] . " " . $data['apartmentNo'] . " " . $data['addressNote'],
);
}else{
$jsonData['sender']['address'] = array(
'countryId' => $this->countryId(),
'siteName' => $data['siteName'],
'postCode' => $data['postCode'],
'addressLine1' => $data['streetName'] . " " . $data['streetNo'] . " " . $data['blockNo'] . " " . $data['entranceNo'] . " " . $data['floorNo'] . " " . $data['apartmentNo'],
'addressNote' => $data['addressNote'],
);
}
$jsonResponse = $this->apiRequest($this->url.'shipment', $jsonData);
$jsonResponse = json_decode($jsonResponse, true);
return $jsonResponse;
}
public function cancel($shipment_id){
$jsonData = array(
'userName' => $this->username,
'password' => $this->password,
'shipmentId' => $shipment_id,
'comment' => 'Отказана товарителница!'
);
$jsonResponse = $this->apiRequest($this->url.'shipment/cancel', $jsonData);
$jsonResponse = json_decode($jsonResponse, true);
return $jsonResponse;
}
public function info($shipment_id){
$jsonData = array(
'userName' => $this->username,
'password' => $this->password,
'language' => 'bg',
'shipmentIds' => array($shipment_id)
);
$jsonResponse = $this->apiRequest($this->url.'shipment/info', $jsonData);
$jsonResponse = json_decode($jsonResponse, true);
return $jsonResponse;
}
public function print($shipment_id){
foreach ($this->info($shipment_id)['shipments'][0]['content']['parcels'] as $key => $p) {
$shipsArr[]['parcel']['id'] = $p['id'];
}
$parcelsArray = $shipsArr;
$jsonData = array(
'userName' => $this->username,
'password' => $this->password,
'paperSize' => 'A6', // A4, A6, A4_4xA6
'parcels' => $parcelsArray
);
$jsonResponse = $this->apiRequest($this->url.'print/', $jsonData);
return $jsonResponse;
}
public function labelInfo($shipment_id){
foreach ($this->info($shipment_id)['shipments'][0]['content']['parcels'] as $key => $p) {
$shipsArr[]['id'] = $p['id'];
}
$parcelsArray = $shipsArr;
$jsonData = array(
'userName' => $this->username,
'password' => $this->password,
'parcels' => $parcelsArray
);
$jsonResponse = $this->apiRequest($this->url.'print/labelInfo', $jsonData);
$jsonResponse = json_decode($jsonResponse, true);
return $jsonResponse;
}
public function enroll($tovaritelnica){
$jsonData = array(
'userName' => $this->username,
'password' => $this->password,
'autoAdjustPickupDate' => true,
'explicitShipmentIdList' => [$tovaritelnica],
"visitEndTime" => '17:00'
);
$jsonResponse = $this->apiRequest($this->url.'pickup', $jsonData);
$jsonResponse = json_decode($jsonResponse, true);
return $jsonResponse;
}
public function track($tovaritelnica){
$parcelsArray = array(
array('id' => $tovaritelnica)
);
$jsonData = array(
'userName' => $this->username,
'password' => $this->password,
'language' => 'bg',
'parcels' => $parcelsArray
);
$jsonResponse = $this->apiRequest($this->url.'track', $jsonData);
$jsonResponse = json_decode($jsonResponse, true);
return $jsonResponse;
}
}
?>