Moje DPD API pro automatizovaný import zásilek – PHP skript

DPD Logo

Vytvořeno na základě: Příručka programátora - Webové služby Moje DPD / Geo API

DPD používá v podstatě 2 knihovny:

  1. GeoApi (import balíků atp.) a DpdStatus (stav zásilky) - je nutno požádat o přístupové údaje! Tato knihovna je novější a o něco přehlednější k použití
  2. MojeDPD - tato knihovna je starší, ale nabízí všechny funkce a přístupové údaje jsou shodné s webovými přístupy, takže ji lze rovnou použít

Knihovny umožňují:

  • Vytváření zásilek
  • Vytvoření přepravních štítků
  • Vytváření svozu
  • Zjištění ceny zásilky
  • Zjištění stavu balíku
  • ... a další dle oficiální specifikace
MojeDPD a GeoApi knihovny (PHP knihovny)
Objednávka
(pro vlastní použití; zákaz dále šířit nebo prodávat; aktualizace dle dohody)

Fakturu zasílám obratem a skript po uhrazení, GDPR a obchodní podmínky zde.

Děkuji za podporu a jistě budete spokojeni.

Bezpečný nákup

Recenze je možno psát na firmy.cz a v případě dotazů mě kontaktujte.

Příklad použití:

Kompletní příklady budou dodány s knihovnami.

<?php
/**
* DPD Geo API
*/
require 'class_DpdGeoApi.php';
require
'class_DpdStatus.php'// pro zjištění stavu balíku

$dpd = new DpdGeoApi("uzivatel", "heslo"); // přístupy vyžádejte u DPD

// Použití:
// $dpd->jakakoliv_funkce_podle_dokumentace


//------------------------------------NOVÁ ZÁSILKA
// typ NewShipmentVO
$shipment = array(
   
'_ShipmentDetailVO' => array(
       
'ID_Customer' => 1, // ID_Customer int M - ID zákazníka
       
'ID_Customer_Address' => 0,    // ID_Customer_Address int M - ID svozové adresy
       
       
'REF1' => 'XXXXX', // REF1 string M 35 Reference zásilky --- Povinné
       // REF2 string O 35 Reference zásilky
       // REF3 string O 35 Reference zásilky
       // REF4 string O 35 Reference zásilky
       
       // odesílatel - jen pokud jde o sběrné zásilky
       /*
       'Sender' => $dpd->formatSender(
           $fullname, $street, $zip, $city, $country, $contact_person, $phone, $email
       ),*/
       
       // příjemce
       
'Receiver' => $dpd->formatReceiver(
           $fullname, $street, $zip, $city, $country, $contact_person, $phone, $email
       ),
       
       
// počet kusů v zásilce
       
'ParcelCount' => 1,
       
       
// Seznam informací o jednotlivých kusech zásilky
       
'Parcel_References_and_insurace' => array(
           
// PARCELNUMBER string O 14 Číslo zásilky z vlastní číselné řady
           // PARCELNUMBERBACK string O 14 Číslo zásilky z vlastní číselné řady pro výměnnou zásilku
           // REF1 string M 35 Reference zásilky <--- POVINNÉ
           
'REF1' => 'XXXXX', // reference zásilky
           // REF2 string O 35 Reference zásilky
           // REF3 string O 35 Reference zásilky
           // REF4 string O 35 Reference zásilky
           // HINSAMOUNT string O 10 Částka doplňkového pojištění
           // HISCUR string C 3 Měna doplňkového pojištění
       
),
       
       
'Service_Combination' =>  array(
           
// Notification bool O 1 Private zásilky s notifikacemi a 1HP
           // AirExpress bool O 1 Letecká přeprava
           // DPDPack bool O 1 Zásilka s obálkou od DPD
           // DPDBox bool O 1 Zásilka s krabicí od DPD
           // DPD10 bool O 1 Doručení do 10:00
           // DPD12 bool O 1 Doručení do 12:00
           // DPD18 bool O 1 Garantované doručení druhý den do 18:00
           // DPDGuarantee bool O 1 Garantované doručení druhý den do zahraničí
           // Swap bool O 1 Výměnná zásilka
           // DPDEvening bool O 1 Doručení ve večerních hodinách
           // DPDPneu bool O 1 Produkt pro zasílání pneumatik
           // ID_PS int O - ID výdejního místo pro doručení
       
),

       
'Additional_Services' => array(
           
// COD string O 10 Částka dobírky
           // CURRENCY string C 3 Měna dobírky
           // PAYMENT string C 1 Typ platby, 0 = hotově ; 1 = kartou i hotově
           // PURPOSE string O 14 Variabilní symbol
           // BANKCODE string C 25 Kód banky
           // BANKNAME string C 27 Jméno banku
           // ACCOUNTNUMBER string C 25 Číslo účtu
           // ACCOUNTNAME string C 30 Jméno účtu pro odplacení dobírky
           // IBAN string O 50 IBAN účtu
           // BIC string C 50 BIC banky
           // PERSDELIVERY string O 1 1 = doručeni na odděleni bez osobni identifikace
           // 2 = osobni doručeni s osobni identifikaci typu IDCheck
           // 3 = osobni doručeni bez osobni identifikace
       
),
       
   )
);

