2013-08-19 50 views
0

我正在使用SOAP api for allegro.pl(波蘭語替代ebay.com),並且我通過SOAP發送圖像時存在小問題。我在官方論壇上提出了同樣的問題,但不幸的是沒有人回答。通過使用ruby/savon SOAP發送base64binary(image)

不管怎樣,在PHP工作(片)代碼(SOAP消息)看起來像這樣:

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

請注意,這不是一個完整的SOAP消息,但是這一次這讓我不睡覺這個夜晚

它的工作原理(很好,在文檔中的作品,我不能確定,因爲我不使用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都到服務器,我很確定它工作正常,因爲沒有圖像服務器響應,因爲它應該(它的工作!)

但與第Ë圖像發送服務器

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

迴應,這裏是website with working PHP code網站是波蘭語,但代碼是在PHP

;最後,here is the documentation它也是波蘭的,但是包括英文命名和附加在「Przykładywywołań」選項卡

我使用Ruby 1.9.3和薩翁發送所有SOAP請求PHP代碼(這工作,但發送圖像沒有)。


道歉的文本牆,但我試圖解釋這個最好的,我可以。 在此先感謝您的幫助,謝謝你甚至閱讀此:)

回答

1

我會想辦法的圖像內容進行編碼,如:

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