FedEx XML API - 如何在没有 SOAP 的情况下打电话?
FedEx XML API - How to call without SOAP?
我正在开发 FedEx API 客户端来处理货件,使用 C#、.NET Core 3.1。如果我使用 SOAP 消息,一切正常,但我想改用普通的 XML 帖子。我已经成功地将此方法用于 DHL API。我不想使用所有 WCF 开销和代码生成,并且发现 SOAP 异常很难处理。文档说 plain XML 应该可以工作,但是我无法在没有 SOAP 信封的情况下使简单的跟踪请求工作,并且文档中没有示例。在 SOAP 信封中包装一个普通的 XML 请求似乎很容易,但实际上对于许多不同的名称空间等以编程方式执行相当复杂。我更愿意让普通的 XML 工作。一些旧帖子说 xml URL 是不同的(最后是 /xml
),但是当前的文档没有提到任何其他 URL 而不是这个:https://wsbeta.fedex.com:443/web-services 并且我也尝试将 /xml
添加到末尾。
这是一个有效的 SOAP 请求:
<?xml version="1.0" encoding="utf-8"?>
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Body>
<TrackRequest xmlns="http://fedex.com/ws/track/v19">
<WebAuthenticationDetail>
<UserCredential>
<Key>MYKEY</Key>
<Password>MYPWD</Password>
</UserCredential>
</WebAuthenticationDetail>
<ClientDetail>
<AccountNumber>510087380</AccountNumber>
<MeterNumber>119194031</MeterNumber>
</ClientDetail>
<TransactionDetail>
<CustomerTransactionId>***Track Request using VC#***</CustomerTransactionId>
</TransactionDetail>
<Version>
<ServiceId>trck</ServiceId>
<Major>19</Major>
<Intermediate>0</Intermediate>
<Minor>0</Minor>
</Version>
<SelectionDetails>
<PackageIdentifier>
<Type>TRACKING_NUMBER_OR_DOORTAG</Type>
<Value>794959156726</Value>
</PackageIdentifier>
</SelectionDetails>
<ProcessingOptions>INCLUDE_DETAILED_SCANS</ProcessingOptions>
</TrackRequest>
</Body>
</Envelope>
这是无法正常工作的 XML:
<?xml version="1.0" encoding="utf-8"?>
<TrackRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://fedex.com/ws/track/v19">
<WebAuthenticationDetail>
<UserCredential>
<Key>MYKEY</Key>
<Password>MYPWD</Password>
</UserCredential>
</WebAuthenticationDetail>
<ClientDetail>
<AccountNumber>510087380</AccountNumber>
<MeterNumber>119194031</MeterNumber>
</ClientDetail>
<TransactionDetail>
<CustomerTransactionId>***Track Request using VC#***</CustomerTransactionId>
</TransactionDetail>
<Version>
<ServiceId>trck</ServiceId>
<Major>19</Major>
<Intermediate>0</Intermediate>
<Minor>0</Minor>
</Version>
<SelectionDetails>
<PackageIdentifier>
<Type>TRACKING_NUMBER_OR_DOORTAG</Type>
<Value>794959156726</Value>
</PackageIdentifier>
</SelectionDetails>
<ProcessingOptions>INCLUDE_DETAILED_SCANS</ProcessingOptions>
</TrackRequest>
对于普通 XML,我收到 SOAP 编码的响应,指出“错误代码 500 内部系统错误。请稍后重试。”
有谁知道让普通 XML 请求正常工作所需的秘密格式?
那个明明xml是对的:我只改了key,password,账号,meter numbers,得到了有效的回复。
确认一下,请求是POST到https://wsbeta.fedex.com:443/xml
(测试环境是url),headers是Accept: image/gif, image/jpeg, image/pjpeg, text/plain, text/html, */*"
和Content-Type: text/xml
,而 body 是您包含的普通 xml(即没有 SOAP 元素)。
我正在开发 FedEx API 客户端来处理货件,使用 C#、.NET Core 3.1。如果我使用 SOAP 消息,一切正常,但我想改用普通的 XML 帖子。我已经成功地将此方法用于 DHL API。我不想使用所有 WCF 开销和代码生成,并且发现 SOAP 异常很难处理。文档说 plain XML 应该可以工作,但是我无法在没有 SOAP 信封的情况下使简单的跟踪请求工作,并且文档中没有示例。在 SOAP 信封中包装一个普通的 XML 请求似乎很容易,但实际上对于许多不同的名称空间等以编程方式执行相当复杂。我更愿意让普通的 XML 工作。一些旧帖子说 xml URL 是不同的(最后是 /xml
),但是当前的文档没有提到任何其他 URL 而不是这个:https://wsbeta.fedex.com:443/web-services 并且我也尝试将 /xml
添加到末尾。
这是一个有效的 SOAP 请求:
<?xml version="1.0" encoding="utf-8"?>
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Body>
<TrackRequest xmlns="http://fedex.com/ws/track/v19">
<WebAuthenticationDetail>
<UserCredential>
<Key>MYKEY</Key>
<Password>MYPWD</Password>
</UserCredential>
</WebAuthenticationDetail>
<ClientDetail>
<AccountNumber>510087380</AccountNumber>
<MeterNumber>119194031</MeterNumber>
</ClientDetail>
<TransactionDetail>
<CustomerTransactionId>***Track Request using VC#***</CustomerTransactionId>
</TransactionDetail>
<Version>
<ServiceId>trck</ServiceId>
<Major>19</Major>
<Intermediate>0</Intermediate>
<Minor>0</Minor>
</Version>
<SelectionDetails>
<PackageIdentifier>
<Type>TRACKING_NUMBER_OR_DOORTAG</Type>
<Value>794959156726</Value>
</PackageIdentifier>
</SelectionDetails>
<ProcessingOptions>INCLUDE_DETAILED_SCANS</ProcessingOptions>
</TrackRequest>
</Body>
</Envelope>
这是无法正常工作的 XML:
<?xml version="1.0" encoding="utf-8"?>
<TrackRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://fedex.com/ws/track/v19">
<WebAuthenticationDetail>
<UserCredential>
<Key>MYKEY</Key>
<Password>MYPWD</Password>
</UserCredential>
</WebAuthenticationDetail>
<ClientDetail>
<AccountNumber>510087380</AccountNumber>
<MeterNumber>119194031</MeterNumber>
</ClientDetail>
<TransactionDetail>
<CustomerTransactionId>***Track Request using VC#***</CustomerTransactionId>
</TransactionDetail>
<Version>
<ServiceId>trck</ServiceId>
<Major>19</Major>
<Intermediate>0</Intermediate>
<Minor>0</Minor>
</Version>
<SelectionDetails>
<PackageIdentifier>
<Type>TRACKING_NUMBER_OR_DOORTAG</Type>
<Value>794959156726</Value>
</PackageIdentifier>
</SelectionDetails>
<ProcessingOptions>INCLUDE_DETAILED_SCANS</ProcessingOptions>
</TrackRequest>
对于普通 XML,我收到 SOAP 编码的响应,指出“错误代码 500 内部系统错误。请稍后重试。”
有谁知道让普通 XML 请求正常工作所需的秘密格式?
那个明明xml是对的:我只改了key,password,账号,meter numbers,得到了有效的回复。
确认一下,请求是POST到https://wsbeta.fedex.com:443/xml
(测试环境是url),headers是Accept: image/gif, image/jpeg, image/pjpeg, text/plain, text/html, */*"
和Content-Type: text/xml
,而 body 是您包含的普通 xml(即没有 SOAP 元素)。