坚持将xml请求转换为相应的Savon请求

时间:2016-10-29 14:20:11

标签: php ruby xml soap savon

我正在尝试与第三方API进行通信。我尝试了savon和Soap UI但都失败了,然后我问他们,他们给了我相同的功能。困惑的是,我切换了记录器并得到了以下XML请求,这与Savon发送的内容完全不同。 这是PHP代码(我想这不是必需的,但仍然是)

$apiauth =array('UserName'=>'XXXXXX','Password'=>'XXXXXXX','ClientCode'=>'1234')      
   $wsdl = 'http://stagewebapi.mylescars.com/service.asmx?wsdl';

    $soap = new SoapClient($wsdl);
    $header = new SoapHeader('http://tempuri.org/', 'AuthHeader', $apiauth);
    $soap->__setSoapHeaders($header);             
    $data = $soap->fetchCities($header);

    print_r($data);

这是PHP发送的XML请求,它正常工作

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"><SOAP-ENV:Header><ns1:AuthHeader><ns1:UserName>XXXXXXX</ns1:UserName><ns1:Password>XXXXXXX</ns1:Password><ns1:ClientCode>1234</ns1:ClientCode></ns1:AuthHeader></SOAP-ENV:Header><SOAP-ENV:Body><ns1:fetchCities/></SOAP-ENV:Body></SOAP-ENV:Envelope>

到目前为止,这是我的ruby代码

require 'savon'

auth_header = { 'UserName'=>'XXXXXXX','Password'=>'XXXXXXXX','ClientCode'=>'1234'}
client = Savon.client(:wsdl  => "http://stagewebapi.mylescars.com/service.asmx?wsdl",
        :namespace_identifier => :ns1 ,:namespace => "http://tempuri.org/" , :log => true, :soap_header => auth_header,
                     :pretty_print_xml => true, :env_namespace => 'SOAP-ENV')


puts client.call(:fetch_cities)

这是Savon正在制作的作品

<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://tempuri.org/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
  <soap-env:Header>
    <UserName>XXXXXXXXXXXXXXX</UserName>
    <Password>XXXXXXXXXXXXX</Password>
    <ClientCode>2873</ClientCode>
  </soap-env:Header>
  <soap-env:Body>
    <ns1:fetchCities/>
  </soap-env:Body>
</soap-env:Envelope>

我不知道如何使它等同于PHP。我错过了一些明显的东西吗?

我试着查看Savon文档,找出是否有一些方法来操纵带有细粒度控制的标签,但是找不到它。

与此类似的问题要么未得到答复,要么特定于请求。

一些SO问题有点帮助

有点好奇,PHP大部分时间都是如此。它是用于wsdl的解析器吗?

0 个答案:

没有答案
相关问题