在Ruby on Rails中使用webservice,如何更改XML标签和身份验证?

时间:2014-04-08 21:50:56

标签: ruby-on-rails authentication soap savon

我需要在Ruby on Rails中使用带有身份验证的Web服务。成功的沟通是:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"     xmlns:pag="https://pagosinteligentes.com/">
       <soapenv:Header>
          <pag:Autenticacion>
             <!--Optional:-->
         <pag:User>aUser</pag:User>
         <!--Optional:-->
         <pag:Password>aPassword</pag:Password>
      </pag:Autenticacion>
     </soapenv:Header>
      <soapenv:Body>
         <pag:UserCheck>
            <!--Optional:-->
             <pag:account>anAccount</pag:account>
             <!--Optional:-->
             <pag:user>aUser</pag:user>
          </pag:UserCheck>
      </soapenv:Body>
   </soapenv:Envelope>

它有一个用于身份验证的标头(Autenticacion,西班牙语)和一个带帐户和用户的正文。 我有:

  WSDL_URL = 'https://dev.pagosinteligentes.com/webservices/AMS/MovementsCardSWV1.asmx?WSDL'

realm = Base64.strict_encode64("aUser:aPassword")
client = Savon.client(wsdl: WSDL_URL,
                          soap_header: { 'Autenticacion:' => "Basic #{realm}"},
                          log: true, # set true to switch on logging
                          log_level: :debug,
                          pretty_print_xml: true)

    response = client.call(:user_check, message: {"account" => "anAccount", "user" => "aUser"})

    print response

我的输出是:

<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="https://pagosinteligentes.com/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
  <env:Header>
    <Autenticacion:>Basic V1NQcnVlYmE6MTIzNDU2</Autenticacion:>
  </env:Header>
  <env:Body>
    <tns:UserCheck>
      <tns:account>anAccount</tns:account>
      <tns:user>aUser</tns:user>
    </tns:UserCheck>
  </env:Body>
</env:Envelope>

如何更改<env:的{​​{1}}标签和<soapenv:的{​​{1}}?

即使确实更改了标签,但身份验证仍无法正常运行,因为此代码:

<tns:

在SoapUI中提供错误的请求。 这些标签有什么区别? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

您无需更改标签。它们只是引用您定义的名称空间。你可以自由选择。

我认为你的问题是'Autenticacion'缺少名称空间限定符。在哪个命名空间中定义了标签'Autenticacion'?你需要包括它!我的猜测是它可能在https://pagosinteligentes.com/中定义。 IF 这是正确的,那么你应该写

<pag:Autenticacion>xxx</pag:Autenticacion>

找出的最佳方法是使用SoapUI创建有效请求。如果成功,那么你可以相应地建立你的Savon电话。