我需要在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中提供错误的请求。 这些标签有什么区别? 提前谢谢。
答案 0 :(得分:1)
您无需更改标签。它们只是引用您定义的名称空间。你可以自由选择。
我认为你的问题是'Autenticacion'缺少名称空间限定符。在哪个命名空间中定义了标签'Autenticacion'?你需要包括它!我的猜测是它可能在https://pagosinteligentes.com/中定义。 IF 这是正确的,那么你应该写
<pag:Autenticacion>xxx</pag:Autenticacion>
找出的最佳方法是使用SoapUI创建有效请求。如果成功,那么你可以相应地建立你的Savon电话。