UPS配送API - ShipmentConfirmRequest错误

7

你好,我正在使用WooCommerce为客户创建一个WordPress网站。该网站已经完成,但是客户希望能够从shop_order页面创建货运。我已经解决了大部分问题,但是我的UPS API的XML请求出现了问题。我检查了多次,但似乎找不到错误:

<ShipmentConfirmResponse><Response><ResponseStatusCode>0</ResponseStatusCode><ResponseStatusDescription>Failure</ResponseStatusDescription><Error><ErrorSeverity>Hard</ErrorSeverity><ErrorCode>10002</ErrorCode><ErrorDescription>The XML document is well formed but the document is not valid</ErrorDescription></Error></Response></ShipmentConfirmResponse>

以下是我标记敏感信息后的XML标记:

<?xml version="1.0" ?>
<AccessRequest xml:lang='en-US'>
    <AccessLicenseNumber>******</AccessLicenseNumber>
    <UserId>********</UserId>
    <Password>********</Password>
</AccessRequest>
    <?xml version="1.0" ?>
    <ShipConfirmRequest xml:lang='en-US'>
    <Request>
    <TransactionReference>
        <CustomerContext>Customer Context</CustomerContext>
        <XpciVersion>1.0</XpciVersion>
    </TransactionReference>
     <RequestAction>ShipConfirm</RequestAction>
     <RequestOption>validate</RequestOption>
 </Request>
 <Shipment>
     <Shipper>
        <ShipperNumber>*******</ShipperNumber>
         <Name>Canyon Werks, LLC</Name>
         <Address>
             <AddressLine>2941 Brookspark Drive</AddressLine>
            <AddressLine></AddressLine>
            <City>North Las Vegas</City>
            <StateProvinceCode>NV</StateProvinceCode>
            <PostalCode>89030</PostalCode>
            <CountryCode>US</CountryCode>
        </Address>
        <Phone>
            <Number>7022552222</Number>
        </Phone>
    </Shipper>
    <ShipTo>
        <Name>Justin Walker</Name>
        <Address>
            <AddressLine>2675 Windmill Pkwy</AddressLine>
            <AddressLine>3024</AddressLine>
            <City>Henderson</City>
            <StateProvinceCode>NV</StateProvinceCode>
            <PostalCode>89074</PostalCode>
            <CountryCode>US</CountryCode>
        </Address>
        <Phone>
            <Number>7024609485</Number>
        </Phone>
    </ShipTo>
    <ShipFrom>
        <Name>Canyon Werks, LLC</Name>
        <Address>
            <AddressLine>2941 Brookspark Drive</AddressLine>
            <AddressLine></AddressLine>
            <City>North Las Vegas</City>
            <StateProvinceCode>NV</StateProvinceCode>
            <PostalCode>89030</PostalCode>
            <CountryCode>US</CountryCode>
        </Address>
        <Phone>
            <Number>7022552222</Number>
        </Phone>
    </ShipFrom>
    <PaymentInformation>
        <ShipmentCharge>
            <Type>01</Type>
            <BillShipper>
                <AccountNumber>*******</AccountNumber>
            </BillShipper>
        </ShipmentCharge>
    </PaymentInformation>
    <Service>
        <Code>03</Code>
    </Service>
    <Package>
        <Packaging>
            <Code>02</Code>
            <Description>Customer Supplied</Description>
        </Packaging>
        <Dimensions>
            <UnitOfMeasurement>
                <Code>IN</Code>
            </UnitOfMeasurement>
            <Length>16</Length>
            <Width>12</Width>
            <Height>6</Height>
        </Dimensions>
        <PackageWeight>
            <UnitOfMeasurement>
                <Code>LBS</Code>
            </UnitOfMeasurement>
            <Weight>6.07</Weight>
        </PackageWeight>
    </Package>
</Shipment>
<LabelSpecification>
    <LabelImageFormat>
        <Code>GIF</Code>
    </LabelImageFormat>
</LabelSpecification>
</ShipConfirmRequest>

我已经接近成功了,但是我被卡在这个路障上了。如果有人能给我提供一些帮助,我将不胜感激。


3
你的示例包含两个XML文档而不是一个。有两个 <?xml version="1.0" ?> - 这是无效的。 - ThW
有人找到了解决方法吗? - Ani
尽管看起来很奇怪,但这是UPS标准。[叹气] 把它当作进一步惊喜的预兆吧。他们必须先进行某种类型的预处理。 - Mustapha George
@MustaphaGeorge:你能提供一下参考资料吗?我试图从他们的文档中找到这个裸请求格式,但迄今为止还没有找到。在规范中给这个东西一些依据会很好。 - hakre
2个回答

4

这是服务代码容器,必须包含在程序包容器中。我之前没有加入它,花了很长时间才发现是我的愚蠢错误。

之前:

...
<Service>
    <Code>03</Code>
</Service>
<Package>
    ...

之后:

...
<Package>
    <Service>
        <Code>03</Code>
    </Service>
    ...

感谢您的帮助,是的UPS需要一种奇怪的XML格式。

根据UPS文档,“Before”部分是正确的,而不是“After”部分。<Service> <Code>01</Code> </Service> <Package> <PackagingType> ..... - Zdeněk Bednařík

-3

XML处理指令出现了两次:

<?xml version="1.0" ?>

这表示存在两个不同的XML文档:

<?xml version="1.0" ?>
<AccessRequest xml:lang='en-US'>
  <AccessLicenseNumber>******</AccessLicenseNumber>
  <UserId>********</UserId>
  <Password>********</Password>
</AccessRequest>

并且

<?xml version="1.0" ?>
<ShipConfirmRequest xml:lang='en-US'>
  <Request>
    <TransactionReference>
      <CustomerContext>Customer Context</CustomerContext>
      <XpciVersion>1.0</XpciVersion>
    </TransactionReference>
    <RequestAction>ShipConfirm</RequestAction>
    <RequestOption>validate</RequestOption>
  </Request>
  <!-- ... -->
</ShipConfirmRequest>

6
尽管在其他情境下这个答案可能是正确的,但在 UPS 发货 API 的情境下却是不正确的。信不信由你,UPS API 真的需要请求以如此糟糕的 XML 形式组成(不要问我为什么)。 - Tim Burch
@TimBurch 我同意你的关注。 - A.Goutam
很奇怪,我知道我也有格式问题。我最终解决了它,只是因为我尝试得太努力了...哈哈。 - Jusmark123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接