petschko / dhl-php-sdk Goto Github PK
View Code? Open in Web Editor NEWUnofficial DHL PHP SDK based on the DHL API - Updated to API-Version 2
License: MIT License
Unofficial DHL PHP SDK based on the DHL API - Updated to API-Version 2
License: MIT License
Hey Guys,
just did all the steps from readme but getting following error:
[Symfony\Component\Debug\Exception\FatalErrorException]
SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://cig.dhl.de/cig-wsdls/com/dpdhl/wsdl/geschaeftskundenversand-a
pi/2.2/geschaeftskundenversand-api-2.2.wsdl' : failed to load external entity "https://cig.dhl.de/cig-wsdls/com/dpd
hl/wsdl/geschaeftskundenversand-api/2.2/geschaeftskundenversand-api-2.2.wsdl"
When I try to fetch WDSL URL in Browser it works fine.
Hi there!
I'd like to build an application for a customer.
Is there a way to get the normal label in the first step and only if its nessesary to get der return-label?
In my case the function $dhl->getReturnLabel() is not working.
Thanks!
Hi i have downloaded the dhl php sdk,
i set all Data in the test.php but it cames a 500er servererror.
Anyone have ideas?
Does the credentials for https://xmlportal.dhl.com/login also work in your sdk? and why it gives me syntax error or http 500 error on this line:
$credentials = new \Petschko\DHL\Credentials(Credentials::TEST_NORMAL);
I have got only test credentials for dhl xml web services but i keep getting authorization required when i use it like this $credentials = new \Petschko\DHL\Credentials();
And in above case using TEST_NORMAL OR any other test mode i get syntax error????
please help me as quickly as possible thank you so much.
While using the test.php
and test mode I'm only getting Authorization Required
The only things I provided are $credentials->setApiUser("[email protected]");
and $credentials->setApiPassword("password");
using my DHL dev account data.
XML:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://dhl.de/webservice/cisbase"
xmlns:ns2="http://dhl.de/webservices/businesscustomershipping">
<SOAP-ENV:Header>
<ns1:Authentification>
<ns1:user>2222222222_01</ns1:user>
<ns1:signature>pass</ns1:signature>
</ns1:Authentification>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns2:CreateShipmentOrderRequest>
<Version>
<majorRelease>2</majorRelease>
<minorRelease>2</minorRelease>
</Version>
<ShipmentOrder>
<sequenceNumber>1</sequenceNumber>
<Shipment>
<ShipmentDetails>
<product>V01PAK</product>
<ns1:accountNumber>22222222220101</ns1:accountNumber>
<shipmentDate>2018-04-04</shipmentDate>
<ShipmentItem>
<weightInKG>5</weightInKG>
</ShipmentItem>
<Service/>
</ShipmentDetails>
<Shipper>
<Name>
<ns1:name1>Peter Muster</ns1:name1>
</Name>
<Address>
<ns1:streetName>Test Straße</ns1:streetName>
<ns1:streetNumber>12a</ns1:streetNumber>
<ns1:zip>21037</ns1:zip>
<ns1:city>Hamburg</ns1:city>
<ns1:Origin>
<ns1:country>germany</ns1:country>
<ns1:countryISOCode>DE</ns1:countryISOCode>
</ns1:Origin>
</Address>
<Communication/>
</Shipper>
<Receiver>
<ns1:name1>Test Empfänger</ns1:name1>
<Address>
<ns1:streetName>Test Straße</ns1:streetName>
<ns1:streetNumber>23b</ns1:streetNumber>
<ns1:zip>21037</ns1:zip>
<ns1:city>Hamburg</ns1:city>
<ns1:Origin>
<ns1:country>germany</ns1:country>
<ns1:countryISOCode>DE</ns1:countryISOCode>
</ns1:Origin>
</Address>
<Communication/>
</Receiver>
</Shipment>
<labelResponseType>URL</labelResponseType>
</ShipmentOrder>
</ns2:CreateShipmentOrderRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Hi,
in test-mode the user is hardcoded set to "2222222222_01" but for thermo labels you need a different test-user.
https://entwickler.dhl.de/group/ep/wsapis/geschaeftskundenversand/authentifizierung
Test-User: 2222222222_01
Test-User (Thermodrucker): 2222222222_03
overwriting the user with Credentials->setUser() wont work as any call of new BusinessShipment() with test-mode overwrites the credentials
I want to add better Value-Validation on Class creations (eg test if a value is to long or isn't valid)
The current validation is to basic imo
When trying to request an already created shipment label via $dhl->getShipmentLabel and then calling $response->getLabel() the method returns null.
My solution was to simply add the label response type to the creation of the DHL_Response object in the method getShipmentLabel definition (DHL_BusinessShipment.php:940)
I've encountered this Problem after a customer uses a Pack-Station as Address... I just forget to implement this feature. I think its important to have. So I will implement it soon!
Can you please help me how to get shipment number of return label?
Function getShipmentNumber() return number of package which goes to receiver but i need also to save number of the return package...
Hi,
I'm currently trying to print a label after manifesting a shipment by number, which works.
Right after manifesting the shipment, I cant print the label anymore - neither through the old url, nor by using
$dhl->getShipmentLabel($shipmentNumber)`.
Is this a limitation of the sandbox or a mishandling of the API through the library?
Hi! I am trying to create a new shipment through the API Using the code in test.php...
The Problem is, that i always get an error, when creating a shipment: Unauthorized. The login credentials are correct (Dev ID and Password) and I can login just fine with them on the website.
`<?php
require_once(DIR . '/dhl-php-sdk/includes/_nonComposerLoader.php');
use Petschko\DHL\BusinessShipment;
use Petschko\DHL\Credentials;
use Petschko\DHL\Receiver;
use Petschko\DHL\ReturnReceiver;
use Petschko\DHL\Sender;
use Petschko\DHL\Service;
use Petschko\DHL\ShipmentOrder;
use Petschko\DHL\ShipmentDetails;
//$testMode = Credentials::DHL_BUSINESS_TEST_USER_THERMO; // Uses the thermo-printer test user
$reference = '1'; // You can use anything here (max 35 chars)
$credentials = new Credentials(Credentials::TEST_NORMAL);
var_dump($credentials);
echo '<br>';
// Set your API-Login
$credentials->setApiUser('#######'); // Test-Mode: Your DHL-Dev-Account (Developer-ID NOT E-Mail!!) | Production: Your Applications-ID
$credentials->setApiPassword('##########');
var_dump($credentials);
echo '<br>';
$sender = new Sender();
//Address replaced for privacy..
$sender->setName((string) 'ABC'); // Can be a Person-Name or Company Name
$sender->setStreetName((string) 'ABC');
$sender->setStreetNumber((string) '5'); // A Number is ALWAYS needed
$sender->setZip((string) '12345');
$sender->setCity((string) 'ABC');
$sender->setCountry((string) 'Germany');
$sender->setCountryISOCode((string) 'DE'); // 2 Chars ONLY
$shipmentDetails = new ShipmentDetails($credentials->getEkp(10) . '0101');
//Getting userdata fro DB cut out...
// receiver details
$receiver = new Receiver();
$receiver->setName($firstname . ' ' . $lastname);
$receiver->setStreetName($str);
$receiver->setStreetNumber($number);
$receiver->setZip($plz);
$receiver->setCity($town);
$receiver->setCountry('Germany');
$receiver->setCountryISOCode('DE');
$dhl = new BusinessShipment($credentials);
echo '<br>';
var_dump($dhl);
echo '<br>';
$shipmentOrder = new ShipmentOrder();
$shipmentOrder->setSequenceNumber($reference); // Just needed to identify the shipment if you do multiple
$shipmentOrder->setSender($sender);
$shipmentOrder->setReceiver($receiver); // You can set these Object-Types here: DHL_Filial, DHL_Receiver & DHL_PackStation
$shipmentOrder->setShipmentDetails($shipmentDetails);
$shipmentOrder->setLabelResponseType(BusinessShipment::RESPONSE_TYPE_URL);
$dhl->addShipmentOrder($shipmentOrder);
$response = $dhl->createShipment();
if($response !== false) {
echo 'Erfolg! Klicke <a href="' . $response["label_url"] . '">hier</a> um das Label anzuzeigen.<br><br>';
var_dump($response);
} else {
var_dump($dhl->getErrors());
}
?>`
Hi, for logging purposes we would like to log als the complete request sent to DHL.
Currently all methods/properties are private.
Does it make sense to create a pull request to get the last sent data or something similar?
Alex
I've merged the changes, that multi-labels work now. #52
But I was not able to test if the export-document still work... Please let me know if you use this function and test if it gives you the export-documents... Here is a checklist:
createShipment
works with "ExportDocument"createShipment
shows the "ExportDocument" in ResponsecreateShipment
works with "COD (Cash on delivery)"createShipment
shows the "COD (Cash on delivery)" label in responsegetExportDoc
still worksgetExportDoc
works with multiple elementsgetExportDoc
shows the result(s) in ResponseThanks for anyone, who is willing to share their test-results =)
Hy folks, recently i spotted a problem with the address validation aka full street address. Its works fine for Germany but really bad for anything else. I found that php address checker, which parses the address through google: http://www.jayjohnston.com/php/parse-addresses-in-php-using-google-geocoding
I changed the address check in line 295/Addresses.php:
public final function setFullStreet($street) {
$url = 'http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address='.urlencode($street);
$results = json_decode(file_get_contents($url),1);
$parts = array(
'street'=>array('route'),
'number'=>array('street_number')
);
if (!empty($results['results'][0]['address_components'])) {
$ac = $results['results'][0]['address_components'];
foreach($parts as $need=>&$types) {
foreach($ac as &$a) {
if (in_array($a['types'][0],$types)) $address_out[$need] = $a['short_name'];
elseif (empty($address_out[$need])) $address_out[$need] = '';
}
}
}
$this->setStreetName($address_out['street']);
$this->setStreetNumber($address_out['number']);
}
Hope it helps somebody :D
First of all - thaks for your great package, it helped me a lot. I have found feature which is probably missing in your package (or i didn't find the way how to do it). I need to created Shipment with multiple instances of ShipmentItem. Could you please provide possible solution?
Please help me. Tell me if this feature work
I used some same code fragments quite often in the BusinessShipment Class... It really disturbs me, I want to reduce the amount of duplicate Code here
Add missing Class (Export-Document) - Its just a dummy Class now
I've think about assigning the last 4 digits of the EKP automaticly depending on which Product is used (and if a Return-Lebel is needed)...
But I'm a bit unsure if this is a good idea, feel free to tell me what you think about it!
@EddyFK told me, that you can add multiple ExportDocPositions. I was not aware of that, so I will implement them as soon as possible.
See conversion here: #21 (comment)
I want to have backwarts compatibility, but I can't find a Documentation for the old Version (1)...
If someone knows how Version 1 work and/or have a Documentation, you can provide a Link or complete the functions by yourself =)
The Version 1 functions are named like this: {functionname}_v1
. Some of them are done, if they are not implemented, they are marked with a "todo"...
Create a shipment and add extra service namedPersonOnly doesnt work.
Sometimes you get an Array instead of a String as Return-Value of the Function \Petschko\DHL\Response->getStatusMessage();
which should be String
Hy folks, i tried to add GoGreen Support, but on the label it's not showing:
$service = new DHL_Service();
$service->setGoGreen(1);
$service->setPremium(1);
...
$dhl->setService($service);
Premium is working though and uses the same semantic. A closer look (my php skill is not the best) let me to DHL_Service.php line 1155:
if($this->getPremium() !== null) {
$class->Premium = new StdClass;
$class->Premium->active = (int) $this->getPremium();
}
this kind of definition is missing for GoGreen, but adding the same for green doesnt seem to solve the problem:
if($this->getGoGreen() !== null) {
$class->GoGreen = new StdClass;
$class->GoGreen->active = (int) $this->getGoGreen();
}
Any idea? Am i missing something ?
I just came back to my code which worked fine, but now I only get "false" returned by $dhl->createShipment();
I already took a look into the code but can't find a single reason to just return "false".
The SoapClient looks like this:
object(SoapClient)#386 (7) {
["location"]=>
string(43) "https://cig.dhl.de/services/production/soap"
["_login"]=>
string(13) "api_user"
["_password"]=>
string(30) "api_user_password"
["trace"]=>
int(1)
["_soap_version"]=>
int(1)
["sdl"]=>
resource(950) of type (Unknown)
["__default_headers"]=>
array(1) {
[0]=>
object(SoapHeader)#362 (4) {
["namespace"]=>
string(32) "http://dhl.de/webservice/cisbase"
["name"]=>
string(16) "Authentification"
["data"]=>
array(3) {
["user"]=>
string(17) "dhl_user"
["signature"]=>
string(16) "dhl_user_password"
["type"]=>
int(0)
}
["mustUnderstand"]=>
bool(false)
}
}
}
My $dhl object looks like this:
object(Petschko\DHL\BusinessShipment)#15 (20) {
["soapClient":"Petschko\DHL\BusinessShipment":private]=>
NULL
["errors":"Petschko\DHL\BusinessShipment":private]=>
array(0) {
}
["test":"Petschko\DHL\BusinessShipment":private]=>
bool(false)
["log":"Petschko\DHL\BusinessShipment":private]=>
bool(false)
["credentials":"Petschko\DHL\BusinessShipment":private]=>
object(Petschko\DHL\Credentials)#270 (5) {
["user":"Petschko\DHL\Credentials":private]=>
string(17) "dhl_user"
["signature":"Petschko\DHL\Credentials":private]=>
string(16) "dhl_user_password"
["epk":"Petschko\DHL\Credentials":private]=>
string(10) "EKP"
["api_user":"Petschko\DHL\Credentials":private]=>
string(13) "api_user"
["api_password":"Petschko\DHL\Credentials":private]=>
string(30) "api_user_password"
}
["shipmentDetails":"Petschko\DHL\BusinessShipment":private]=>
object(Petschko\DHL\ShipmentDetails)#470 (11) {
["product":"Petschko\DHL\ShipmentDetails":private]=>
string(6) "V01PAK"
["accountNumber":"Petschko\DHL\ShipmentDetails":private]=>
string(14) "EKP0101"
["customerReference":"Petschko\DHL\ShipmentDetails":private]=>
NULL
["shipmentDate":"Petschko\DHL\ShipmentDetails":private]=>
NULL
["returnAccountNumber":"Petschko\DHL\ShipmentDetails":private]=>
NULL
["returnReference":"Petschko\DHL\ShipmentDetails":private]=>
NULL
["weight":"Petschko\DHL\ShipmentDetails":private]=>
int(1)
["length":"Petschko\DHL\ShipmentDetails":private]=>
NULL
["width":"Petschko\DHL\ShipmentDetails":private]=>
NULL
["height":"Petschko\DHL\ShipmentDetails":private]=>
NULL
["packageType":"Petschko\DHL\ShipmentDetails":private]=>
string(2) "PK"
}
["service":"Petschko\DHL\BusinessShipment":private]=>
object(Petschko\DHL\Service)#339 (38) {
["dayOfDeliveryEnabled":"Petschko\DHL\Service":private]=>
NULL
["dayOfDeliveryDate":"Petschko\DHL\Service":private]=>
NULL
["deliveryTimeframeEnabled":"Petschko\DHL\Service":private]=>
NULL
["deliveryTimeframe":"Petschko\DHL\Service":private]=>
NULL
["preferredTimeEnabled":"Petschko\DHL\Service":private]=>
NULL
["preferredTime":"Petschko\DHL\Service":private]=>
NULL
["individualSenderRequiredmentsEnabled":"Petschko\DHL\Service":private]=>
NULL
["individualSenderRequiredmentsText":"Petschko\DHL\Service":private]=>
NULL
["packagingReturn":"Petschko\DHL\Service":private]=>
NULL
["returnImmediatlyIfShipmentFailed":"Petschko\DHL\Service":private]=>
NULL
["noticeNonDeliverability":"Petschko\DHL\Service":private]=>
NULL
["shipmentHandlingEnabled":"Petschko\DHL\Service":private]=>
NULL
["shipmentHandlingType":"Petschko\DHL\Service":private]=>
NULL
["endorsementEnabled":"Petschko\DHL\Service":private]=>
NULL
["endorsementType":"Petschko\DHL\Service":private]=>
NULL
["visualCheckOfAgeEnabled":"Petschko\DHL\Service":private]=>
NULL
["visualCheckOfAgeType":"Petschko\DHL\Service":private]=>
NULL
["preferredLocationEnabled":"Petschko\DHL\Service":private]=>
NULL
["preferredLocationDetails":"Petschko\DHL\Service":private]=>
NULL
["preferredNeighbourEnabled":"Petschko\DHL\Service":private]=>
NULL
["preferredNeighbourText":"Petschko\DHL\Service":private]=>
NULL
["preferredDayEnabled":"Petschko\DHL\Service":private]=>
NULL
["preferredDayText":"Petschko\DHL\Service":private]=>
NULL
["goGreen":"Petschko\DHL\Service":private]=>
NULL
["perishables":"Petschko\DHL\Service":private]=>
NULL
["personalHandover":"Petschko\DHL\Service":private]=>
NULL
["disableNeighbourDelivery":"Petschko\DHL\Service":private]=>
NULL
["namedPersonOnly":"Petschko\DHL\Service":private]=>
NULL
["returnReceipt":"Petschko\DHL\Service":private]=>
NULL
["premium":"Petschko\DHL\Service":private]=>
NULL
["cashOnDeliveryEnabled":"Petschko\DHL\Service":private]=>
NULL
["cashOnDeliveryAddFee":"Petschko\DHL\Service":private]=>
NULL
["cashOnDeliveryAmount":"Petschko\DHL\Service":private]=>
NULL
["additionalInsuranceEnabled":"Petschko\DHL\Service":private]=>
NULL
["additionalInsuranceAmount":"Petschko\DHL\Service":private]=>
NULL
["bulkyGoods":"Petschko\DHL\Service":private]=>
NULL
["identCheckEnabled":"Petschko\DHL\Service":private]=>
NULL
["identCheckObj":"Petschko\DHL\Service":private]=>
NULL
}
["bank":"Petschko\DHL\BusinessShipment":private]=>
NULL
["sender":"Petschko\DHL\BusinessShipment":private]=>
object(Petschko\DHL\Sender)#414 (15) {
["name":"Petschko\DHL\SendPerson":private]=>
string(28) "Sender"
["name2":"Petschko\DHL\SendPerson":private]=>
NULL
["name3":"Petschko\DHL\SendPerson":private]=>
NULL
["phone":"Petschko\DHL\SendPerson":private]=>
string(11) "phonenumber"
["email":"Petschko\DHL\SendPerson":private]=>
string(26) "email.de"
["contactPerson":"Petschko\DHL\SendPerson":private]=>
string(0) ""
["street_name":"Petschko\DHL\Address":private]=>
string(17) "Street"
["street_number":"Petschko\DHL\Address":private]=>
string(2) "1337"
["address_addition":"Petschko\DHL\Address":private]=>
NULL
["dispatchingInfo":"Petschko\DHL\Address":private]=>
NULL
["zip":"Petschko\DHL\Address":private]=>
string(5) "12345"
["location":"Petschko\DHL\Address":private]=>
string(10) "City"
["country":"Petschko\DHL\Address":private]=>
string(7) "germany"
["countryISOCode":"Petschko\DHL\Address":private]=>
string(2) "DE"
["state":"Petschko\DHL\Address":private]=>
NULL
}
["receiver":"Petschko\DHL\BusinessShipment":private]=>
object(Petschko\DHL\Receiver)#129 (15) {
["name":"Petschko\DHL\SendPerson":private]=>
string(12) "Foo Bar"
["name2":"Petschko\DHL\SendPerson":private]=>
NULL
["name3":"Petschko\DHL\SendPerson":private]=>
NULL
["phone":"Petschko\DHL\SendPerson":private]=>
NULL
["email":"Petschko\DHL\SendPerson":private]=>
NULL
["contactPerson":"Petschko\DHL\SendPerson":private]=>
NULL
["street_name":"Petschko\DHL\Address":private]=>
string(8) "Street"
["street_number":"Petschko\DHL\Address":private]=>
string(1) "2"
["address_addition":"Petschko\DHL\Address":private]=>
NULL
["dispatchingInfo":"Petschko\DHL\Address":private]=>
NULL
["zip":"Petschko\DHL\Address":private]=>
string(5) "98765"
["location":"Petschko\DHL\Address":private]=>
string(11) "City"
["country":"Petschko\DHL\Address":private]=>
string(7) "germany"
["countryISOCode":"Petschko\DHL\Address":private]=>
string(2) "DE"
["state":"Petschko\DHL\Address":private]=>
NULL
}
["returnReceiver":"Petschko\DHL\BusinessShipment":private]=>
NULL
["exportDocument":"Petschko\DHL\BusinessShipment":private]=>
NULL
["sequenceNumber":"Petschko\DHL\BusinessShipment":private]=>
string(1) "1"
["receiverEmail":"Petschko\DHL\BusinessShipment":private]=>
NULL
["printOnlyIfReceiverIsValid":"Petschko\DHL\BusinessShipment":private]=>
NULL
["labelResponseType":"Petschko\DHL\BusinessShipment":private]=>
string(3) "URL"
["customAPIURL":"Petschko\DHL\BusinessShipment":private]=>
NULL
["version":"Petschko\DHL\Version":private]=>
string(3) "2.2"
["mayor":"Petschko\DHL\Version":private]=>
int(2)
["minor":"Petschko\DHL\Version":private]=>
int(2)
}
However .. calling $dhl->createShipment();
now only returns bool(false)
Any clue how to debug this?
Hello,
how i can add CompanyName and Street2 to the Receiver?
Thanks
The test.php
File is a mess and I want make more examples instead of this one with many comments etc
DHL say we should store the WSDL-Files local (improved performance, less traffic & better for DHL-Servers), thats done with this SDK. But I didn't implement the feature where the SDK checks (for example once a day), if the File(s) is(/are) up-to-date...
Did anybody use this SDK for sending packages to ParcelShops in Austria? I was not able to figure out the right approach. I suppose for European pickup points there should be a new class ParcelShop with propper data in it?
It would be nice if the getManifest action could be implemented.
According to api documentation with getManifest it is possible to get the daily pdf-summary files:
https://entwickler.dhl.de/group/ep/wsapis/geschaeftskundenversand/operationen/getmanifest/beispieldaten
Hi. My name is Pavel.
I'm trying install this package via composer, but I have this responce:
"Could not find package petschko/dhl-php-sdk at any version for your minimum-stability (stable). Check the package spelling or your minimum-stability"
I saw, that the updateShipmentOrder
Method is missing in the SDK as well. It should not be complicated to include this method, since its the same syntax like createShipmentOrder
Request from here
$obj = new Product(ShipmentDetails::PRODUCT_TYPE_AUSTRIA_INTERNATIONAL_PACKAGE);
$obj->setName('DHL Paket International');
I would say, setName should add 'Austria' too for this Product. For Austria Connect too.
Btw. Service PersonalHandover is obsolote, it has been replaced with namedPersonOnly.
Please tag revision 6e08515 as 0.0.1
.
I've got a Feature-Request about adjusting the size for the output Label.
I never read anything about it in the DHL-Dokumentation, if someone knows anything about it please tell me. (Like if there is such a feature)
If there is such a function to adjust the Label-Size for printing, I will implement it as soon as possible =)
I can only find the deprecated Service::setGoGreen() function but there is no hint how to enable GoGreen in current version.
In the DHL Documentation there is still the option to set GoGreen https://entwickler.dhl.de/group/ep/wsapis/geschaeftskundenversand/operationen/createshipmentorder/ioreference
Please help me, i have included includes/noncomposer.php but i become only Errors. What can i do?
The DHL API allows to create up to 30 shipment labels per SOAP call. In test.php there's only one label generated. Is it possible to create several labels in one call?
Hi,
i'm trying to validate my adresses before i send them create a label, but sometimes i get
some wrong information back.
StatusCode: 1
StatusText: Some Shipments had errors.
StatusMsg: ok;Der Webservice wurde ohne Fehler ausgeführt.
If i try to validate it again it works and gives me the correct Status:
StatusCode: 0
StatusText: ok
statusMsg: Der Webservice wurde ohne Fehler ausgeführt.
In the following Screenshot you see some test javascript,
which gets the data from my test.php.
The entries were all tested with the same adress.
(every request is about 10-30 seconds apart)
Hey,
I am trying to test the validateShipment function doing this:
$response = $dhl->validateShipment($shipmentOrder);
and I got an object with the data which I can use to validate, so then I do this:
$status_text = $response->getStatusText();
$status_code = $response->getStatusCode();
if($status_text == "ok" && $status_code == 0){
echo "success";
}
But curiously, when I refresh the page, sometimes I get $status_code = 0 and sometimes I get $status_code = 1. Why is that? Here is the response object when everything works well.
object(Petschko\DHL\Response)#943 (8) { ["manifestData":"Petschko\DHL\Response":private]=> NULL ["statusCode":"Petschko\DHL\Response":private]=> int(0) ["statusText":"Petschko\DHL\Response":private]=> string(2) "ok" ["statusMessage":"Petschko\DHL\Response":private]=> string(45) "Der Webservice wurde ohne Fehler ausgeführt." ["labelData":"Petschko\DHL\Response":private]=> array(1) { [0]=> object(Petschko\DHL\LabelData)#944 (12) { ["statusCode":"Petschko\DHL\LabelData":private]=> int(0) ["statusText":"Petschko\DHL\LabelData":private]=> string(2) "ok" ["statusMessage":"Petschko\DHL\LabelData":private]=> string(45) "Der Webservice wurde ohne Fehler ausgeführt." ["sequenceNumber":"Petschko\DHL\LabelData":private]=> string(1) "1" ["shipmentNumber":"Petschko\DHL\LabelData":private]=> NULL ["label":"Petschko\DHL\LabelData":private]=> NULL ["returnLabel":"Petschko\DHL\LabelData":private]=> NULL ["exportDoc":"Petschko\DHL\LabelData":private]=> NULL ["codLabel":"Petschko\DHL\LabelData":private]=> NULL ["version":"Petschko\DHL\Version":private]=> string(3) "2.2" ["mayor":"Petschko\DHL\Version":private]=> int(2) ["minor":"Petschko\DHL\Version":private]=> int(2) } } ["version":"Petschko\DHL\Version":private]=> string(3) "2.2" ["mayor":"Petschko\DHL\Version":private]=> int(2) ["minor":"Petschko\DHL\Version":private]=> int(2) }
And here is the object when the status code is 1:
object(Petschko\DHL\Response)#943 (8) { ["manifestData":"Petschko\DHL\Response":private]=> NULL ["statusCode":"Petschko\DHL\Response":private]=> int(1) ["statusText":"Petschko\DHL\Response":private]=> string(26) "Some Shipments had errors." ["statusMessage":"Petschko\DHL\Response":private]=> string(48) "ok;Der Webservice wurde ohne Fehler ausgeführt." ["labelData":"Petschko\DHL\Response":private]=> array(1) { [0]=> object(Petschko\DHL\LabelData)#944 (12) { ["statusCode":"Petschko\DHL\LabelData":private]=> int(0) ["statusText":"Petschko\DHL\LabelData":private]=> string(2) "ok" ["statusMessage":"Petschko\DHL\LabelData":private]=> string(45) "Der Webservice wurde ohne Fehler ausgeführt." ["sequenceNumber":"Petschko\DHL\LabelData":private]=> string(1) "1" ["shipmentNumber":"Petschko\DHL\LabelData":private]=> NULL ["label":"Petschko\DHL\LabelData":private]=> NULL ["returnLabel":"Petschko\DHL\LabelData":private]=> NULL ["exportDoc":"Petschko\DHL\LabelData":private]=> NULL ["codLabel":"Petschko\DHL\LabelData":private]=> NULL ["version":"Petschko\DHL\Version":private]=> string(3) "2.2" ["mayor":"Petschko\DHL\Version":private]=> int(2) ["minor":"Petschko\DHL\Version":private]=> int(2) } } ["version":"Petschko\DHL\Version":private]=> string(3) "2.2" ["mayor":"Petschko\DHL\Version":private]=> int(2) ["minor":"Petschko\DHL\Version":private]=> int(2) }
Do you know the reason of this? am I missing any other setting? Should I just pay attention to the labeldata array? because there it seems to always display the correct code (notice that I am using a correct address for sender and receiver but I am testing with the sender in this case).
Thanks.
Hi,
first of all, a huge thanks for this library. It has saved me hours of painful work.
Now, when I try to add a additional line to the receiver address, it does not show up on the shipping-label.
The DHL-Docs say, the addressAddition field is for international shipments only.
Are there any other possibilities? Sometimes the address additional is required, otherwise the shipment cannot be delivered and is returned.
Hello,
I was not able to test if the Return-Label works (no Test-Data found) - Please test it, if you can...
If you know Test-Data for Return-Label, please write them here, so that I can include them (or do it by yourself =))
I would like to use the getVersion()
Method of DHL as a simple check whether the user has entered valid API credentials.
I will implement it myself for my software, but a more robust and more coherent to the style of the library implementation would be appreciated. The request itself is very straightforward.
Any other easy implementation of a simple credentials validation check would be just as fine. I just suggested the getVersion method since it's an easy request that does not need parameters
Hello,
first of all thank you very much for this great library!
I'm currently integrating it for a online shop and wondered if there was a way to add the functionality of validating shipments before creating them, by using the DHL function validateShipment, like $business_shipment->validate() which would not use the createShipmentOrder SOAP call but rather validateShipment in order to see what values are invalid and so on...
If you don't want to or can't implement it i'll maybe submit a PR after eventually implementing it myself :)
Grüße aus München
Hy @Petschko ,
thanks for that great plugin!
I have a hard time to get the values set for the exportDocPosition, like setAmount etc, which is mandatory for international shipping. Could some one explain how to achieve that?
i have tried so far in my setup.php
$export = new DHL_ExportDocument();
$export->setExportType('OTHER');
$export->setExportTypeDescription('Test descr');
$export->setAdditionalFee('20');
and later called it with:
$dhl->setExportDocument($export);
which works as expected. How to setup the values for DHL_ExportDocPosition now?
Thx
hello,
we test your php sdk and have on problem.
We look if a national or international shipping.
If de = national V01PAK and epk is .....0102
else = international V53WPAK and epk is .....0302
if($utf_landcode == 'DE'){
$credentials->setEpk('xxxxxxxxxxxx102');
$shipmentDetails->setProduct((string) DHL_ShipmentDetails::{V01PAK});
} else {
$credentials->setEpk('xxxxxxxxxxxx302');
$shipmentDetails->setProduct((string) DHL_ShipmentDetails::{V53WPAK});
}
is not working.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.