// vytvoříme novou zásilku
// $res = $dpd->NewShipment($shipment);

// vrátí číslo zásilky atp. ke sledování potom

// print_R($res);



//--------------- ŠTÍTKY
/*
$res = $dpd->GetLabel(array(
   'type' => 'PDF',
   'parcelno' => array(
       // seznam zásilek k tisku
   )
));
print_r($res);
*/


//--------------- SVOZ
$res = $dpd->NewPickup(array(
   
'orderList' => array(
       
'parcelno' => array(
           
// seznam zásilek ke svozu
       
),
       
'date' => '20180202', // string M 8 Datum svozu ve formátu „yyyyMMdd“
       // note string O 200 Poznámka ke svozu - nepovinné
   
)
));
print_r($res);



//--------------- ZJIŠTĚNÍ STAVU ZÁSILKY SE PROVÁDÍ PŘES DRUHOU KNIHOVNU
/**
* DPD Status
*/
$dstatus = new DpdStatus("uzivatel", "heslo");

$res = $dstatus->GetParcelStatus(array(
   
'parcels' => array(
       
// seznam zásilek pro zjištění stavu
   
)
));

print_r($res); 
// vrátí stav, zda bylo převzato atp.

<?php
/**
* MojeDPD API
*/
require 'class_MojeDpd.php';

// přístupy stejné jako webové přístupy do aplikace Moje DPD
$dpd = new MojeDpd('XXXX_UZIVATEL', 'XXX_HESLO');


# CELKOVÝ SEZNAM FUNKCÍ:
# Calculate Price Provádí výpočet cen v závislosti na nastaveném ceníku
# Create Shipment Vytváří zásilku
# Print Label for Shipment Vytváří přepravní štítek zásilky
# Get Shipment Status - Vrací stav zásilky v závislosti na provedených skenech – událostech v přepravním cyklu zásilky
# Search Shipment Vrací seznam zásilek dle vstupních parametrů (datum, zákazník, příjemce…)
# Create Pickup Order Vytváří objednávku svozu.
# Pickup Order Status Vrací stav objednávky svozu
# Delete Pickup Order - Maže objednávku svozu
# Search Missing Pickup Order - Vrací množství zásilek, pro které není pořízena objednávka svozu
# Search Pickup Order - Vrací seznam objednávek svozu dle vstupních parametrů
# Close Manifest Uzavírá soupisku (manifest). Volitelně se štítky
# Delete Shipment - Maže zásilku
# Parcel status - Vrací stav balíku v závislosti na provedených skenech – událostech v přepravním cyklu zásilky (rozvoz, doručeno atd.)
# Get Shipment - Vrací data o zásilce
# Reprint Label for parcel - Opětovný tisk přepravního štítku balíku
# Reprint Manifest - Opětovný tisk seznamu zásilek (manifestu). Volitelně se štítky
# Update Shipment - Aktualizace parametrů zásilky



