得到错误"包数超过最大值"来自FedEX API

时间:2016-09-06 09:44:48

标签: perl fedex

我得到" FedEx发货错误:(8522)包裹数超过最大数量"错误。我正在尝试向fedEX发送多包裹货件请求,但它仅在第一个包裹请求中失败。

为了向FedEX发送多个货件请求,我们必须为每个包发送单独的请求,主要跟踪信息将从请求的第一个包中返回。然后,将主跟踪信息插入到针对该多包装运输请求的每个附加包的请求中。

以下示例是第一个包裹请求。

以下是我发送给FedEX API" https://wsbeta.fedex.com:443/xml"

的XML请求正文

代码只是准备数据结构,将其转换为XML并使用XML请求命中fedEX API。

my $http_request = HTTP::Request->new('POST', $config->{'URL'});
$http_request->content_type('application/x-www-form-urlencoded');
$http_request->content(Encode::encode_utf8($xml_request_body));

my $http_response;
eval {
    $http_response = $ua->request($http_request);
};
return errorShipResponse($p) if (!defined $http_response || !$http_response->is_success);

my $response;
eval {
    $response = XML::Simple::XMLin(
        $http_response->content,
        ForceArray => 1,
        NSExpand => 1
    );
};

$ xml_request_body

    <?xml version="1.0" encoding="UTF-8"?>
<ProcessShipmentRequest xmlns="http://fedex.com/ws/ship/v12">
   <WebAuthenticationDetail>
      <UserCredential>
         <Key>aaaaaaaaaaa</Key>
         <Password>aaaaaaaaaaaaaaaa</Password>
      </UserCredential>
   </WebAuthenticationDetail>
   <ClientDetail>
      <AccountNumber>111111111</AccountNumber>
      <MeterNumber>111111111111</MeterNumber>
   </ClientDetail>
   <Version>
      <ServiceId>ship</ServiceId>
      <Major>12</Major>
      <Intermediate>0</Intermediate>
      <Minor>0</Minor>
   </Version>
   <RequestedShipment>
      <ShipTimestamp>2016-09-06T06:42:41-04:00</ShipTimestamp>
      <DropoffType>REGULAR_PICKUP</DropoffType>
      <ServiceType>SMART_POST</ServiceType>
      <PackagingType>YOUR_PACKAGING</PackagingType>
      <TotalWeight>
         <Units>LB</Units>
         <Value>15.00</Value>
      </TotalWeight>
      <Shipper>
         <AccountNumber>111111111111</AccountNumber>
         <Tins>
            <TinType>BUSINESS_STATE</TinType>
            <Number444444444444</Number>
         </Tins>
         <Contact>
            <CompanyName>aaaaaaaaaaaa</CompanyName>
            <PhoneNumber>11111111</PhoneNumber>
         </Contact>
         <Address>
            ADDRESS HERE
         </Address>
      </Shipper>
      <Recipient>
         <Contact>
            <PersonName>mukta jain</PersonName>
            <PhoneNumber>1234567899</PhoneNumber>
         </Contact>
         <Address>
            <StreetLines>lwehcfkwdjh</StreetLines>
            <City>NY</City>
            <StateOrProvinceCode>NY</StateOrProvinceCode>
            <PostalCode>12345</PostalCode>
            <CountryCode>US</CountryCode>
            <Residential>true</Residential>
         </Address>
      </Recipient>
      <ShippingChargesPayment>
         <PaymentType>SENDER</PaymentType>
         <Payor>
            <ResponsibleParty>
               <AccountNumber>444444444</AccountNumber>
               <Tins>
                  <TinType>BUSINESS_STATE</TinType>
                  <Number>4444444444</Number>
               </Tins>
               <Contact>
                  <CompanyName>aaaaaaaaa</CompanyName>
                  <PhoneNumber>111111111</PhoneNumber>
               </Contact>
               <Address>
                  <ADDRESS HERE>
               </Address>
            </ResponsibleParty>
         </Payor>
      </ShippingChargesPayment>
      <SmartPostDetail>
         <Indicia>PARCEL_SELECT</Indicia>
         <AncillaryEndorsement>ADDRESS_CORRECTION</AncillaryEndorsement>
         <SpecialServices>USPS_DELIVERY_CONFIRMATION</SpecialServices>
         <HubId>1234</HubId>
         <CustomerManifestId>123456</CustomerManifestId>
      </SmartPostDetail>
      <LabelSpecification>
         <LabelFormatType>COMMON2D</LabelFormatType>
         <ImageType>EPL2</ImageType>
         <LabelStockType>STOCK_4X6</LabelStockType>
      </LabelSpecification>
      <RateRequestTypes>LIST</RateRequestTypes>
      <PackageCount>3</PackageCount>
      <RequestedPackageLineItems>
         <SequenceNumber>1</SequenceNumber>
         <GroupPackageCount>1</GroupPackageCount>
         <Weight>
            <Units>LB</Units>
            <Value>5</Value>
         </Weight>
         <Dimensions>
            <Length>7</Length>
            <Width>7</Width>
            <Height>7</Height>
            <Units>IN</Units>
         </Dimensions>
         <CustomerReferences>
            <CustomerReferenceType>INVOICE_NUMBER</CustomerReferenceType>
            <Value>E2315141</Value>
         </CustomerReferences>
         <CustomerReferences>
            <CustomerReferenceType>CUSTOMER_REFERENCE</CustomerReferenceType>
            <Value>E2315141</Value>
         </CustomerReferences>
      </RequestedPackageLineItems>
   </RequestedShipment>
</ProcessShipmentRequest>

1 个答案:

答案 0 :(得分:1)

你几乎没有给我们任何工作,所以很难得到任何帮助。但是在你的请求体中有一件事似乎很奇怪。假设您向我们展示了Perl数据结构的转储,您的所有标量值都实现为匿名数组似乎很奇怪。例如,定义包计数的行是:

'PackageCount' => [ 3],

我希望看到的地方:

'PackageCount' => 3,

您可以访问一些文档,告诉您这样做,但对我来说这似乎很奇怪。

它还可以解释错误消息,因为数组引用将被解释为一个整数,几乎肯定会远远超过API预期的任何数字!

更新:当我写这个答案时,问题包括看起来像一个大型的Perl数据结构,它展示了我上面讨论的奇怪之处。现在已经更改为似乎具有正确值的XML文档。我不知道原始数据结构的来源或使用方式。并且,在原始海报没有任何反馈的情况下,我不知道这个答案是多么有用。