octolize / php-fedex-api-wrapper
Fedex 网络服务 API 包装器
Requires
- php: >=7.3|>=8.0|>=8.1
- ext-soap: *
Requires (Dev)
- ext-simplexml: *
- fakerphp/faker: ^1.16
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.5
- symfony/console: ^5.2
README
这个库提供了一种流畅的接口,用于构建 FedEx 网络服务 API 的请求。
一般信息
在 FedEx
命名空间下的所有代码都是使用 generate-classes-from-wsdls.php 脚本生成的。每个网络服务都有自己的类命名空间。请参阅 FedEx 网络服务 API 的官方文档,了解这些服务。
- 地址验证服务
- 关闭服务
- 快递派送服务
- 位置服务
- 包裹移动信息服务
- 取件服务
- 计费服务
- 退货标签服务
- 运输服务
- 跟踪服务
- 上传文件服务
- 开放运输服务
- 验证可用性和承诺服务
- 异步事务服务
- 在途运输服务
- DGLD 服务
- DGDS 服务
安装
composer require jeremy-dunn/php-fedex-api-wrapper
使用库
开始构建网络服务请求的最简单方法是创建一个用于您希望使用的特定服务的新的 Request
对象,然后通过注入完成请求所需的必要对象反向工作。
例如,如果我们想获取运费率,我们将创建一个新的 FedEx\RateService\Request 实例,并调用 getGetRatesReply() 方法。此方法需要一个 FedEx\RateService\ComplexType\RateRequest 实例,它本身需要一个 FedEx\RateService\ComplexType\RequestedShipment 实例,FedEx\RateService\ComplexType\TransactionDetail 实例,FedEx\RateService\ComplexType\WebAuthenticationDetail 实例,FedEx\RateService\ComplexType\ClientDetail 实例,等等。下面是一个示例。
计费服务请求示例
这假设在您的应用程序中已经预先定义了 FEDEX_KEY
、FEDEX_PASSWORD
、FEDEX_ACCOUNT_NUMBER
和 FEDEX_METER_NUMBER
。另外请注意,默认情况下,库将使用测试服务器(wsbeta.fedex.com)。要使用生产服务器(ws.fedex.com),请设置从 Request 返回的 \SoapClient
上的位置。下面是如何做到这一点的示例。
use FedEx\RateService\Request; use FedEx\RateService\ComplexType; use FedEx\RateService\SimpleType; $rateRequest = new ComplexType\RateRequest(); //authentication & client details $rateRequest->WebAuthenticationDetail->UserCredential->Key = FEDEX_KEY; $rateRequest->WebAuthenticationDetail->UserCredential->Password = FEDEX_PASSWORD; $rateRequest->ClientDetail->AccountNumber = FEDEX_ACCOUNT_NUMBER; $rateRequest->ClientDetail->MeterNumber = FEDEX_METER_NUMBER; $rateRequest->TransactionDetail->CustomerTransactionId = 'testing rate service request'; //version $rateRequest->Version->ServiceId = 'crs'; $rateRequest->Version->Major = 24; $rateRequest->Version->Minor = 0; $rateRequest->Version->Intermediate = 0; $rateRequest->ReturnTransitAndCommit = true; //shipper $rateRequest->RequestedShipment->PreferredCurrency = 'USD'; $rateRequest->RequestedShipment->Shipper->Address->StreetLines = ['10 Fed Ex Pkwy']; $rateRequest->RequestedShipment->Shipper->Address->City = 'Memphis'; $rateRequest->RequestedShipment->Shipper->Address->StateOrProvinceCode = 'TN'; $rateRequest->RequestedShipment->Shipper->Address->PostalCode = 38115; $rateRequest->RequestedShipment->Shipper->Address->CountryCode = 'US'; //recipient $rateRequest->RequestedShipment->Recipient->Address->StreetLines = ['13450 Farmcrest Ct']; $rateRequest->RequestedShipment->Recipient->Address->City = 'Herndon'; $rateRequest->RequestedShipment->Recipient->Address->StateOrProvinceCode = 'VA'; $rateRequest->RequestedShipment->Recipient->Address->PostalCode = 20171; $rateRequest->RequestedShipment->Recipient->Address->CountryCode = 'US'; //shipping charges payment $rateRequest->RequestedShipment->ShippingChargesPayment->PaymentType = SimpleType\PaymentType::_SENDER; //rate request types $rateRequest->RequestedShipment->RateRequestTypes = [SimpleType\RateRequestType::_PREFERRED, SimpleType\RateRequestType::_LIST]; $rateRequest->RequestedShipment->PackageCount = 2; //create package line items $rateRequest->RequestedShipment->RequestedPackageLineItems = [new ComplexType\RequestedPackageLineItem(), new ComplexType\RequestedPackageLineItem()]; //package 1 $rateRequest->RequestedShipment->RequestedPackageLineItems[0]->Weight->Value = 2; $rateRequest->RequestedShipment->RequestedPackageLineItems[0]->Weight->Units = SimpleType\WeightUnits::_LB; $rateRequest->RequestedShipment->RequestedPackageLineItems[0]->Dimensions->Length = 10; $rateRequest->RequestedShipment->RequestedPackageLineItems[0]->Dimensions->Width = 10; $rateRequest->RequestedShipment->RequestedPackageLineItems[0]->Dimensions->Height = 3; $rateRequest->RequestedShipment->RequestedPackageLineItems[0]->Dimensions->Units = SimpleType\LinearUnits::_IN; $rateRequest->RequestedShipment->RequestedPackageLineItems[0]->GroupPackageCount = 1; //package 2 $rateRequest->RequestedShipment->RequestedPackageLineItems[1]->Weight->Value = 5; $rateRequest->RequestedShipment->RequestedPackageLineItems[1]->Weight->Units = SimpleType\WeightUnits::_LB; $rateRequest->RequestedShipment->RequestedPackageLineItems[1]->Dimensions->Length = 20; $rateRequest->RequestedShipment->RequestedPackageLineItems[1]->Dimensions->Width = 20; $rateRequest->RequestedShipment->RequestedPackageLineItems[1]->Dimensions->Height = 10; $rateRequest->RequestedShipment->RequestedPackageLineItems[1]->Dimensions->Units = SimpleType\LinearUnits::_IN; $rateRequest->RequestedShipment->RequestedPackageLineItems[1]->GroupPackageCount = 1; $rateServiceRequest = new Request(); //$rateServiceRequest->getSoapClient()->__setLocation(Request::PRODUCTION_URL); //use production URL $rateReply = $rateServiceRequest->getGetRatesReply($rateRequest); // send true as the 2nd argument to return the SoapClient's stdClass response. if (!empty($rateReply->RateReplyDetails)) { foreach ($rateReply->RateReplyDetails as $rateReplyDetail) { var_dump($rateReplyDetail->ServiceType); if (!empty($rateReplyDetail->RatedShipmentDetails)) { foreach ($rateReplyDetail->RatedShipmentDetails as $ratedShipmentDetail) { var_dump($ratedShipmentDetail->ShipmentRateDetail->RateType . ": " . $ratedShipmentDetail->ShipmentRateDetail->TotalNetCharge->Amount); } } echo "<hr />"; } } var_dump($rateReply);
更多示例可以在 examples 文件夹中找到。