/**
* Vypočítá cenu balíku - calculatePrice()
*/
$args = [];
$args[
'shipmentList'] = array(
   
'shipmentReferenceNumber' => '111',
   
'payerId' => 1,
   
'senderAddressId' => 23124236888,
   
'receiverName' => 'Mr Kaido',
   
'receiverFirmName' => 'Company C',
   
'receiverCountryCode' => 'EE',
   
'receiverZipCode' => '80042',
   
'receiverCity' => 'Pärnu',
   
'receiverStreet' => 'Riia mnt',
   
'receiverHouseNo' => '231a',
   
'receiverPhoneNo' => '',
   
'mainServiceCode' => 1,
   
'additionalServices' => array(
       
'saturdayDelivery' => true
   ),
   
'parcels' => array(
       
'parcelReferenceNumber' => '111',
       
'weight' => 10
   )
);
try {
   $res = $dpd->calculatePrice($args); print_r($res); exit;
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}


/**
* 1. KROK - Vytvoří zásilku - createShipment()
*/
$args = [];
$args[
'priceOption'] = 'WithoutPrice';
$args[
'shipmentList'] = array(
   
'shipmentReferenceNumber' => '111',
   
'payerId' => 1,
   
'senderAddressId' => 1,
   
'receiverName' => 'Mr Kaido',
   
'receiverFirmName' => 'Company C',
   
'receiverCountryCode' => 'EE',
   
'receiverZipCode' => '80042',
   
'receiverCity' => 'Pärnu',
   
'receiverStreet' => 'Riia mnt',
   
'receiverHouseNo' => '231a',
   
'receiverPhoneNo' => '',
   
'mainServiceCode' => 1,
   
'additionalServices' => array(
       
'saturdayDelivery' => true
   ),
   
'parcels' => array(
       
'parcelReferenceNumber' => '111',
       
'weight' => 10
   ),
);

try {
   
// VYTVOŘENÍ:
   
$res = $dpd->createShipment($args); print_r($res); exit;
   
   
// ÚPRAVA JIŽ VLOŽENÉ ZÁSILKY SE DĚLÁ STEJNĚ:
   // $res = $dpd->updateShipment($args); print_r($res); exit;
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}


/**
* 2. KROK - Vytištení štítků zásilky - getShipmentLabel()
*/
try {
   $res = $dpd->getShipmentLabel(array(
'WX1516566'), 'PDF'); print_r($res); exit;
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}


/**
* 3. KROK - Uzavře vložený seznam zásilek => vytiskne svozový protokol
*
* Třetí parametr umožňuje vytisknout jenom protokolu (1) NEBO
* taky protokol a všechny nevytištěné štítky (2) NEBO
* protokol a všechny štítky (3)
*/
try {
   $res = $dpd->closeManifest(
'MR167', array('WX1516566', 'WX2222_ATP'), 3, 'PDF'); print_r($res); exit;
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}



/**
* Smazání zásilky/zásilek
*/
try {
   $res = $dpd->deleteShipment(array(
'WX15616', 'WXX1111')); print_r($res); exit;
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}



/**
* Stav zásilky - getShipmentStatus()
* Vrací stav zásilky v závislosti na provedených skenech - událostech v přepravním cyklu zásilky (doručeno, svezeno atp.)
*/
try {
   $res = $dpd->getShipmentStatus(
'ID_DAVKY_PARCEL_REFERENCE_NUMBER'); print_r($res); exit;
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}



/**
* Vyhledání zásilky - searchShipment()
*/
try {
   $startDate =
'2020-01-01';
   $endDate = true
// do dnešního dne
   
   
$res = $dpd->searchShipment($startDate, $endDate, array(
       
# DALŠÍ VOLITELNÉ ARGUMENTY:
       
'receiverName' => 'jméno příjemce',
       
// 'receiverCountryCode' => 'CZ',
       // 'receiverZipCode' => '73532',
       // 'payerId' => '',
       // 'senderAddressId' => '',
   
));
   print_r($res); 
// vrací [shipmentInfoList] pokud něco najde
   
exit;
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}




/**
* Stav balíku - getParcelStatus() - rozvoz, doručeno, atp.
*/
try {
   $res = $dpd->getParcelStatus(
'ID_BALIKU'); print_r($res); exit;
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}


