2010-12-05 5 views
2

Ich habe Probleme bei der Erstellung meiner Seife Dokument für die folgenden. Dies ist auch mein erstes Mal mit Seife. Nach einigen Recherchen und Empfehlungen scheint Savon der richtige Weg zu sein.mit Savon mit exacttarget Web-Service

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 

Ich habe den folgenden Fehler auf einem Sicherheitsheader, der fehlt.

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>' 

Ich habe die vollständige Antwort hier eingefügt. http://pastie.org/1349438

Könnte irgendeine Seele mir dabei helfen?

Antwort

1

Sie müssen wahrscheinlich nur in Ihren API-Anmeldeinformationen senden:

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

vor Anfragen.

0

Ist sollte client.wsdl.soap_actions

2

Exacttarget der SOAP-Implementierung sein ziemlich schwach ist. Du kannst Savons soap_actions überhaupt nicht verwenden. Sie müssen den größten Teil des Umschlags als Hash manuell codieren und die SOAPAction in der Kopfzeile manuell festlegen. Savon nimmt das meiste Rätselraten jedoch aus dem Umschlag heraus. Hier ist ein Beispiel für eine Liste von Filter Abonnent ziehen:

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 

Sie auch benötigen, um die „s4“ aus der WSDL-URL zu entfernen, auf Ihrem Kontotyp abhängig.

0

Ich fand Bob Briskis Antwort hilfreich, aber ich glaube, dass Savon seit seiner Antwort aktualisiert worden ist. Hier ist ein kleines Beispiel basierend auf der neuesten Dokumentation:

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'] 
    } 
})