2

以下の SOAP ドキュメントの作成に問題があります。私も石鹸を使うのは初めてです。いくつかの調査と推奨事項の後、savon が最適なようです。

require 'savon'

client = Savon::Client.new("https://webservice.exacttarget.com/etframework.wsdl")

client.wsdl_soap_actions
# [:create, :retrieve, :update, :delete, :query, :describe, :execute, :perform, :configure, :schedule, :version_info, :extract, :get_system_status]

response = client.retrieve do |soap|
  soap.input = "Retrieve"
  soap.action = "Retrieve"
end

欠落しているセキュリティ ヘッダーで次のエラーが発生しました。

Savon::SOAPFault: (q0:Security) Security requirements are not satisfied because the security header is not present in the incoming message.
 from /home/kj/.rvm/gems/ruby-1.9.2-p0/gems/savon-0.7.9/lib/savon/response.rb:141:in `handle_soap_fault'
 from /home/kj/.rvm/gems/ruby-1.9.2-p0/gems/savon-0.7.9/lib/savon/response.rb:81:in `initialize'
 from /home/kj/.rvm/gems/ruby-1.9.2-p0/gems/savon-0.7.9/lib/savon/client.rb:95:in `new'
 from /home/kj/.rvm/gems/ruby-1.9.2-p0/gems/savon-0.7.9/lib/savon/client.rb:95:in `method_missing'
 from (irb):8
 from /home/kj/.rvm/rubies/ruby-1.9.2-p0/bin/irb:17:in `<main>'

ここに完全な応答を貼り付けました。http://pastie.org/1349438

親切な魂がこれで私を助けてくれますか?

4

5 に答える 5

2

ExactTarget の SOAP 実装はかなり脆弱です。Savon の soap_actions をまったく使用できなくなります。エンベロープの大部分をハッシュとしてハンドコーディングし、ヘッダーに SOAPAction を手動で設定する必要があります。ただし、Savon はエンベロープ ヘッダーから当て推量のほとんどを取り除きます。フィルター サブスクライバーのリストを取得する例を次に示します。

client = Savon::Client.new do | wsdl, http, wsse |
  wsdl.document = 'https://webservice.s4.exacttarget.com/etframework.wsdl'
  wsse.credentials "username", "password"
end

res = client.request :ins0, 'RetrieveRequestMsg' do
  soap.body = {
    'RetrieveRequest' => 
    {
      'ObjectType' => 'Subscriber', 
      'Properties' => ['ID', 'SubscriberKey'],
      :attributes! => 
      {
        'ins0:Filter' => {"xsi:type" => "ins0:SimpleFilterPart"}
      },
      'Filter'     => 
      {
        'Property'   => 'SubscriberKey', 
        'SimpleOperator' => 'like', 
        'Value'          => 'string_to_filter_by'
      }
    }
  }
  http.headers['SOAPAction'] = 'Retrieve'
end

アカウントの種類によっては、wsdl URL から「s4」を削除する必要がある場合もあります。

于 2012-01-25T19:02:16.890 に答える
2

この宝石をチェックしてください:

https://github.com/daws/exact_target_sdk

数日前に出くわして、生活がずっと楽になりました。

于 2012-02-14T15:45:23.433 に答える
1

おそらく、API 資格情報を送信する必要があるだけです。

Savon::WSSE.username = "USERNAME_HERE"
Savon::WSSE.password = "PASSWORD_HERE"

リクエストを行う前に。

于 2010-12-09T05:02:58.013 に答える
0

あるべきですclient.wsdl.soap_actions

于 2011-05-09T15:43:48.280 に答える
0

Bob Briskiの回答は役に立ちましたが、Savonは回答後に更新されたと思います。最新のドキュメントに基づく小さな例を次に示します。

require 'savon'

client = Savon.client(
  wsdl: 'https://webservice.s6.exacttarget.com/etframework.wsdl',
  wsse_auth: [username, password],
  log: false,
  convert_request_keys_to: :camelcase
)

response = client.call(:retrieve, message: {
  retrieve_request: {
    object_type: 'List',
    properties: ['ID', 'List.ListName', 'List.Type', 'List.Category', 'Client.ID']
  }
})
于 2014-02-27T22:09:19.023 に答える