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 元素)。