【发布时间】:2021-04-15 22:08:42
【问题描述】:
我在从 UPS 的 Tracking API 获得响应时遇到了一些问题。
我编写了一个 VBA 脚本,它返回以下 XML 字符串并将其发送到 UPS 的 XML 跟踪测试服务器 (https://wwwcie.ups.com/ups.app/xml/Track)。跟踪号是测试号。
<?xml version="1.0"?><AccessRequest xml:lang="en-US"><AccessLicenseNumber>* MY KEY *</AccessLicenseNumber><UserId>* MY LOGIN *</UserId><Password>* MY PASSWORD *</Password></AccessRequest><?xml version="1.0"?><TrackRequest xml:lang="en-US"><Request><TransactionReference><CustomerContext>Test Case Summary Description</CustomerContext><ToolVersion>1.0</ToolVersion></TransactionReference><RequestAction>Track</RequestAction><RequestOption>1</RequestOption></Request><TrackingNumber>1Z12345E0291980793</TrackingNumber></TrackRequest>
为了便于阅读,我在这里对其进行了格式化:
<?xml version="1.0"?>
<AccessRequest xml:lang="en-US">
<AccessLicenseNumber>* MY KEY *</AccessLicenseNumber>
<UserId>* MY LOGIN *</UserId>
<Password>* MY PASSWORD *</Password>
</AccessRequest>
<?xml version="1.0"?>
<TrackRequest xml:lang="en-US">
<Request>
<TransactionReference>
<CustomerContext>Test Case Summary Description</CustomerContext>
<ToolVersion>1.0</ToolVersion>
</TransactionReference>
<RequestAction>Track</RequestAction>
<RequestOption>1</RequestOption>
</Request>
<TrackingNumber>1Z12345E0291980793</TrackingNumber>
</TrackRequest>
这实际上是他们在开发人员指南中提供的示例 XML 的派生,但它始终返回以下错误:
<?xml version="1.0"?>
<TrackResponse>
<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>
</TrackResponse>
我已多次看到此帖子,大多数人都遗漏了一些小错误或愚蠢的错误,但我已经经历过几次并尝试了许多不同的衍生产品,但它尚未返回正确的响应。我已经阅读了开发人员指南并仔细检查了所有必需的请求是否存在且正确。我希望有人能指出我的错误,因为我已经开始绕圈子了。
非常感谢!
【问题讨论】:
-
如果其他人为此苦苦挣扎,我发现我的 XML 毕竟不是问题所在。 VBA 不允许(并且正确地)允许您将 XML 对象附加到 XML 对象。 UPS 的怪异系统意味着您需要在使用 HTTP 对象 I.E 发送请求时加入它们:myHTTP.send (AccessRequestXml.XML & TrackingRequestXml.XML)