У меня есть работающий запрос на получение расценок на мои отправления с использованием стандартных тарифов Fedex, но я хочу использовать специальную опцию Fedex One Rate, чтобы получить их фиксированные расценки.
К сожалению, их пример кода не показывает, как указать, что запрос на ставку должен использовать Fedex One Rate, и я совершенно не смог мысленно проанализировать xml-блевотину, которая является WSDL. Я пробовал несколько различных структур массива для передачи (что я предполагаю) являются правильными переменными, но ничего не работает.
Я сгенерировал две HTML-версии WSDL, используя сторонние генераторы (ни один из них не очень полезен, но, возможно, вы можете читать их лучше, чем я).
Первый включает непосредственно wsdl с типами данных, связанными с их определениями: http://inadaydevelopment.com/stackoverflow/fedex/RateService_v16.html
Второй более простой, он просто обеспечивает более линейную иерархию с допустимыми значениями на каждом уровне: http://inadaydevelopment.com/stackoverflow/fedex/RateService_v16_other.html
Насколько я могу судить, есть два способа/места, которыми я могу заявить, что я хочу, чтобы в моей котировке использовалась Единая ставка:
1) $request['VariableOptions'] = 'FEDEX_ONE_RATE';
а также
2) $request['RequestedShipment']['SpecialServicesRequested'] = array(
'SpecialServiceTypes' => array('FEDEX_ONE_RATE')
);
Когда я использую (1), я получаю ответ об успехе, который включает в себя список цен, но это не цены One Rate. Это стандартные цены.
Когда я использую (2), я получаю ответ об ошибке:
stdClass Object
(
[HighestSeverity] => WARNING
[Notifications] => stdClass Object
(
[Severity] => WARNING
[Source] => crs
[Code] => 556
[Message] => There are no valid services available.
[LocalizedMessage] => There are no valid services available.
)
[TransactionDetail] => stdClass Object
(
[CustomerTransactionId] => *** Service Availability Request v5.1 using PHP ***
)
[Version] => stdClass Object
(
[ServiceId] => crs
[Major] => 16
[Intermediate] => 0
[Minor] => 0
)
)
Если я использую и (1), и (2), то я получаю сообщение об ошибке (2), а также дополнительное предупреждение о том, что я указал одну скорость двумя разными способами и что (2) собирается переопределить (1).
Вот мой полный массив запросов:
array (
'WebAuthenticationDetail' =>
array (
'UserCredential' =>
array (
'Key' => 'xxx',
'Password' => 'xxx',
),
),
'ClientDetail' =>
array (
'AccountNumber' => 'xxx',
'MeterNumber' => 'xxx',
),
'TransactionDetail' =>
array (
'CustomerTransactionId' => ' *** Service Availability Request v5.1 using PHP ***',
),
'Version' =>
array (
'ServiceId' => 'crs',
'Major' => '16',
'Intermediate' => '0',
'Minor' => '0',
),
'ReturnTransitAndCommit' => true,
'RequestedShipment' =>
array (
'DropoffType' => 'STATION',
'ShipTimestamp' => '2015-06-14T14:13:46-07:00',
'Shipper' =>
array (
'Contact' =>
array (
'PersonName' => 'Kenny Wyland',
'CompanyName' => 'K2 Cashflow',
'PhoneNumber' => 'xxxxxxxxxx',
),
'Address' =>
array (
'StreetLines' =>
array (
0 => 'xxxx E xxxxx St',
),
'City' => 'Long Beach',
'StateOrProvinceCode' => 'CA',
'PostalCode' => '90805',
'CountryCode' => 'US',
),
),
'Recipient' =>
array (
'Contact' =>
array (
'PersonName' => 'Bob Smith',
'PhoneNumber' => 'xxx-xxx-xxxx',
),
'Address' =>
array (
'StreetLines' =>
array (
0 => 'xxxxx xxxxxxx Rd',
),
'City' => 'Corona',
'StateOrProvinceCode' => 'CA',
'PostalCode' => '92883',
'CountryCode' => 'US',
'Residential' => true,
),
),
'ShippingChargesPayment' =>
array (
'PaymentType' => 'SENDER',
'Payor' =>
array (
'ResponsibleParty' =>
array (
'AccountNumber' => 'xxxx',
'Contact' => NULL,
'Address' =>
array (
'CountryCode' => 'US',
),
),
),
),
'PackageCount' => '1',
'RequestedPackageLineItems' =>
array (
0 =>
array (
'SequenceNumber' => 1,
'GroupPackageCount' => 1,
'Weight' =>
array (
'Value' => 0.01,
'Units' => 'LB',
),
),
),
'SpecialServicesRequested' =>
array (
'SpecialServiceTypes' =>
array (
0 => 'FEDEX_ONE_RATE',
),
),
),
)