项目作者: dreipunktnull

项目描述 :
Generated and adjusted DHL Express SOAP API client
高级语言: PHP
项目地址: git://github.com/dreipunktnull/dhl-express.git
创建时间: 2017-10-06T09:54:19Z
项目社区:https://github.com/dreipunktnull/dhl-express

开源协议:

下载


DHL Express SOAP API client

A generated SOAP API client for the DHL Express Global Webservice.

Installation

To install the package, you can use composer:

  1. composer require dreipunktnull/dhl-express

Usage without composer is currently not possible and needs some adjustments in the provided autoloader.

Shipment Requests

A shipment request is usually created through the webservice and in order to mutate (f.e. cancel) it,
we need some parameters. You should therefore create your own ShipmentRequest data class and persist
the ShipmentDetail data points.

As of now, no such class is included.

  1. class ShipmentRequestService
  2. {
  3. /**
  4. * @var string
  5. */
  6. private $user;
  7. /**
  8. * @var string
  9. */
  10. private $password;
  11. /**
  12. * @var string
  13. */
  14. private $accountNumber;
  15. /**
  16. * @param string $user
  17. * @param string $password
  18. * @param string $accountNumber
  19. */
  20. public function __construct(string $user, string $password, string $accountNumber)
  21. {
  22. $this->user = $user;
  23. $this->password = $password;
  24. $this->accountNumber = $accountNumber;
  25. }
  26. /**
  27. * @param \DateTimeInterface $shipTimestamp
  28. * @param ContactInfoType $sender
  29. * @param ContactInfoType $recipient
  30. * @param ShipmentRequest $shipmentRequest
  31. * @param string|null $restrictToServiceType
  32. *
  33. * @return \DHL\Express\Webservice\ShipmentDetailType
  34. */
  35. public function createShipping(\DateTimeInterface $shipTimestamp, ContactInfoType $sender, ContactInfoType $recipient, ShipmentRequest $shipmentRequest, $restrictToServiceType = null)
  36. {
  37. $webservice = $this->prepareWebservice();
  38. $shipmentInfo = new ShipmentInfoType(
  39. DropOffType::REQUEST_COURIER,
  40. $this->calculateShippingType($shipmentRequest),
  41. ShipmentInfoType::CURRENCY_EUR,
  42. UnitOfMeasurement::SI
  43. );
  44. $shipmentInfo->setAccount($this->accountNumber);
  45. $internationalDetail = new InternationDetailType(new CommoditiesType('Keine Angabe'));
  46. $internationalDetail->setContent(Content::DOCUMENTS);
  47. $requestedShipment = new RequestedShipmentType(
  48. $shipmentInfo,
  49. sprintf('%sT%s GMT+01:00', $shipTimestamp->format('Y-m-d'), $shipTimestamp->format('H:i:s')),
  50. PaymentInfo::DDP,
  51. $internationalDetail,
  52. new ShipType($sender, $recipient),
  53. new docTypeRef_PackagesType(
  54. new docTypeRef_RequestedPackagesType(
  55. self::PACKAGE_WEIGHT,
  56. new docTypeRef_DimensionsType(self::PACKAGE_LENGTH, self::PACKAGE_WIDTH, self::PACKAGE_HEIGHT),
  57. '1',
  58. 1,
  59. 'No Description'
  60. )
  61. )
  62. );
  63. if (null !== $shipmentRequest->getSpecialPickupInstruction()) {
  64. $requestedShipment->setSpecialPickupInstruction($shipmentRequest->getSpecialPickupInstruction());
  65. }
  66. if (null !== $shipmentRequest->getPickupLocation()) {
  67. $requestedShipment->setPickupLocation($shipmentRequest->getPickupLocation());
  68. }
  69. if ($shipTimestamp instanceof \DateTimeImmutable) {
  70. $pickupLocationCloseTime = $shipTimestamp->modify('+91 minutes');
  71. } else {
  72. $pickupLocationCloseTime = \DateTimeImmutable::createFromMutable($shipTimestamp)->modify('+91 minutes');
  73. }
  74. $requestedShipment->setPickupLocationCloseTime($pickupLocationCloseTime->format('H:i'));
  75. $request = new ProcessShipmentRequestType($requestedShipment);
  76. $shipmentDetailType = $webservice->createShipmentRequest($request);
  77. return $shipmentDetailType;
  78. }
  79. /**
  80. * This should only be done if the pickup type is something other than PickupType::Regular.
  81. *
  82. * @param ShipmentRequest $shipmentRequest
  83. * @param string $requester This parameter is required but won't be evaluated.
  84. * @param string $reason This parameter is optional but may be useful.
  85. * @return DeleteResponseType
  86. */
  87. public function cancel(ShipmentRequest $shipmentRequest, $requester = 'ERNIE_OR_BERT', $reason = DeleteRequestType::REASON_REASON_NOT_GIVEN): DeleteResponseType
  88. {
  89. $webservice = $this->prepareWebservice();
  90. $deleteRequest = new DeleteRequestType(
  91. $shipmentRequest->getShipmentTime()->format('Y-m-d'),
  92. $shipmentRequest->getPickupCountry(),
  93. $shipmentRequest->getDispatchConfirmationNumber(),
  94. $requester
  95. );
  96. $deleteRequest->setReason($reason);
  97. return $webservice->deleteShipmentRequest($deleteRequest);
  98. }
  99. /**
  100. * @return GblDHLExpressTrack
  101. */
  102. private function prepareWebservice(): GblDHLExpressTrack
  103. {
  104. $track = new GblDHLExpressTrack(['trace' => 1]);
  105. $wsse_header = WssWsuAuthHeader::soapClientWSSecurityHeader($this->user, $this->password, $this->accountNumber);
  106. $track->__setSoapHeaders([$wsse_header]);
  107. return $track;
  108. }
  109. }

