alfallouji / dhl_api
用于与 DHL XML 服务通信的 PHP 库。
Requires
- php: >=5.3.0
README
Al-Fallouji Bashar - bashar@alfallouji.com
文档和下载
最新版本可在 GitHub 上找到:- http://github.com/alfallouji/DHL-API/
许可证
This Code is released under the GNU LGPL
Please do not change the header of the file(s).
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
描述
此库是针对 DHL XML API 服务的 PHP 面向对象客户端。DHL XML 服务是一种在线网络服务集成功能,它提供 DHL 的服务可用性、运输时间、运费、运输和快递取件预订以及来自世界 140 多个国家的运输跟踪。使用 DHL 的 XML 服务,客户可以将 DHL 的运输功能集成到他们的网站、客户服务应用程序或订单处理系统中。
设置
您可以使用 composer 使用此库。
{ "require": { "alfallouji/dhl_api": "*" } }
用法
此客户端不依赖于任何框架,应该很容易与您的代码集成。您可以使用提供的自动加载器或自己的自动加载机制。
示例文件夹包含如何使用客户端和对 DHL XML API 进行请求的示例,例如跟踪运输、创建运输、请求取件或打印标签。
为了使示例正常工作,您需要创建一个 DHL 测试账户。您可以通过访问以下 URL 来做到这一点: http://www.dhl.com.au/en/express/resource_center/integrated_shipping_solutions/integrating_xml_services.html
然后,您需要将 conf/config.sample.php 复制到 conf/config.php(该文件由 init.php 加载)。您需要编辑 config/config.php 文件中定义的 dhl 设置,并提供您的账户 ID 和密码。示例使用这些凭据。
return array( 'dhl' => array( 'id' => 'Your_DHL_ID', 'pass' => 'Your_DHL_Password', 'shipperAccountNumber' => 'Your_Number', 'billingAccountNumber' => 'Your_Number', 'dutyAccountNumber' => 'Your_Number', ), );
示例
请求运输
use DHL\Entity\GB\ShipmentResponse; use DHL\Entity\GB\ShipmentRequest; use DHL\Client\Web as WebserviceClient; use DHL\Datatype\GB\Piece; use DHL\Datatype\GB\SpecialService; // You may use your own init script, as long as it takes care of autoloading require(__DIR__ . '/init.php'); // DHL settings $dhl = $config['dhl']; // Test a ShipmentRequest using DHL XML API $sample = new ShipmentRequest(); // Assuming there is a config array variable with id and pass to DHL XML Service $sample->SiteID = $dhl['id']; $sample->Password = $dhl['pass']; // Set values of the request $sample->MessageTime = '2001-12-17T09:30:47-05:00'; $sample->MessageReference = '1234567890123456789012345678901'; $sample->RegionCode = 'AM'; $sample->RequestedPickupTime = 'Y'; $sample->NewShipper = 'Y'; $sample->LanguageCode = 'en'; $sample->PiecesEnabled = 'Y'; $sample->Billing->ShipperAccountNumber = $dhl['shipperAccountNumber']; $sample->Billing->ShippingPaymentType = 'S'; $sample->Billing->BillingAccountNumber = $dhl['billingAccountNumber']; $sample->Billing->DutyPaymentType = 'S'; $sample->Billing->DutyAccountNumber = $dhl['dutyAccountNumber']; $sample->Consignee->CompanyName = 'Ssense'; $sample->Consignee->addAddressLine('333 Chabanel West, #900'); $sample->Consignee->City = 'Montreal'; $sample->Consignee->PostalCode = 'H3E1G6'; $sample->Consignee->CountryCode = 'CA'; $sample->Consignee->CountryName = 'Canada'; $sample->Consignee->Contact->PersonName = 'Bashar Al-Fallouji'; $sample->Consignee->Contact->PhoneNumber = '0435 336 653'; $sample->Consignee->Contact->PhoneExtension = '123'; $sample->Consignee->Contact->FaxNumber = '506-851-7403'; $sample->Consignee->Contact->Telex = '506-851-7121'; $sample->Consignee->Contact->Email = 'bashar@alfallouji.com'; $sample->Commodity->CommodityCode = 'cc'; $sample->Commodity->CommodityName = 'cn'; $sample->Dutiable->DeclaredValue = '200.00'; $sample->Dutiable->DeclaredCurrency = 'USD'; $sample->Dutiable->ScheduleB = '3002905110'; $sample->Dutiable->ExportLicense = 'D123456'; $sample->Dutiable->ShipperEIN = '112233445566'; $sample->Dutiable->ShipperIDType = 'S'; $sample->Dutiable->ImportLicense = 'ALFAL'; $sample->Dutiable->ConsigneeEIN = 'ConEIN2123'; $sample->Dutiable->TermsOfTrade = 'DTP'; $sample->Reference->ReferenceID = 'AM international shipment'; $sample->Reference->ReferenceType = 'St'; $sample->ShipmentDetails->NumberOfPieces = 2; $piece = new Piece(); $piece->PieceID = '1'; $piece->PackageType = 'EE'; $piece->Weight = '5.0'; $piece->DimWeight = '600.0'; $piece->Width = '50'; $piece->Height = '100'; $piece->Depth = '150'; $sample->ShipmentDetails->addPiece($piece); $piece = new Piece(); $piece->PieceID = '2'; $piece->PackageType = 'EE'; $piece->Weight = '5.0'; $piece->DimWeight = '600.0'; $piece->Width = '50'; $piece->Height = '100'; $piece->Depth = '150'; $sample->ShipmentDetails->addPiece($piece); $sample->ShipmentDetails->Weight = '10.0'; $sample->ShipmentDetails->WeightUnit = 'L'; $sample->ShipmentDetails->GlobalProductCode = 'P'; $sample->ShipmentDetails->LocalProductCode = 'P'; $sample->ShipmentDetails->Date = date('Y-m-d'); $sample->ShipmentDetails->Contents = 'AM international shipment contents'; $sample->ShipmentDetails->DoorTo = 'DD'; $sample->ShipmentDetails->DimensionUnit = 'I'; $sample->ShipmentDetails->InsuredAmount = '1200.00'; $sample->ShipmentDetails->PackageType = 'EE'; $sample->ShipmentDetails->IsDutiable = 'Y'; $sample->ShipmentDetails->CurrencyCode = 'USD'; $sample->Shipper->ShipperID = '751008818'; $sample->Shipper->CompanyName = 'IBM Corporation'; $sample->Shipper->RegisteredAccount = '751008818'; $sample->Shipper->addAddressLine('1 New Orchard Road'); $sample->Shipper->addAddressLine('Armonk'); $sample->Shipper->City = 'New York'; $sample->Shipper->Division = 'ny'; $sample->Shipper->DivisionCode = 'ny'; $sample->Shipper->PostalCode = '10504'; $sample->Shipper->CountryCode = 'US'; $sample->Shipper->CountryName = 'United States Of America'; $sample->Shipper->Contact->PersonName = 'Mr peter'; $sample->Shipper->Contact->PhoneNumber = '1 905 8613402'; $sample->Shipper->Contact->PhoneExtension = '3403'; $sample->Shipper->Contact->FaxNumber = '1 905 8613411'; $sample->Shipper->Contact->Telex = '1245'; $sample->Shipper->Contact->Email = 'test@email.com'; $specialService = new SpecialService(); $specialService->SpecialServiceType = 'A'; $sample->addSpecialService($specialService); $specialService = new SpecialService(); $specialService->SpecialServiceType = 'I'; $sample->addSpecialService($specialService); $sample->EProcShip = 'N'; $sample->LabelImageFormat = 'PDF'; // Call DHL XML API $start = microtime(true); // Display the XML that will be sent to DHL echo $sample->toXML(); // DHL webservice client using the staging environment $client = new WebserviceClient('staging'); // Call the DHL service and display the XML result echo $client->call($sample); echo PHP_EOL . 'Executed in ' . (microtime(true) - $start) . ' seconds.' . PHP_EOL;
如何显示或存储 PDF 标签?
标签使用 base64 编码。
如果您想获取二进制版本以便将其存储为 .PDF 或在浏览器中显示,则需要对其进行解码。
例如,图像标签返回在 LabelImage->OutputImage 节点中。
<req:ShipmentResponse> .... <LabelImage> <OutputFormat>PDF</OutputFormat <OutputImage>......JVBERi0xLjQKJ.....</OutputImage> </LabelImage> </req:ShipmentResponse>
在 PHP 中,您需要执行以下操作来解码字符串。
// We already built our DHL request object, we can call DHL XML API $client = new WebserviceClient('staging'); $xml = $client->call($request); $response = new ShipmentResponse(); $response->initFromXML($xml); // Store it as a . PDF file in the filesystem file_put_contents('dhl-label.pdf', base64_decode($response->LabelImage->OutputImage)); // If you want to display it in the browser $data = base64_decode($response->LabelImage->OutputImage); if ($data) { header('Content-Type: application/pdf'); header('Content-Length: ' . strlen($data)); echo $data; }
如何获取运输报价?
您可以使用 getQuote 或 getCapability 服务。以下是一个示例。
use DHL\Entity\AM\GetQuote; use DHL\Datatype\AM\PieceType; use DHL\Client\Web as WebserviceClient; require(__DIR__ . '/../../init.php'); // DHL Settings $dhl = $config['dhl']; // Test a getQuote using DHL XML API $sample = new GetQuote(); $sample->SiteID = $dhl['id']; $sample->Password = $dhl['pass']; // Set values of the request $sample->MessageTime = '2001-12-17T09:30:47-05:00'; $sample->MessageReference = '1234567890123456789012345678901'; $sample->BkgDetails->Date = date('Y-m-d'); $piece = new PieceType(); $piece->PieceID = 1; $piece->Height = 10; $piece->Depth = 5; $piece->Width = 10; $piece->Weight = 10; $sample->BkgDetails->addPiece($piece); $sample->BkgDetails->IsDutiable = 'Y'; $sample->BkgDetails->QtdShp->QtdShpExChrg->SpecialServiceType = 'WY'; $sample->BkgDetails->ReadyTime = 'PT10H21M'; $sample->BkgDetails->ReadyTimeGMTOffset = '+01:00'; $sample->BkgDetails->DimensionUnit = 'CM'; $sample->BkgDetails->WeightUnit = 'KG'; $sample->BkgDetails->PaymentCountryCode = 'CA'; $sample->BkgDetails->IsDutiable = 'Y'; // Request Paperless trade $sample->BkgDetails->QtdShp->QtdShpExChrg->SpecialServiceType = 'WY'; $sample->From->CountryCode = 'CA'; $sample->From->Postalcode = 'H3E1B6'; $sample->From->City = 'Montreal'; $sample->To->CountryCode = 'CH'; $sample->To->Postalcode = '1226'; $sample->To->City = 'Thonex'; $sample->Dutiable->DeclaredValue = '100.00'; $sample->Dutiable->DeclaredCurrency = 'CHF'; // Call DHL XML API $start = microtime(true); echo $sample->toXML(); $client = new WebserviceClient('staging'); $xml = $client->call($sample); echo PHP_EOL . 'Executed in ' . (microtime(true) - $start) . ' seconds.' . PHP_EOL; echo $xml . PHP_EOL;