【问题标题】:PHP / DHL Soap Web servicePHP / DHL 肥皂网络服务
【发布时间】:2021-07-29 22:32:18
【问题描述】:

我在使用 DHL Soap Web 服务时遇到问题。

我正在尝试使用基本 Web 服务 (getRateRequest) 创建测试请求,但总是收到有关身份验证的错误。

我认为问题与服务所需的 Soap 基本身份验证有关, 我尝试了不同的方法来完成身份验证,但都没有成功。

这是我的一些测试。

测试 1 - SoapClient 设置中的身份验证

$options = array(
  'location' => $endpoint, 
  'login' => $userName,
  'password' => $password,
  'soap_version' => SOAP_1_1,
  'trace' => 1,
  'encoding' => 'utf-8',
  'stream_context' => stream_context_create(['header'=> "Content-Type:text/xml"]),
);  

$client = new SoapClient("https://wsbexpress.dhl.com:443/sndpt/expressRateBook?WSDL", $options);

并使用__soapCall 发送请求,传递soap 方法和一个包含所有参数的数组。

测试 2 - XML 请求中的身份验证(我不知道这是否可以使用 Soap)

<soapenv:Header>
     <wsse:Security soapenv:mustunderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <wsse:UsernameToken wsu:id="UsernameToken-5" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">   
            <wsse:Username>'.$userName.'</wsse:Username>           
            <wsse:Password type="PasswordText">'.$password.'</wsse:Password>
            <wsse:Nonce encodingtype="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">eUYebYfsjztETJ4Urt8AJw==</wsse:Nonce>
            <wsu:Created>' . date('Y-m-d H:i:s') . '</wsu:Created>
         </wsse:UsernameToken>
      </wsse:Security>
   <soapenv:Header/>

并在 post 中使用带有 XML 的 CURL 发送请求。

我认为最好的方法是测试 1,但总是收到有关未授权用户的错误。 当然,我的凭据很好,因为我可以使用 SoapUI 等外部工具测试 Soap 服务。我只是觉得我的身份验证错了。

提前谢谢你

【问题讨论】:

  • 我无法帮助您解决确切的问题,因为他们的 API 已被锁定(据我所知),但根据他们的 publicly available documentation,SOAP API 是一个遗留的 API。你能切换到更现代的,比如 REST 吗?经历了 SOAP 时代,我个人发现 REST 更容易处理。

标签: php soap soap-client dhl


【解决方案1】:

我认为你混淆了一些东西。一开始您提到Basic Authentication,但随后您的XML 示例显示a WS-Security header。 Web 服务使用哪一个?

loginpassword 选项仅适用于基本身份验证,正如 SoapClient documentation 所说。但是,如果您的服务需要 Ws-Security 作为 SOAP 标头,那么这将不起作用。

为了使用 Ws-Security,您需要扩展您的 SoapClient 以发送它,因为 SoapClient 不支持开箱即用的 WS-Security。例如:

【讨论】:

  • 哦,是的!那是工作!太感谢了!我一直很困惑,因为我以前从未使用过肥皂,当我可以选择时,我更喜欢休息方式:)
  • 答案是 WS-Security 所以我发现这个链接对 PHP SoapClient 的 WS-Security 很有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 2011-06-11
相关资源
最近更新 更多