2

Rails 3で開発していて、Savon(savonrb.com)を使用しています

  1. SOAP経由でWebサービスに接続する必要があります
  2. Webサービスには認証が必要

接続できますが、認証を取得できません...

テストにはSOAPUIを使用しましたが、すべて正常に機能します。

Railsコードは次のようになります。

client = Savon::Client.new do
  wsdl.document = "http://services.blahblah.com/Service.asmx?WSDL"
end

client.wsse.credentials "username", "password", :digest

if response.success?

  @soap_status = 'Connected'
  @data = response.to_array(:get_brochure_response, :error_message)

end

応答がありますが、:error_messageが認証に失敗しました...

これがSOAPUIでどのように見えるかです

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ser="http://services.blahblah.com/service">
   <soap:Header>
      <ser:ICEAuthHeader>
         <!--Optional:-->
         <ser:Username>username</ser:Username>
         <!--Optional:-->
         <ser:Password>password</ser:Password>
      </ser:ICEAuthHeader>
   </soap:Header>
   <soap:Body>
      <ser:GetBrochure>
    <!--Optional:-->
         <ser:MappedID>123</ser:MappedID>
      </ser:GetBrochure>
   </soap:Body>
</soap:Envelope>
4

3 に答える 3

1

ユーザー名とパスワードは、SOAP 要求のヘッダーで送信されますか? その場合、Savon クライアントを初期化するときにこれを行うことができます (Savon呼び出しで SOAP ヘッダー パラメータを設定できないを参照)。

client = Savon.client(
    wsdl: SOAP_WSDL,
    endpoint: SOAP_URL,
    soap_header: { :username => username, :password => password }
)

ちなみに、特定の呼び出しのみ認証が必要な場合は、次のように呼び出すことができます。

response = client.call(
    :soap_call,
    :soap_header => { :username => username, :password => password },
    message: {message}
)
于 2014-02-06T12:35:00.047 に答える
0

基本認証を使用して認証するには、これを試すことができます。

client = Savon::Client.new do
  wsdl.document = "http://services.blahblah.com/Service.asmx?WSDL"
  http.auth.basic "username", "password"
end
于 2013-03-14T13:30:02.897 に答える