Tracking

Example Tracking Service that is able to authenticate and track a package:

  1. use DHL\Express\Webservice\Soap\WssWsuAuthHeader;
  2. use DHL\Express\Webservice\Tracking\ArrayOfAWBNumber;
  3. use DHL\Express\Webservice\Tracking\GblDHLExpressTrack;
  4. use DHL\Express\Webservice\Tracking\LevelOfDetails;
  5. use DHL\Express\Webservice\Tracking\PublicTrackingRequest;
  6. use DHL\Express\Webservice\Tracking\Request;
  7. use DHL\Express\Webservice\Tracking\ServiceHeader;
  8. use DHL\Express\Webservice\Tracking\TrackingRequest;
  9. use DHL\Express\Webservice\Tracking\TrackShipmentRequest;
  10. use Ramsey\Uuid\Uuid;
  11. class TrackingService
  12. {
  13. /**
  14. * @var string
  15. */
  16. private $user;
  17. /**
  18. * @var string
  19. */
  20. private $password;
  21. /**
  22. * @var string
  23. */
  24. private $accountNumber;
  25. /**
  26. * @param string $user
  27. * @param string $password
  28. * @param string $accountNumber
  29. */
  30. public function __construct(string $user, string $password, string $accountNumber)
  31. {
  32. $this->user = $user;
  33. $this->password = $password;
  34. $this->accountNumber = $accountNumber;
  35. }
  36. /**
  37. * Tracks a package.
  38. *
  39. * @param string $trackingNumber
  40. * @param string $levelOfDetails
  41. * @return \DHL\Express\Webservice\Tracking\trackShipmentRequestResponse
  42. */
  43. public function track($trackingNumber, $levelOfDetails = LevelOfDetails::LAST_CHECK_POINT_ONLY)
  44. {
  45. $webservice = $this->prepareWebservice();
  46. $parameters = new TrackShipmentRequest();
  47. $trackingRequest = new TrackingRequest(new Request(new ServiceHeader(new \DateTime(), implode('', explode('-', Uuid::uuid4())))), $levelOfDetails);
  48. $trackingRequest->setAWBNumber(new ArrayOfAWBNumber([$trackingNumber]));
  49. $parameters->setTrackingRequest(new PublicTrackingRequest($trackingRequest));
  50. return $webservice->trackShipmentRequest($parameters);
  51. }
  52. /**
  53. * @return GblDHLExpressTrack
  54. */
  55. private function prepareWebservice(): GblDHLExpressTrack
  56. {
  57. $track = new GblDHLExpressTrack(['trace' => 1]);
  58. $wsse_header = WssWsuAuthHeader::soapClientWSSecurityHeader($this->user, $this->password, $this->accountNumber);
  59. $track->__setSoapHeaders([$wsse_header]);
  60. return $track;
  61. }
  62. }

Acknowledgements

The base version of this library was generated with wsdl2phpgenerator.

Support

Please use the GitHub issue tracker. For commercial support for your project contact
dreipunktnull.

License

MIT