【发布时间】:2019-09-11 07:09:49
【问题描述】:
我正在尝试与 SOAP API https://www.flussituristici.servizirl.it/Turismo5/app/ws/checkinV1?wsdl 通信
使用 Savon gem。
到目前为止,我已经实现了以下代码:
def client
client = Savon.client(
wsdl: "https://www.flussituristici.servizirl.it/Turismo5/app/ws/checkinV1?wsdl",
host: "https://www.flussituristici.servizirl.it/Turismo5/app/ws/checkinV1",
soap_header: { 'Authorization:' => "Basic #{Base64.strict_encode64("username: password")}"},
log: true,
pretty_print_xml: true
)
client.call(:invia_movimentazione, message: message, soap_action: '')
end
def message
{
movimenti:
{
codice: "S00352",
prodotto: "XXXXX",
movimento:
[
{
data: "20190911",
struttura:
{
apertura: "SI",
camereoccupate: "10",
cameredisponibili: "16",
lettidisponibili: "34"
}
},
{
data: "20190911",
struttura:
{
apertura: "SI",
camereoccupate: "9",
cameredisponibili: "16",
lettidisponibili: "34"
}
}
]
}
}
end
但我收到以下错误响应:
D, [2019-09-11T06:45:28.544608 #12024] DEBUG -- : HTTPI /peer GET request to www.flussituristici.servizirl.it (net_http)
I, [2019-09-11T06:45:29.557382 #12024] INFO -- : SOAP request: https://www.flussituristici.servizirl.it/Turismo5/app/ws/checkinV1
I, [2019-09-11T06:45:29.562181 #12024] INFO -- : SOAPAction: "", Content-Type: text/xml;charset=UTF-8, Content-Length: 925
D, [2019-09-11T06:45:29.576008 #12024] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://checkin.ws.service.turismo5.gies.it/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header>
<Authorization:>Basic TUk0OTg1231d01kTmNXKkp2N3I123</Authorization:>
</env:Header>
<env:Body>
<tns:inviaMovimentazione>
<movimenti>
<codice>S00352</codice>
<prodotto>XXXXX</prodotto>
<movimento>
<data>20190911</data>
<struttura>
<apertura>SI</apertura>
<camereoccupate>10</camereoccupate>
<cameredisponibili>16</cameredisponibili>
<lettidisponibili>34</lettidisponibili>
</struttura>
</movimento>
<movimento>
<data>20190911</data>
<struttura>
<apertura>SI</apertura>
<camereoccupate>9</camereoccupate>
<cameredisponibili>16</cameredisponibili>
<lettidisponibili>34</lettidisponibili>
</struttura>
</movimento>
</movimenti>
</tns:inviaMovimentazione>
</env:Body>
</env:Envelope>
D, [2019-09-11T06:45:29.580471 #12024] DEBUG -- : HTTPI /peer POST request to www.flussituristici.servizirl.it (net_http)
I, [2019-09-11T06:45:30.455910 #12024] INFO -- : SOAP response (status 500)
D, [2019-09-11T06:45:30.457178 #12024] DEBUG -- : <?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Error reading XMLStreamReader: Unexpected character '>' (code 62) (expected a name start character)
at [row,col {unknown-source}]: [1,289]</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Savon::SOAPFault: (soap:Client) Error reading XMLStreamReader: Unexpected character '>' (code 62) (expected a name start character)
at [row,col {unknown-source}]: [1,289]
from /usr/local/rvm/gems/ruby-2.0.0-p648/gems/savon-2.11.2/lib/savon/response.rb:85:in `raise_soap_and_http_errors!'
这个错误说明了什么?如何调试?
更新: 初始化 Savon 客户端时出现问题,文档说我需要像以前一样发送 Base43 编码的“用户名”:“密码”,但只需发送用户名和密码,如下所示。
def client
client = Savon.client(
wsdl: END_POINT,
basic_auth: ["username", "password"],
log: true,
pretty_print_xml: true
)
client.call(:invia_movimentazione, message: message, soap_action: '')
end
【问题讨论】:
标签: ruby-on-rails ruby api soap savon