dmeys / php-fedex-api-wrapper
联邦快递网络服务的API包装器
Requires
- php: >=5.4.0
Requires (Dev)
- apigen/apigen: ^4.1
- fzaninotto/faker: ^1.6
- phpunit/phpunit: ^5.7
- squizlabs/php_codesniffer: *
- symfony/console: 2.*
README
此库提供了构建对联邦快递网络服务API请求的流畅接口。
一般信息
在Fedex命名空间下的所有代码都是使用generate-classes-from-wsdls.php脚本来生成的。每个网络服务都有自己的类命名空间。请参阅官方联邦快递网络服务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 = 10; $rateRequest->Version->Minor = 0; $rateRequest->Version->Intermediate = 0; $rateRequest->ReturnTransitAndCommit = true; //shipper $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; $rateRequest->RequestedShipment->ShippingChargesPayment->Payor->AccountNumber = FEDEX_ACCOUNT_NUMBER; $rateRequest->RequestedShipment->ShippingChargesPayment->Payor->CountryCode = 'US'; //rate request types $rateRequest->RequestedShipment->RateRequestTypes = [SimpleType\RateRequestType::_ACCOUNT, 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); var_dump($rateReplyDetail->DeliveryTimestamp); if (!empty($rateReplyDetail->RatedShipmentDetails)) { foreach ($rateReplyDetail->RatedShipmentDetails as $ratedShipmentDetail) { var_dump($ratedShipmentDetail->ShipmentRateDetail->RateType . ": " . $ratedShipmentDetail->ShipmentRateDetail->TotalNetCharge->Amount); } } echo "<hr />"; } } var_dump($rateReply);
更多示例可以在examples文件夹中找到。