2010-12-05 4 views
2

J'ai des problèmes pour former mon document de savon pour ce qui suit. c'est aussi ma première fois en utilisant du savon. après quelques recherches et recommandations, le savon semble être la solution. J'ai l'erreur suivante sur un en-tête de sécurité qui est manquant.en utilisant du savon avec le service web de exacttarget

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

J'ai collé la réponse complète ici. http://pastie.org/1349438

Est-ce que n'importe quelle âme aimable m'aiderait avec ceci?

Répondre

1

Vous avez probablement juste besoin d'envoyer vos informations d'identification de l'API:

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

avant de faire des demandes.

0

Est devrait être client.wsdl.soap_actions

2

la mise en œuvre SOAP de ExactTarget est assez faible. Vous ne pourrez pas utiliser soap_actions de Savon. Vous aurez besoin de coder la plupart de l'enveloppe comme un hachage et de définir manuellement l'action SOAPAction dans l'en-tête. Savon prend cependant la plupart des conjectures sur l'en-tête de l'enveloppe. Voici un exemple pour tirer une liste d'abonnés de filtre:

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 

Vous devrez peut-être supprimer le de l'url wsdl « s4 » en fonction de votre type de compte.

0

J'ai trouvé la réponse de Bob Briski utile, mais je crois que Savon a été mis à jour depuis sa réponse. Voici un petit exemple basé sur la dernière documentation:

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