/**
* Zjištění stavu zásilky (nebo-li dávky) - getShipment()
*/
try {
   $res = $dpd->getShipment(
'ID_DAVKY_PARCEL'); print_r($res); exit;
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}




/**
* Vytvoření objednávky svozu - createPickupOrder()
*/
try {
   $res = $dpd->createPickupOrder(array(
       
'pickupOrderList' => array(
           
// 'pickupOrderId' => '', // long (nepovinné) DPD SYSTEM pickup order id. Leave empty for creation
           
'payerId' => 1, // long M DPD SYSTEM payer customer id
           
'senderAddressId' => 1, // long (nepovinné) DPD SYSTEM address id
           
           #'senderAddress' => array(
           #    //  AddressVO (nepovinné) Free text sender address.
           #    'countryCode' => 'CZ', // String M Country code alpha (LV, EE,…)
           #    'city' => 'Ostrava', // String M City name
           #    'street' => 'Teslova 2', // String M Street name
           #    'zipCode' => '71000', // String (nepovinné) Zip code
           #    'name' => 'Tester' // String M Sender name
           #),
           
           
'date' => date("Ymd", strtotime('2020-07-21')), // String M Pickup date (YYYYMMDD)
           
'fromTime' => '120000', // String M Pickup time start (HHMMSS)
           
'toTime' => '220000', // String M Pickup time end (HHMMSS)
           
'contactName' => 'Tester', // String M Sender contact name
           
'contactPhone' => '+420732848164', // String M Sender contact phone number
           
'contactEmail' => 'mzvarik@gmail.com', // String M Sender contact email address
           // 'specialInstruction' => '', // String (nepovinné) Message to driver
           
'referenceNumber' => '555', // String M Integrator pickup order id
           
'pieces' => array(
               
'serviceCode' => 1, // long M DPD SYSTEM product id
               
'quantity' => 1, // long M Piece count
               
'weight' => 1.5, // double M Weight - hmotnost
               
'destinationCountryCode' => 'CZ', // String M Destination country code - cílová země
           
)
       )
   ));
   print_r($res); exit;
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}


/**
* Zjištění stavu svozu - getPickupOrderStatus()
*/
try {
   $res = $dpd->getPickupOrderStatus(
'ID_REFERENCE_LIST'); print_r($res); exit;
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}


/**
* Smazání svozu - deletePickupOrder()
*/
try {
   $res = $dpd->deletePickupOrder(
'ID_REFERENCE_LIST'); print_r($res); exit;
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}


/**
* Search Missing Pickup Order - Vrací množství zásilek, pro které není pořízena objednávka svozu
*/
try {
   $res = $dpd->searchMissingPickupOrder(); print_r($res); exit;
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}


/**
* Search Pickup Order - Vrací seznam objednávek svozu dle vstupních parametrů
*/
try {
   $res = $dpd->searchPickupOrder(
       $startDate,
// YYYYMMDD
       
$endDate, // YYYYMMDD nebo true = dnes
       
$payerId = null, // (nepovinné) long O Pickup order payer id
       
$senderAddressId = null // (nepovinné) long O Pickup order sender address id
   
);
   print_r($res); exit; 
// vrátí [pickupOrderList] pokud najde
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}


/*
* Reprint Parcel Label - Opětovný tisk přepravního štítku balíku
*/
try {
   $res = $dpd->ReprintParcelLabel(array(
'WX1516566'), 'PDF'); print_r($res); exit;
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}


/**
* Reprint Manifest - Opětovný tisk seznamu zásilek (manifestu). Volitelně se štítky
* Lze volat pouze po metodě closeManifest!
*/
try {
   $res = $dpd->reprintManifest(
'MR167', 3, 'PDF'); print_r($res); exit;
}
catch (Exception $e) {
   echo
'<pre>DPD chyba: '.$e->getMessage().PHP_EOL;
   print_R($dpd->getLastRequest());
   exit;
}

Historie změn

22.07.2020 - Doplněny příklady k MojeDPD
31.10.2017 - Přidáno

Poslední zpětné linky