使用Delphi调用UPS包裹跟踪Web服务?

时间:2010-02-02 05:46:52

标签: web-services delphi soap delphi-2009 jax-ws

Delphi 2009没有任何错误导入UPS WSDL,我设法使用我的帐户信息和示例包裹ID调用Web服务。服务器的响应是:

<detail>
  <err:Errors xmlns:err="http://www.ups.com/XMLSchema/XOLTWS/Error/v1.1">
    <err:ErrorDetail>
      <err:Severity>Hard</err:Severity>
      <err:PrimaryErrorCode>
        <err:Code>9150002</err:Code>
        <err:Description>Invalid or missing inquiry number - TrackingNumber, ShipmentIdentificationNumber, or ReferenceNumber</err:Description>
      </err:PrimaryErrorCode>
    </err:ErrorDetail>
  </err:Errors>
</detail>

有人已经成功使用了Delcel客户端的UPS Parcel Tracking网络服务,并知道出了什么问题吗?

以下是客户端代码:

var
  Service: TrackPortType;
  MyRequest: TrackRequest;
  Security: UPSSecurity;
  MyResponse: TrackResponse;
  ReqOpt: Array_Of_string;
begin
  Service := (HTTPRIO1 as TrackPortType);

  Security := UPSSecurity.Create;
  Security.UsernameToken := UsernameToken.Create;
  Security.UsernameToken.Username := 'username';
  Security.UsernameToken.Password := 'password';
  Security.ServiceAccessToken := ServiceAccessToken.Create;
  Security.ServiceAccessToken.AccessLicenseNumber := 'licensenumber';

  MyRequest := TrackRequest.Create;
  SetLength(ReqOpt, 1);
  ReqOpt[0] := '0';
  MyRequest.Request := Request.Create;
  MyRequest.Request.RequestOption := ReqOpt;
  MyRequest.TrackingOption := '02';
  MyRequest.InquiryNumber := '1Z...'; 

  try
    (Service as ISoapHeaders).Send(Security);
    MyResponse := Service.ProcessTrack(MyRequest, nil);
  except
    on E:ERemotableException do
    begin
      Memo1.Lines.Text := FormatXmlData(E.FaultDetail);
    end;    
  end;

1 个答案:

答案 0 :(得分:0)

使用Java API for XML Web ServicesJAX-WS)解决了问题。

为了与Delphi集成,我将其代理为Intranet Servlet。然后,Delphi GUI应用程序可以使用简单的HTTP请求来查询跟踪状态。

更新:在第二次尝试让它在Delphi中工作时,我硬编码了SOAP XML请求体,并使用了Indy和XMLDocument而不是Delphi SOAP库。