2013-08-19 2 views
0

Я использую SOAP api для allegro.pl (альтернативный вариант для пользы для ebay.com), и у меня есть проблема с отправкой изображений через SOAP. Я задавал тот же вопрос на официальном форуме, но, к сожалению, никто не ответил.Отправка base64binary (изображение) через SOAP с ruby ​​/ savon

Во всяком случае, работа (часть) кода (мыло сообщение) в PHP выглядит следующим образом:

array(
'fid' => 16, 
'fvalueImage' => file_get_contents('http://www.stropna_www.pl/images/obrazek.jpg') 

нота это не полное сообщение мыло, но это один, который меня не спал в эту ночь

И он работает (ну, в документации он работает, я не могу быть уверен, что я не использую PHP (и не знаю)). Я искал эквивалент file_get_contents в рубине, и я пытался использовать сеть/HTTP и открытой URI, чтобы открыть файл с URL и даже пытался использовать

img = File.open('img.jpg', 'rb') { |f| f.read } 

, но каждый раз, когда я пытаюсь, возвращает сервер неверный XML.

Когда я пытаюсь отправить запрос без изображения, он работает правильно.


Вот полный код в Ruby:

def self.do_new_auction_ext 
img = File.open('img.jpg', 'rb') { |f| f.read } 

xml_message = prepare_message("DoNewAuctionExtRequest", { 
    :sessionHandle => self.session_id, 
    :fields => [ 
    { :fid => 1,        # Tytuł 
     :fvalueString => "Oferta Testowa ze zdjeciem", },  # TODO: Zmienne? 
    { :fid => 2,        # Kategoria 
     :fvalueInt => 1834 },      # TODO: Zmienne? 
    { :fid => 4,        # Czas trwania 
     :fvalueInt => 3 },       # 1 - 3 dni, 2 - 7 dni, 3 - 10 dni 
    { :fid => 5,        # Ilość 
     :fvalueInt => 12},       # TODO: Zmienne? 
    { :fid => 8,        # Cena kup teraz 
     :fvalueFloat => 50.00},      # TODO: Zmienne? 
    { :fid => 9,        # Kraj 
     :fvalueInt => 228},       # 1 - Polska, 228 - Neverland 
    { :fid => 10,        # Wojewodztwo 
     :fvalueInt => 215},       # Lewopolskie 
    { :fid => 11,        # Miejscowość 
     :fvalueString => "Bielsko-Biala"}, 
    { :fid => 14,        # Formy platnosci 
     :fvalueInt => 1 },       # Płatne z góry przelewem 
    { :fid => 16,        # Zdjecie 1 
     :fvalueString => img }, 
    #{ :fid => 15,        # Opcje dodatkowe 
    # :fvalueInt => 2}, 
    { :fid => 24,        # Opis 
     :fvalueString => "konik"}, 
    { :fid => 28,        # Sztuki/Komplety/Pary 
     :fvalueInt => 1}, 
    { :fid => 32,        # Kod pocztowy 
     :fvalueString => "43-300"}, 
    { :fid => 35,        # Darmowe opcje przesylki 
     :fvalueInt => 2}       # 1 - Odbior osobisty, 2 - e-mail, 4 - Odbior osobisty po przedplacie 
    ] 
}) 

# puts xml_message 

response = @client.call(:do_new_auction_ext) do 
    xml xml_message 
end 

не возражаете полировать комментарии

функция prepare_message только создает XML, который идет на сервер, и я вполне уверен, что он работает правильно, так как без ответа сервера отвечает (он работает!)

но, с th е изображение послало сервер ответил

{:fault=>{:faultcode=>"Sender", :faultstring=>"Invalid XML"}} 

и здесь website with working PHP codeсайта на польском языке, но код в PHP

и, наконец, here is the documentationэто также на польском языке, но включает в себя английское именование и дополнительное PHP-код под вкладкой «Przykłady wywołań»

Я использую Ruby 1.9.3 и savon для отправки всего запроса SOAP (который работает, но отправка изображения не выполняется).


Извинения за стенопись текста, но я пытался объяснить это, я могу. Заранее спасибо за любую помощь, и спасибо даже за чтение этого :)

ответ

1

Я бы попытаться закодировать содержимое изображения, как:

Base64.encode64(File.binread('path_to_your_file')

Смежные вопросы