Использование savon с веб-сервисом точной цели
У меня проблемы с формированием моего мыльного документа для следующего. это также мой первый раз, используя мыло. После некоторых исследований и рекомендаций, 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
Может ли какая-то добрая душа помочь мне с этим?
5 ответов
Проверьте этот драгоценный камень:
https://github.com/daws/exact_target_sdk
Наткнулся на это несколько дней назад, и это сделало жизнь намного проще.
Реализация SOAP в ExactTarget довольно слабая. Вы вообще не сможете использовать soap_actions Савона. Вам нужно будет вручную кодировать большую часть конверта в виде хэша и вручную установить SOAPAction в заголовке. Савон все же берет большую часть догадок из заголовка конверта. Вот пример для получения списка подписчиков фильтра:
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
Вам также может понадобиться удалить "s4" из URL wsdl в зависимости от типа вашей учетной записи.
Возможно, вам просто нужно отправить свои учетные данные API:
Savon::WSSE.username = "USERNAME_HERE"
Savon::WSSE.password = "PASSWORD_HERE"
прежде чем делать запросы.
Я нашел ответ Боба Бриски полезным, но я думаю, что Савон был обновлен с момента его ответа. Вот небольшой пример, основанный на последней документации:
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']
}
})