dreipunktnull / dhl-express
此软件包已被弃用且不再维护。未建议替代包。
DHL Express Soap 客户端
v2.0.2
2018-01-22 10:55 UTC
Requires
- php: >=7.0.8
- ramsey/uuid: @stable
Requires (Dev)
README
为 DHL Express Global Webservice 生成的 SOAP API 客户端。
安装
要安装此软件包,您可以使用 composer
composer require dreipunktnull/dhl-express
目前无法不使用 composer 使用,需要对提供的自动加载器进行一些调整。
发货请求
发货请求通常通过 webservice 创建,为了修改(例如取消)它,我们需要一些参数。因此,您应该创建自己的 ShipmentRequest
数据类并持久化 ShipmentDetail
数据点。
目前,尚未包含此类。
class ShipmentRequestService { /** * @var string */ private $user; /** * @var string */ private $password; /** * @var string */ private $accountNumber; /** * @param string $user * @param string $password * @param string $accountNumber */ public function __construct(string $user, string $password, string $accountNumber) { $this->user = $user; $this->password = $password; $this->accountNumber = $accountNumber; } /** * @param \DateTimeInterface $shipTimestamp * @param ContactInfoType $sender * @param ContactInfoType $recipient * @param ShipmentRequest $shipmentRequest * @param string|null $restrictToServiceType * * @return \DHL\Express\Webservice\ShipmentDetailType */ public function createShipping(\DateTimeInterface $shipTimestamp, ContactInfoType $sender, ContactInfoType $recipient, ShipmentRequest $shipmentRequest, $restrictToServiceType = null) { $webservice = $this->prepareWebservice(); $shipmentInfo = new ShipmentInfoType( DropOffType::REQUEST_COURIER, $this->calculateShippingType($shipmentRequest), ShipmentInfoType::CURRENCY_EUR, UnitOfMeasurement::SI ); $shipmentInfo->setAccount($this->accountNumber); $internationalDetail = new InternationDetailType(new CommoditiesType('Keine Angabe')); $internationalDetail->setContent(Content::DOCUMENTS); $requestedShipment = new RequestedShipmentType( $shipmentInfo, sprintf('%sT%s GMT+01:00', $shipTimestamp->format('Y-m-d'), $shipTimestamp->format('H:i:s')), PaymentInfo::DDP, $internationalDetail, new ShipType($sender, $recipient), new docTypeRef_PackagesType( new docTypeRef_RequestedPackagesType( self::PACKAGE_WEIGHT, new docTypeRef_DimensionsType(self::PACKAGE_LENGTH, self::PACKAGE_WIDTH, self::PACKAGE_HEIGHT), '1', 1, 'No Description' ) ) ); if (null !== $shipmentRequest->getSpecialPickupInstruction()) { $requestedShipment->setSpecialPickupInstruction($shipmentRequest->getSpecialPickupInstruction()); } if (null !== $shipmentRequest->getPickupLocation()) { $requestedShipment->setPickupLocation($shipmentRequest->getPickupLocation()); } if ($shipTimestamp instanceof \DateTimeImmutable) { $pickupLocationCloseTime = $shipTimestamp->modify('+91 minutes'); } else { $pickupLocationCloseTime = \DateTimeImmutable::createFromMutable($shipTimestamp)->modify('+91 minutes'); } $requestedShipment->setPickupLocationCloseTime($pickupLocationCloseTime->format('H:i')); $request = new ProcessShipmentRequestType($requestedShipment); $shipmentDetailType = $webservice->createShipmentRequest($request); return $shipmentDetailType; } /** * This should only be done if the pickup type is something other than PickupType::Regular. * * @param ShipmentRequest $shipmentRequest * @param string $requester This parameter is required but won't be evaluated. * @param string $reason This parameter is optional but may be useful. * @return DeleteResponseType */ public function cancel(ShipmentRequest $shipmentRequest, $requester = 'ERNIE_OR_BERT', $reason = DeleteRequestType::REASON_REASON_NOT_GIVEN): DeleteResponseType { $webservice = $this->prepareWebservice(); $deleteRequest = new DeleteRequestType( $shipmentRequest->getShipmentTime()->format('Y-m-d'), $shipmentRequest->getPickupCountry(), $shipmentRequest->getDispatchConfirmationNumber(), $requester ); $deleteRequest->setReason($reason); return $webservice->deleteShipmentRequest($deleteRequest); } /** * @return GblDHLExpressTrack */ private function prepareWebservice(): GblDHLExpressTrack { $track = new GblDHLExpressTrack(['trace' => 1]); $wsse_header = WssWsuAuthHeader::soapClientWSSecurityHeader($this->user, $this->password, $this->accountNumber); $track->__setSoapHeaders([$wsse_header]); return $track; } }
跟踪
示例跟踪服务,能够验证和跟踪包裹
use DHL\Express\Webservice\Soap\WssWsuAuthHeader; use DHL\Express\Webservice\Tracking\ArrayOfAWBNumber; use DHL\Express\Webservice\Tracking\GblDHLExpressTrack; use DHL\Express\Webservice\Tracking\LevelOfDetails; use DHL\Express\Webservice\Tracking\PublicTrackingRequest; use DHL\Express\Webservice\Tracking\Request; use DHL\Express\Webservice\Tracking\ServiceHeader; use DHL\Express\Webservice\Tracking\TrackingRequest; use DHL\Express\Webservice\Tracking\TrackShipmentRequest; use Ramsey\Uuid\Uuid; class TrackingService { /** * @var string */ private $user; /** * @var string */ private $password; /** * @var string */ private $accountNumber; /** * @param string $user * @param string $password * @param string $accountNumber */ public function __construct(string $user, string $password, string $accountNumber) { $this->user = $user; $this->password = $password; $this->accountNumber = $accountNumber; } /** * Tracks a package. * * @param string $trackingNumber * @param string $levelOfDetails * @return \DHL\Express\Webservice\Tracking\trackShipmentRequestResponse */ public function track($trackingNumber, $levelOfDetails = LevelOfDetails::LAST_CHECK_POINT_ONLY) { $webservice = $this->prepareWebservice(); $parameters = new TrackShipmentRequest(); $trackingRequest = new TrackingRequest(new Request(new ServiceHeader(new \DateTime(), implode('', explode('-', Uuid::uuid4())))), $levelOfDetails); $trackingRequest->setAWBNumber(new ArrayOfAWBNumber([$trackingNumber])); $parameters->setTrackingRequest(new PublicTrackingRequest($trackingRequest)); return $webservice->trackShipmentRequest($parameters); } /** * @return GblDHLExpressTrack */ private function prepareWebservice(): GblDHLExpressTrack { $track = new GblDHLExpressTrack(['trace' => 1]); $wsse_header = WssWsuAuthHeader::soapClientWSSecurityHeader($this->user, $this->password, $this->accountNumber); $track->__setSoapHeaders([$wsse_header]); return $track; } }
致谢
此库的基本版本是用 wsdl2phpgenerator 生成的。
支持
请使用 GitHub 问题跟踪器。如需项目商业支持请联系 dreipunktnull。
许可证
MIT